CC=gcc
CFLAGS=-O -Wall
#CFLAGS=-O3 -fno-gcse -fno-reorder-blocks -Wall
LIBFLAGS=-lrt
LLVMCC=llvm-gcc-4.2
LLVMFLAGS=-O3 -emit-llvm
LLVMLINK=llvm-ld
JAVAC=javac
JAVA=java
VARNISH_SRC=/path/to/varnish/src/varnish-3.0.0
VCFLAGS=$(CFLAGS) -I$(VARNISH_SRC)/include -I$(VARNISH_SRC)
PYTHON=python
VMODPY=$(VARNISH_SRC)/lib/libvmod_std/vmod.py


all:			client
c:			client
llvm:			client.llvm
java:			client.jvm
varnish:		CFLAGS=-O -Wall -fPIC
varnish:		clean vmod_dclass.so

client:			main.o dtree_client.o
			$(CC) -o client main.o dtree_client.o $(LIBFLAGS)

main.o:			main.c dtree_client.h
			$(CC) $(CFLAGS) -c main.c -o main.o

dtree_client.o:		dtree_client.c dtree_client.h
			$(CC) $(CFLAGS) -c dtree_client.c -o dtree_client.o

client.llvm:		main.bc dtree_client.bc
			$(LLVMLINK) -o client.llvm main.bc dtree_client.bc $(LIBFLAGS)

main.bc:		main.c dtree_client.h
			$(LLVMCC) $(LLVMFLAGS) -c main.c -o main.bc

dtree_client.bc:	dtree_client.c dtree_client.h
			$(LLVMCC) $(LLVMFLAGS) -c dtree_client.c -o dtree_client.bc

client.jvm:		DTreeClient.class
			printf "#!/bin/bash\n$(JAVA) DTreeClient \"\$$@\"\n" > client.jvm
			chmod 755 client.jvm

DTreeClient.class:	DTreeClient.java
			$(JAVAC) DTreeClient.java

vmod_dclass.so:		dtree_client.o vcc_if.o vmod_dclass.o
			$(CC) -shared dtree_client.o vcc_if.o vmod_dclass.o -o libvmod_dclass.so

vcc_if.o:		vcc_if.c vcc_if.h
			$(CC) $(VCFLAGS) -c vcc_if.c -o vcc_if.o

vmod_dclass.o:		vmod_dclass.c
			$(CC) $(VCFLAGS) -c vmod_dclass.c -o vmod_dclass.o

vcc_if.%:		vmod_dclass.vcc
			$(PYTHON) $(VMODPY) vmod_dclass.vcc

clean:
			rm -f *.o client *.bc client.llvm *.class client.jvm vcc_if.c vcc_if.h libvmod_dclass.so
