#
# GCC specific stuff
GLIB1 = _addsubd.o _addsubs.o _cmpdf2.o _cmpsf2.o _divdf3.o _divmods.o \
	_divsf3.o _extends.o _fixdfsi.o _fxunsd.o _fltsi.o \
	_muldf3.o _mulsf3.o _mulsi3.o _negdf2.o _negsf2.o _normdf.o _normsf.o \
	_truncdf.o _udivmod.o _umulsi3.o _fixsfsi.o _fltsisf.o

#GLIB2 = gnulib2.o
GLIB2 = _adddi3.o _subdi3.o _muldi3.o _divdi3.o _moddi3.o _udivdi3.o \
        _umoddi3.o _negdi2.o _anddi3.o _iordi3.o _xordi3.o _lshrdi3.o \
        _lshldi3.o _ashldi3.o _ashrdi3.o _one_cmpldi2.o _bdiv.o _cmpdi2.o \
        _ucmpdi2.o _fixunsdfdi.o _fixdfdi.o _floatdidf.o \
	_fxussfsi.o

GCC= 	crtinit.o stksiz.o inistack.o heapbase.o binmode.o \
	$(GLIB1) $(GLIB2) \
	ldexp.o frexp.o modf.o alloca.o setjmp.o osbind.o\
	linea.o  alglobal.o thread.o sysvar.o gmon.o \
	initsig.o bblink.o defmode.o
#
# ANSI stuff + support
ANSI =  atol.o atof.o abort.o atexit.o bsearch.o \
	calloc.o clock.o ctime.o ctype.o difftime.o \
	fopen.o fclose.o fdopen.o fflush.o fgetc.o fgets.o \
	fputc.o fputs.o fread.o fwrite.o fseek.o fsetpos.o \
	eprintf.o fprintf.o sprintf.o \
	fscanf.o scanf.o sscanf.o \
	getenv.o gets.o getw.o localtim.o \
	malloc.o qsort.o raise.o rand.o realloc.o \
	setbuf.o setvbuf.o \
	setlocal.o strftime.o strtol.o system.o \
	tmpnam.o tmpfile.o \
	ltoa.o main.o doprnt.o div.o \
	strtoul.o fungetc.o filbuf.o getbuf.o toxxx.o

#
# other miscellaneous stuff
PORT =  alphasor.o abs.o findfile.o fopenp.o ftw.o getpw.o gethostn.o \
	getlogin.o getopt.o getpages.o getpass.o grp.o ident.o mktemp.o \
	regexp.o regsup.o scandir.o strlwr.o strrev.o textio.o random.o \
	obstack.o utmp.o wtmp.o \
	il.o ic.o iw.o ig.o ip.o

#
# the string library

STRING = strcat.o strchr.o strcmp.o strcpy.o strcspn.o strdup.o \
	strlen.o strncat.o strncmp.o strncpy.o strpbrk.o strrchr.o strspn.o \
	strtok.o strstr.o memccpy.o memcmp.o memchr.o \
	bcopy.o bcmp.o bzero.o strerror.o strcoll.o \
	stricmp.o strnicmp.o

#
# stuff to fake unix system calls 

UNIX=   access.o alarm.o console.o chdir.o chmod.o close.o dirent.o dup.o \
	exec.o fcntl.o fork.o getcwd.o getpid.o getuid.o getrusag.o \
	getdtabl.o getgroup.o ioctl.o isatty.o \
	kill.o killpg.o link.o lockf.o lseek.o mkdir.o mknod.o \
	nice.o open.o pause.o pipe.o perror.o popen.o psignal.o \
	putenv.o \
	read.o rename.o rmdir.o sbrk.o select.o sgtty.o sigactio.o \
	sigblock.o siglist.o signal.o sleep.o spawn.o spawnve.o spawnvp.o \
	setrlimi.o stat.o statfs.o symlink.o sysconf.o \
	time.o times.o timeoday.o ttyname.o \
	uname.o unlink.o unx2dos.o utime.o vfork.o wait.o wait3.o \
	waitpid.o write.o

#
# stuff for integer only scan/printf

IIOBJ = idoprnt.o iscanf.o fprintf.o sprintf.o fscanf.o sscanf.o

all: $(ALL)
all020: $(ALL020)

$(CLIB): $(GCC) $(UNIX) $(STRING) $(ANSI) $(PORT)
	$(AR) rs $(CLIB) $(GCC) $(UNIX) $(STRING) $(ANSI) $(PORT)

$(IIOLIB): $(IIOBJ)
	$(AR) rs $(IIOLIB) $(IIOBJ)

#
# gmon.o CANNOT have -fomit-frame-pointer
gmon.o: gmon.c
	$(CC) $(CFFLAGS) -c $<

#
# Assembler stuff that needs to be preprocessed
#
.SUFFIXES: .cpp

.cpp.s:
	$(CPP) $(PPFLAGS) $< -o $@

setjmp.o : setjmp.cpp
div.o : div.cpp
_addsubd.o: _addsubd.cpp
_addsubs.o: _addsubs.cpp
_divdf3.o: _divdf3.cpp
_divsf3.o: _divsf3.cpp
_extends.o: _extends.cpp
_fixdfsi.o: _fixdfsi.cpp
_fltsi.o: _fltsi.cpp
_fxunsd.o: _fxunsd.cpp
_muldf3.o: _muldf3.cpp
_mulsf3.o: _mulsf3.cpp
_normdf.o: _normdf.cpp
_normsf.o: _normsf.cpp
_truncdf.o: _truncdf.cpp
_fixsfsi.o: _fixsfsi.cpp
_fltsisf.o: _fltsisf.cpp
frexp.o: frexp.cpp
ldexp.o: ldexp.cpp
modf.o: modf.cpp
vfork.o : vfork.cpp
osbind.o : osbind.cpp
bzero.o: bzero.cpp

#
# integer only io stuff
idoprnt.o: doprnt.c
	$(CC) $(CFLAGS) -D__NO_FLOAT__ -c $< -o idoprnt.o

iscanf.o: scanf.c
	$(CC) $(CFLAGS) -D__NO_FLOAT__ -c $< -o iscanf.o

#
# gcrt0 and crt0
#

$(GCRT0): crt0.cpp
	$(CPP) $(PPFLAGS) -DGCRT0 crt0.cpp -o temp.s
	$(CC) $(CFLAGS) -c temp.s -o $(GCRT0)
	rm -f temp.s

$(CRT0): crt0.cpp
	$(CPP) $(PPFLAGS) crt0.cpp -o temp.s
	$(CC) $(CFLAGS) -c temp.s -o $(CRT0)
	rm -f temp.s

# other dependencies
bcopy.o : bcopy.s
atof.o  : flonum.h

#
# gnulib2 stuff (must be compiled with 32 bit ints)

$(GLIB2): %.o: gnulib2.c
	$(CC) $(CLFLAGS) -DL$* -c gnulib2.c -o $@

.PHONY:	install install020 clean realclean all all020 top

install: $(ALL)
	$(CP) $(ALL) $(LIB)

install020: $(ALL020)
	$(CP) $(ALL020) $(LIB)

clean:
	rm -f $(GCC)
	rm -f $(UNIX)
	rm -f $(STRING)
	rm -f $(ANSI)
	rm -f $(PORT)
	rm -f $(IIOBJ)
# this next lines shouldn't really be necessary, but we do it just in
# case
	rm -f setjmp.s div.s
	rm -f _addsubd.s _addsubs.s _divdf3.s _divsf3.s _extends.s _fixdfsi.s
	rm -f _fltsi.s _fxunsd.s _muldf3.s _mulsf3.s _normdf.s _normsf.s
	rm -f _truncdf.s _fixsfsi.s _fltsisf.s frexp.s ldexp.s modf.s
	rm -f vfork.s osbind.s bzero.s temp.s
