ghc := ghc ghcflags := -Wall -optl -w # -DHAS_GETPOINTERTOGLOBAL=1 examples := HelloJIT Fibonacci BrainF Vector Array DotProd Arith Align Struct Varargs List CallConv all: $(examples:%=%.exe) Vector: Convert.hs %.exe: %.hs $(ghc) $(ghcflags) --make -o $@ -main-is $(basename $<).main $< %_dyn.exe: %.hs $(ghc) $(ghcflags) -dynamic --make -o $@ -main-is $(basename $<).main $< Struct.exe: Struct.hs structCheck.c $(ghc) $(ghcflags) --make -o $@ -main-is Struct.main $^ Struct_dyn.exe: Struct.hs structCheck.c $(ghc) $(ghcflags) -dynamic --make -o $@ -main-is $(basename $<).main $^ %.run: %.exe ./$< run: $(examples:%=%.run) %.s: %.bc llc -f $< # This would lead to a cycle with llvm-as. # %.ll: %.bc # llvm-dis -f $< %-dis.ll: %.bc llvm-dis -o $@ -f $< %.bc: %.ll llvm-as -f $< %-opt.bc: %.bc opt -O3 < $< > $@ N=40 fastfib: Fibonacci @rm -f Fib.bc Fib.s time ./Fibonacci $(N) opt -std-compile-opts Fibonacci.bc -o Fib.bc llc Fib.bc $(CC) mainfib.c Fib.s -o Fib time ./Fib $(N) @echo Have a look at Fib.s if you like to see clever code. clean: rm -f $(examples) *.o *.hi *.s *.bc Fib *.exe *.exe.manifest *~