#
# 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 _isnan.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 _gccbcmp.o

GCC= 	$(GLIB1) $(GLIB2) \
	ldexp.o frexp.o modf.o alloca.o setjmp.o osbind.o\
	linea.o  alglobal.o sysvar.o gmon.o screen.o stksiz.o binmode.o \
	bblink.o defmode.o
#
# ANSI stuff + support
ANSI =  atol.o atof.o abort.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 \
	fprintf.o eprintf.o sprintf.o \
	fscanf.o scanf.o sscanf.o \
	getenv.o putenv.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 portable stuff
PORT =  a64l.o alphasor.o abs.o catch.o dirent.o findfile.o ftw.o getpw.o \
	getlogin.o getopt.o getpass.o ident.o mktemp.o scandir.o strlwr.o \
	strrev.o strupr.o regexp.o regsup.o textio.o random.o obstack.o \
	il.o ic.o iw.o ig.o ip.o frwbin.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 chdir.o chmod.o close.o console.o device.o dup.o exec.o fcntl.o \
	fhandle.o fork.o getcwd.o getpid.o getuid.o grp.o ioctl.o isatty.o \
	link.o lseek.o mkdir.o null.o open.o perror.o pipe.o popen.o psignal.o \
	read.o rename.o rmdir.o \
	sbrk.o sgtty.o signal.o siglist.o sleep.o spawnve.o spawnvp.o stat.o \
	symdir.o symlink.o tchars.o time.o timeoday.o times.o \
	unlink.o unx2dos.o utime.o vfork.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)

$(CLIB020): $(GCC) $(UNIX) $(STRING) $(ANSI) $(PORT)
	$(AR) rs $(CLIB020) $(GCC) $(UNIX) $(STRING) $(ANSI) $(PORT)

$(IIOLIB): $(IIOBJ)
	$(AR) rs $(IIOLIB) $(IIOBJ)

#
# osbind.o/gmon.o/fork.o CANNOT have -fomit-frame-pointer
osbind.o: osbind.c
	$(CC) $(CFFLAGS) -c $<
gmon.o: gmon.c
	$(CC) $(CFFLAGS) -c $<
fork.o: fork.c
	$(CC) $(CFFLAGS) -c $<

#
# Assembler stuff that needs to be preprocessed by cpp
#
%.o : %.cpp
	$(CC) $(PPFLAGS) -c $<

#
# 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
$bcrt0.o: crt0.c
	$(CC) $(CFLAGS) -c $< -o $@

$bgcrt0.o: crt0.c
	$(CC) $(CFLAGS) -D__GCRT0__ -c $< -o $@


# other dependencies
atof.o  : flonum.h

#
# gnulib2 targets
#
# 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)

