# Stalin can be compiled with egcs when it is available.
#CC = egcs
CC = gcc

OPTIONS = -I ./include -On -t -c -db\
          -clone-size-limit 3 -split-even-if-no-widening\
          -do-not-align-strings\
          -treat-all-symbols-as-external\
          -do-not-index-constant-structure-types-by-expression\
          -do-not-index-allocated-structure-types-by-expression

# Stalin can be compiled with -freg-struct-return on most platforms. But gcc
# and egcs have a bug on Linux/Alpha that causes them to crash when given
# -freg-struct-return so the default is not to use -freg-struct-return so that
# the same makefile will work on all platforms. If you are not running on
# Linux/Alpha then it is recommended to enable -freg-struct-return.
#stalin: stalin.c
#	$(CC) -o stalin -I./include -O2 -fomit-frame-pointer\
#	      -freg-struct-return stalin.c -L./include -lm -lgc

stalin: stalin.c
	$(CC) -o stalin -I./include -O2 -fomit-frame-pointer\
	      stalin.c -L./include -lm -lgc
	./post-make

stalin.c: stalin.sc
	./stalin $(OPTIONS) stalin

stalin-ia32.c: stalin.sc
	./stalin $(OPTIONS) -ia32 stalin
	cp -f stalin.c stalin-ia32.c

stalin-sparc.c: stalin.sc
	./stalin $(OPTIONS) -sparc stalin
	cp -f stalin.c stalin-sparc.c

stalin-mips.c: stalin.sc
	./stalin $(OPTIONS) -mips stalin
	cp -f stalin.c stalin-mips.c

stalin-alpha.c: stalin.sc
	./stalin $(OPTIONS) -alpha stalin
	cp -f stalin.c stalin-alpha.c

clean:
	rm -f ./include/gc.h
	rm -f ./include/libgc.a
	rm -f ./include/libstalin.a
