#
# GCC specific stuff
GLIB1 = _addsubd.o _addsubs.o _cmpdf2.o _cmpsf2.o _divdf3.o _divmods.o \
	_divsf3.o _extends.o _fixdfsi.o _fixudfs.o _floatsi.o \
	_muldf3.o _mulsf3.o _mulsi3.o _negdf2.o _negsf2.o normdf.o _normsf.o \
	_truncdf.o _udivmod.o _umulsi3.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

GCC= 	crtinit.o stksiz.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
#
# ANSI stuff + support
ANSI =  atol.o atof.o abort.o bsearch.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 \
	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 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

#
# other miscellaneous stuff
PORT =  alphasor.o abs.o findfile.o fopenp.o ftw.o getpw.o gethostn.o \
	getlogin.o getopt.o getpass.o grp.o mktemp.o \
	regexp.o regsup.o scandir.o strlwr.o strrev.o textio.o random.o \
	utmp.o wtmp.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 memcpy.o memccpy.o memcmp.o memchr.o memset.o \
	bcopy.o bcmp.o bzero.o strerror.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 link.o lseek.o mkdir.o mknod.o \
	nice.o open.o pause.o pipe.o perror.o popen.o psignal.o \
	read.o rename.o rmdir.o sbrk.o select.o sgtty.o \
	sigblock.o siglist.o signal.o sleep.o spawn.o spawnve.o spawnvp.o \
	setrlimi.o stat.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 write.o

#
# stuff for integer only scan/printf

IIOBJ = idoprnt.o iscanf.o fprintf.o sprintf.o fscanf.o sscanf.o

all: $(ALL)

$(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 gmon.c

#
# setjmp.s, div.s, vfork.s, normdf.s must be pre-processed
#
%.s : %.cpp
	$(CPP) $(PPFLAGS) $< $@

setjmp.o : setjmp.cpp
div.o : div.cpp
vfork.o : vfork.cpp
normdf.o : normdf.cpp
ldexp.o : ldexp.cpp
frexp.o : frexp.cpp
osbind.o : osbind.cpp

#
# integer only io stuff
idoprnt.o: doprnt.c
	$(CC) $(CFLAGS) -D__NO_FLOAT__ -c doprnt.c -o idoprnt.o

iscanf.o: scanf.c
	$(CC) $(CFLAGS) -D__NO_FLOAT__ -c scanf.c -o iscanf.o

# gcrt0
gcrt0.o: gcrt0.s
crt0.o:	crt0.s

# other dependencies
bcopy.o : bcopy.s
modf.o  : modf.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 clean realclean all

install:
	cp $(ALL) $(LIB)

clean:
	rm -fv $(GCC)
	rm -fv $(UNIX)
	rm -fv $(STRING)
	rm -fv $(ANSI)
	rm -fv $(PORT)
	rm -fv $(IIOBJ)
# this next line shouldn't really be necessary, but we do it just in
# case
	rm -fv setjmp.s div.s normdf.s ldexp.s frexp.s vfork.s osbind.s

realclean: clean
	rm -f $(ALL)
