home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 9 / FreshFishVol9-CD2.bin / bbs / gnu / libnix-0.8-src.lha / libnix-0.8 / sources / amiga / makefile < prev   
Encoding:
Makefile  |  1995-02-26  |  1.9 KB  |  69 lines

  1. SOURCEDIR=../../sources/amiga
  2.  
  3. include $(SOURCEDIR)/filelist
  4.  
  5. OPTIONS=-I $(SOURCEDIR)/../headers $(CFLAGS)
  6.  
  7. vpath %.c $(SOURCEDIR)
  8. vpath %.S $(SOURCEDIR)
  9.  
  10. SOURCEFILES=*/*
  11.  
  12. %.o: %.c
  13.     gcc $(OPTIONS) -c $^ -o $@ 2>&1|tee $*.err
  14.     -if test ! -s $*.err; then rm $*.err; fi
  15.  
  16. %.o: %.S
  17.     gcc $(OPTIONS) -c $^ -o $@ 2>&1|tee $*.err
  18.     -if test ! -s $*.err; then rm $*.err; fi
  19.  
  20. .PHONY: all clean veryclean splitinline
  21.  
  22. all: libamiga.a
  23.  
  24. clean:
  25.     -rm -r $(SUBDIRS)
  26.  
  27. veryclean:
  28.     -rm -r *
  29.  
  30. $(SUBDIRS):
  31.     mkdir $@
  32.  
  33. libamiga.a: $(SUBDIRS) $(OBJECTS) libglue.a $(SOURCEDIR)/makefile $(SOURCEDIR)/filelist
  34.     -rm libamiga.a
  35.     -cp libglue.a libamiga.a
  36.     ar -q libamiga.a $(OBJECTS)
  37.     ranlib libamiga.a
  38.  
  39. libglue.a:
  40.     -mkdir tmp
  41. # Build assembler stubs out of inline headers:
  42. # * First transform all vararg #defines into real functions
  43. # * Compile all functions with 'extern' and '__inline' disabled
  44. # * Split resulting assembler output at function entries
  45.     -cd tmp; \
  46.     echo "" >dummy.c; \
  47.     for file in /gnu/os-include/inline/*.h; do \
  48.     ( gawk 'nf==1 { fn=$$1;nf=0 } \
  49.             /inline/ { vs="long";rs="return ";nf=1 } \
  50.             /void/ { vs="void";rs="";nf=1 } \
  51.             /\.\.\./ \
  52.             { st=substr($$0,1,index($$0,"tags...")-1); \
  53.               st=substr(st,index(st," ")); \
  54.               st2=st;gsub(/\(/,"(long ",st2);gsub(/,/,",long ",st2); \
  55.               print "#undef" substr(st,1,index(st,"(")-1) "\n" vs st2 "tags,...)"; \
  56.               print "{ " rs fn substr(st,index(st,"(")) "&tags); }\n" \
  57.             }' $$file >vararg.c; \
  58.       ( gcc -O3 -w -include $$file vararg.c -S -o -; \
  59.         gcc -Dextern= -D__inline= -D_STRSUP_H -include $$file -O3 dummy.c -S -o - ) | \
  60.       gawk '/.even/ { next } /.comm/ { next } \
  61.             /.globl/ { if(file!="") close(file); file=$$2 ".s"; \
  62.                        print "\t.even\n" $$0 >file; next; } \
  63.             { if(file!="") print $$0 >file; }' ); done
  64.     -cd tmp;rm vararg.c dummy.c;gcc $(OPTIONS) -c *.s
  65.     -rm libglue.a
  66.     -cd tmp;ar -q ../libglue.a *.o
  67.     -rm -r tmp
  68.  
  69.