# Since we are transforming C code into bytecode using CAL,
# it will be compared to the result generated by llvm
# llvm version used is llvm-2.7
# platform is `uname -srmo`:
# Linux 3.10.17-gentoo x86_64 GNU/Linux
# Please use the script to build llvm-2.7
# !!!!!!you have to use gcc-4.5 to build llvm-2.7!!!!!

CAL=../cal

CLANG=./llvm/install/bin/llvm-gcc
LLVMDIS=llvm-dis
LLVMC=llc
LLVMAS=llvm-as

CFLAGS=-emit-llvm -O0 

SRCS=$(wildcard *.c)
EXES=$(patsubst %.c, %-cal, $(SRCS))
LLEXES=$(patsubst %.c, %-ll, $(SRCS)) $(patsubst %.c, %-cal.ll, $(SRCS))

gl.o: ../glsupport.c
	gcc -c $< -o $@

%-cal: %.c $(CAL) gl.o
	rm -f $@.ll
	cat ../gltypes.h > $@.tmp0
	cat $< >> $@.tmp0
	$(CAL) < $@.tmp0 > $@.tmp
	rm -f $@.tmp0
	-grep "private constant" $@.tmp > $@.ll
	grep -v "private constant" $@.tmp  >> $@.ll
	rm -f $@.tmp
	$(LLVMAS) $@.ll -o $@.bc
	$(LLVMC) $@.bc -o $@.s
	rm -f $@.bc
	gcc $@.s gl.o -o $@ -lglut -lpthread
	rm -f $@.s
	


%-ll : %.c gl.o
	rm -f $@.ll
	cat ../gltypes.h > $@_.c
	cat $< >> $@_.c
	$(CLANG) $(CFLAGS) -c $@_.c -o $@.bc
	$(LLVMDIS) -f $@.bc
	$(LLVMC) $@.bc -o $@.s
	gcc $@.s gl.o -o $@ -lglut
	rm -f $@.bc $@.s


$(CAL):
	make -C ..

.PHONY: clean $(CAL) gl

clean:
	rm -rf *.s $(EXES) $(LLEXES) gl.o
	make -C .. clean

