#
# Makefile for jump table version of shared libraries
#
# where are we?
SRCDIR=$(HOME)/p/librl/jump
##########################################
#### DEPENDENT ON WHICH LIB ##############
##########################################
LIBRARY=rl
MAJOR=0
MINOR=2
LIBSRC=libreadline.a
SYSLIBS=-ltermcap -lc -lgcc 
GLOBAL_DATAS=00_DATA.o
LIB_TEXT_ADDRESS=60400000
LIB_DATA_ADDRESS=60480000
##################################
#### DERIVED VALUES ##############
##################################
SHORTNAME=lib$(LIBRARY)
JUMPVERSION=$(MAJOR).$(MINOR)
SHLIB=lib$(LIBRARY).so.$(JUMPVERSION)
LOADSHLIB=$(SHORTNAME).so.$(MAJOR)
SHAREDLIB_DECL=__jump_$(SHORTNAME)_v$(MAJOR)

#############################################

# which version of GNU C compiler to use?
GCCVERSION= -V 2.2.2d
GCCVERSION= -V ss-920925

# where do you build this?
HOST_MACHINE=i386-att-sysv
HOST_MACHINE=i386-linux
TARGET_MACHINE=i386-linux

# Host root directory, maybe /usr for Linux
HOSTROOTDIR=/usr

# Host root directory, maybe /usr for Linux
TARGETROOTDIR=/usr

# where do we put the shared image? /lib for Linux
IMAGEDIR=/lib

# Host bin direcory
HOSTBINDIR=$(HOSTROOTDIR)/bin

# For Linux, that should be /usr/bin
CROSSBINDIR=/usr/bin

# This should be /usr/lib under Linux.
HOST_LIB_DIR =/usr/lib

HOST_STATIC_DIR =$(HOST_LIB_DIR)
HOST_JUMP_DIR =$(HOST_LIB_DIR)/shlib/jump

TARGETDIR =$(TARGETROOTDIR)/lib/shlib/jump

MKDIR=mkdir -p

# some OS needs this for very long arguments
# I think Linux can handle it.
NEED_DOBIG=`if [ $(HOST_MACHINE) = i386-att-sysv ]; then echo yes; \
	    else echo no; fi`

AR	=$(CROSSBINDIR)/ar
AS	=$(CROSSBINDIR)/as
LD	=$(CROSSBINDIR)/ld
NM	=$(CROSSBINDIR)/nm
RANLIB	=$(CROSSBINDIR)/ranlib
STRIP	=$(CROSSBINDIR)/strip

LDFLAGS	=-x -r
LIBRESOLVE = $(SRCDIR)/../resolve/libresolve

CC	=$(HOSTBINDIR)/gcc $(GCCVERSION) -b $(TARGET_MACHINE)
INC	=
XCFLAGS =-D_GNU_SOURCE -DSTDC_HEADERS
CFLAGS  =-Wall -O2 $(INC) $(XCFLAGS)
CPP	=$(CC) -E $(INC) $(XCFLAGS)
RM	=/bin/rm
LN	=ln -f

ALL1	=all

# Is this still needed?
JUMPTABLE=yes

# This is the real jump table. So no CLASSIC_BIT 0x10000000

VERSION=`echo $(MAJOR) $(MINOR) | \
	awk '{printf "0x%x%04x", $$1, $$2;}'`
AVERSION=Jump table $(MAJOR).$(MINOR)


SHAREDFLAGS=-DSHAREDLIB_NAME=\"/lib/$(REALSHLIB)\" \
	-DSHAREDLIB_ADDR=0x$(LIB_TEXT_ADDRESS) \
	-DSHAREDLIB_DECL=$(SHAREDLIB_DECL) \
	-DSHAREDLIB_AVERS=\""$(AVERSION)"\" \
	-DSHAREDLIB_VERS=$(VERSION)

.SUFFIXES: .i .S

.c.i:
	$(CC) $(CFLAGS) -i -o $*.i $<

.S.o:
	$(CC) $(CFLAGS) -c -traditional $<
	$(LD) $(LDFLAGS) $*.o
	mv a.out $*.o

.c.s:
	$(CC) $(CFLAGS) -S -o $*.s $<

.s.o:
	$(CC) -c -o $*.o $<
	$(LD) $(LDFLAGS) $*.o
	mv a.out $*.o

.c.o:
	$(CC) $(CFLAGS) -c -o $*.o $<
	$(LD) $(LDFLAGS) $*.o
	mv a.out $*.o

first: lib

all : __shared.o $(LIBRESOLVE) stub table shlib

ref : $(LIBRESOLVE) shlib.ref

$(LIBRESOLVE):
	(cd ../resolve; \
	 make GCCVERSION="$(GCCVERSION)" HOST_MACHINE=$(HOST_MACHINE))

#__shared.o: __shared.i
__shared.o: __shared.c
	$(CC) $(CFLAGS) $(SHAREDFLAGS) -c __shared.c
	$(LD) $(LDFLAGS) $@
	mv a.out $@

__shared.i: __shared.c
	@echo $(SHAREDFLAGS)
	$(CC) $(CFLAGS) $(SHAREDFLAGS) -E __shared.c -o __shared.i

__shared.s: __shared.c
	$(CC) $(CFLAGS) $(SHAREDFLAGS) -S $?

lib: prep
	$(MAKE) SHLIB=$(SHLIB) LIBSRC="$(LIBSRC)" \
		REALSHLIB=$(LOADSHLIB) \
		IMAGE=$(LIBRARY) \
		LIB_TEXT_ADDRESS=$(LIB_TEXT_ADDRESS) \
		LIB_DATA_ADDRESS=$(LIB_DATA_ADDRESS) \
		GLOBAL_DATAS="$(GLOBAL_DATAS)" \
		SHAREDLIB_DECL=$(SHAREDLIB_DECL) \
		NEED_DOBIG=no \
		JUMPTABLE=yes \
		$(ALL1)

stub:
	export GCCVERSION="$(GCCVERSION)"; \
	export LD="$(LD)"; \
	export NM="$(NM)"; \
	export HOST_STATIC_DIR="$(HOST_STATIC_DIR)"; \
	./mkstub $(IMAGE) 0x$(LIB_TEXT_ADDRESS)

table:
	export GCCVERSION="$(GCCVERSION)"; \
	export LD="$(LD)"; \
	export NM="$(NM)"; \
	export HOST_STATIC_DIR="$(HOST_STATIC_DIR)"; \
	./mktable $(IMAGE) $(MAJOR) $(MINOR)

shlib:
	export AR="$(AR)"; \
	export AS="$(AS)"; \
	export CC="$(CC)"; \
	export LD="$(LD)"; \
	export LIBRESOLVE="$(LIBRESOLVE)"; \
	export NM="$(NM)"; \
	export RANLIB="$(RANLIB)"; \
	export STRIP="$(STRIP)"; \
	export JUMPTABLE="$(JUMPTABLE)"; \
	export NEED_DOBIG="$(NEED_DOBIG)"; \
	./mkshared "$(LIBSRC)" $(SHLIB) $(LIB_TEXT_ADDRESS) \
		$(LIB_DATA_ADDRESS) \
		"$(SYSLIBS)" $(SHAREDLIB_DECL) \
		$(HOST_STATIC_DIR) "$(GLOBAL_DATAS)" \
		"$(IOSTREAM_OBJS)" "$(LIBRARY)"

shlib.ref: 
	./mkshared "$(LIBSRC)" $(SHLIB) $(LIB_ADDRESS) \
		"$(SYSLIBS)"

install: 
	@echo Please do this manually.

clean: 
	$(RM) -f core *.o nohup.out
	for i in *.c;do \
	  if [ -f $$i ]; then \
	    $(RM) -f `basename $$i .c`.s; \
	  fi; \
	done
	(cd .. ; make clean)

realclean: clean
	$(RM) -f $(LIBRESOLVE)

dep:
	sed '/\#\#\# Dependencies/q' < Makefile > tmp_make
	(for i in *.c;do echo -n `echo $$i | sed 's,\.c,\.s,'`" "; \
		$(CPP) -M $$i;done) >> tmp_make
	cp tmp_make Makefile

prep:
	$(RM) -f __shared.o $(X11OBJS) $(VENDOR_OBJS)
	(cd .. ; make)

.FORCE:

### Dependencies:
