OBJS = ast.cmo parser.cmo scanner.cmo types.cmo jparser.cmo jscanner.cmo \
	util.cmo interpreter.cmo compile.cmo bytecode.cmo execute.cmo sast.cmo jl.cmo
INTER_OBJS = ast.cmo parser.cmo scanner.cmo types.cmo interpreter.cmo


TESTS = \
arith1 \
arith2 \
fib \
for1 \
func1 \
func2 \
func3 \
gcd \
global1 \
hello \
if1 \
if2 \
if3 \
if4 \
ops1 \
var1 \
while1

TARFILES = Makefile scanner.mll parser.mly jscanner.mll jparser.mly \
	util.ml ast.ml sast.ml types.ml jscanner.mll	jparser.mly \
	interpreter.ml compile.ml bytecode.ml execute.ml jl.ml \
	$(TESTS:%=tests/test-%.mc) \
	$(TESTS:%=tests/test-%.out)

jl : $(OBJS)
	ocamlc -o jl unix.cma $(OBJS)

interpreter : $(INTER_OBJS)
	ocamlc -o interpreter $(INTER_OBJS)

.PHONY : test
test : microc testall.sh
	./testall.sh

scanner.ml : scanner.mll
	ocamllex scanner.mll

jscanner.ml : jscanner.mll
	ocamllex jscanner.mll

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

jparser.ml jparser.mli : jparser.mly
	ocamlyacc jparser.mly

%.cmo : %.ml
	ocamlc -c $<

%.cmi : %.mli
	ocamlc -c $<


.PHONY : clean
clean :
	rm -f parser.ml parser.mli scanner.ml jparser.ml jparser.mli jscanner.ml \
	testall.log \
	*.cmo *.cmi *.out *.diff

# Generated by ocamldep *.ml *.mli
ast.cmo :
ast.cmx :
bytecode.cmo : types.cmo ast.cmo
bytecode.cmx : types.cmx ast.cmx
compile.cmo : types.cmo bytecode.cmo ast.cmo
compile.cmx : types.cmx bytecode.cmx ast.cmx
execute.cmo : types.cmo bytecode.cmo ast.cmo
execute.cmx : types.cmx bytecode.cmx ast.cmx
interpreter.cmo : util.cmo jscanner.cmo jparser.cmo types.cmo ast.cmo
interpreter.cmx : util.cmx jscanner.cmx jparser.cmx types.cmx ast.cmx 
jl.cmo : scanner.cmo parser.cmi jscanner.cmo jparser.cmo \
	interpreter.cmo execute.cmo compile.cmo bytecode.cmo ast.cmo 
jl.cmx : scanner.cmx parser.cmx jscanner.cmx jparser.cmx \
	interpreter.cmx execute.cmx compile.cmx bytecode.cmx ast.cmx 
jparser.cmo : ast.cmo jparser.cmi
jparser.cmx : ast.cmx jparser.cmi
jscanner.cmo : jparser.cmi
jscanner.cmx : jparser.cmx
parser.cmo : ast.cmo parser.cmi
parser.cmx : ast.cmx parser.cmi
scanner.cmo : parser.cmi
scanner.cmx : parser.cmx
types.cmo :
types.cmx :
jparser.cmi : ast.cmo
parser.cmi : ast.cmo
util.cmo :
util.cmx :
sast.cmo : ast.cmo
sast.cmx : ast.cmx