CAMLC=ocamlc
BACKEND=../backend
OBJS=scanner.cmo parser.cmo dot.cmo
EXT_OBJS=$(BACKEND)/semantics.cmo $(BACKEND)/codegen.cmo $(BACKEND)/xdot.cmo
INCLUDE=-I ../include -I $(BACKEND)
OCAML_FLAGS=$(INCLUDE) $(EXT_OBJS)
DOT=dot
COMPILER=fk2c
TARGETS=$(DOT) $(COMPILER) funkc
TESTS=test_dot

all : $(OBJS) $(TARGETS) $(TESTS)

test_dot: $(DOT)
	./$(DOT) < ./regression_test/test.funk > test.dot

%: %.ml $(OBJS)
	$(CAMLC) $(OCAML_FLAGS) -o $@ $(LIBS) $(OBJS) $<

scanner.ml : scanner.mll
	ocamllex scanner.mll

parser.ml parser.mli : parser.mly
	ocamlyacc parser.mly

automaton: parser.mly
	ocamlyacc -v parser.mly

%.cmo: %.ml
	ocamlc $(OCAML_FLAGS) -c $<
%.cmi: %.mli
	ocamlc $(OCAML_FLAGS) -c $<
.PHONY: clean test

clean:
	rm -rf *.cmo *.cmi parser.mli parser.ml parser.output scanner.ml main \ 		log *~ ./regression_test/*~

HOME=`pwd`
funkc: $(COMPILER)
	echo "#!/bin/bash" > $@
	echo "HOME=$(HOME)" >> $@
	cat funkc_base >> $@
	chmod +x funkc

test : clean all
	./regression

# generated by ocamldep *.ml *.mli
projparser-correct.cmo: scanner.cmo parser.cmi ast.cmi
projparser-correct.cmx: scanner.cmx parser.cmx ast.cmi
projparser.cmo: scanner.cmo parser.cmi ast.cmi
projparser.cmx: scanner.cmx parser.cmx ast.cmi
parser.cmo: ast.cmi parser.cmi
parser.cmx: ast.cmi parser.cmi
scanner.cmo: parser.cmi
scanner.cmx: parser.cmx
ast.cmi:
parser.cmi: ast.cmi
