.PHONY: clean all bench prepare SOURCES=$(wildcard *.c) BASENAMES=$(SOURCES:.c=) GCCEXES=$(SOURCES:.c=.gcc) GCCEXES=$(SOURCES:.c=.ogcc) ACCEXES=$(SOURCES:.c=.acc) EXES=$(GCCEXES) $(ACCEXES) RESULTS=$(SOURCES:.c=.result) GCC=gcc CFLAGS=-O0 OFLAGS=-O2 ACC=./acc.run TIME=./meantime.sh all: bench %.gcc: %.c @ $(GCC) $(CPPFLAGS) $(CFLAGS) -o $@ $< %.ogcc: %.c @ $(GCC) $(CPPFLAGS) $(OFLAGS) -o $@ $< %.s: %.c @ $(ACC) $< %.acc: %.s @ $(GCC) $(CPPFLAGS) $(CFLAGS) -o $@ $< %.acc-run: %.acc @ $(TIME) -f %U ./$< > $@ %.gcc-run: %.gcc @ $(TIME) -f %U ./$< > $@ %.ogcc-run: %.ogcc @ $(TIME) -f %U ./$< > $@ %.ratio1: %.acc-run %.gcc-run @ echo "print round(`cat $*.acc-run` / `cat $*.gcc-run`, 2)" | python > $@ %.ratio2: %.acc-run %.ogcc-run @ echo "print round(`cat $*.acc-run` / `cat $*.ogcc-run`, 2)" | python > $@ %.announce: @ echo Benchmarking "$*.c"... @ echo "$*.c" > $@ %.result: %.announce %.acc-run %.gcc-run %.ogcc-run %.ratio1 %.ratio2 @ cat $^ | tr '\n' '&' > $@ prepare: rm --force *.announce bench: prepare $(RESULTS) @ echo '& acc & gcc -O0 & gcc -O2 & 1/2 & 1/3 \\' @ for i in $(BASENAMES); do cat $$i.result; echo '\\'; done clean: rm --force $(EXES) $(RESULTS) \ *.gcc-run *.ogcc-run *.acc-run *.ratio* *.announce *.Clight *.ASM