# makefile

SOURCES = \
symbol_Table.mli \
symbol_Table.ml \
variables.mli \
variables.ml \
abstract_Syntax.ml \
concrete_To_Abstract_Syntax.mli \
concrete_To_Abstract_Syntax.ml \
labels.mli \
labels.ml \
parser.mli \
parser.ml \
lexer.ml \
program_To_Abstract_Syntax.mli \
program_To_Abstract_Syntax.ml \
pretty_Print.mli \
pretty_Print.ml \
values.mli \
values.ml \
cvalues.mli \
cvalues.ml \
env.mli \
env.ml \
cenv.mli \
cenv.ml \
caexp.mli \
caexp.ml \
cbexp.mli \
cbexp.ml \
fixpoint.mli \
fixpoint.ml \
ccom.mli \
ccom.ml \
main.ml

.PHONY : help
help :
	@echo ""
	@echo "make help        : this help"
	@echo "make trace       : trace fixpoint iterates"
	@echo "make untrace     : don't trace fixpoint iterates"
	@echo "make compile     : compile"
	@echo "./a.out filename : execute"
	@echo "make examples    : execute the examples"
	@echo "make errors      : execute the examples with runtime errors"
	@echo "make clean       : remove auxilairy files"
	@echo ""

.PHONY : trace preparetrace
trace: preparetrace compile
	@echo "fixpoint tracing mode"
preparetrace:
	@/bin/rm -f fixpoint.ml
	@ln -s fixpoint_printing_iterates.ml fixpoint.ml

.PHONY : untrace prepareuntrace
untrace: prepareuntrace compile
	@echo "no fixpoint tracing, recompile!"
prepareuntrace:
	@/bin/rm -f fixpoint.ml
	@ln -s fixpoint_no_printing.ml fixpoint.ml

.PHONY : compile
compile:
	ocamlyacc parser.mly
	ocamllex lexer.mll
#	ocamlc -i $(SOURCES) # to print types
	ocamlc $(SOURCES)

.PHONY : examples
examples :
	./a.out ../Examples/example00.sil
	./a.out ../Examples/example01.sil
	./a.out ../Examples/example02.sil
	./a.out ../Examples/example03.sil
	./a.out ../Examples/example04.sil
	./a.out ../Examples/example05.sil
	./a.out ../Examples/example07.sil
	
.PHONY : errors
errors :
	./a.out ../Examples/example06.sil
	./a.out ../Examples/example08.sil
	./a.out ../Examples/example09.sil
	./a.out ../Examples/example10.sil
	./a.out ../Examples/example11.sil

.PHONY :
clean :
	/bin/rm -f *.cmi *.cmo *~ a.out lexer.ml parser.mli parser.ml
