OCAMLC = ocamlc
OCAMLLEX = ocamllex
OCAMLYACC = ocamlyacc 

OBJS = ast.cmo latticeCreation.cmo latparser.cmo scanner.cmo semanticAnalysis.cmo evaluate.cmo latte.cmo
OBJS2 = ast.cmo latticeCreation.cmo latparser.cmo scanner.cmo semanticAnalysis.cmo evaluate.cmo latte.cmo

all: latte

scanner.ml: scanner.mll
	$(OCAMLLEX) scanner.mll

latparser.ml: latparser.mly
	$(OCAMLYACC) latparser.mly

ast.cmo: ast.ml
	$(OCAMLC) -c ast.ml

latticeCreation.cmo: latticeCreation.ml ast.cmo
	$(OCAMLC) -c latticeCreation.ml

latparser.cmi: latparser.ml ast.cmo latticeCreation.cmo
	$(OCAMLC) -c latparser.mli

latparser.cmo: latparser.ml ast.cmo latparser.cmi latticeCreation.cmo
	$(OCAMLC) -c latparser.ml

scanner.cmo: scanner.ml latparser.cmi
	$(OCAMLC) -c scanner.ml

semanticAnalysis.cmo: latticeCreation.ml
	$(OCAMLC) -c semanticAnalysis.ml

evaluate.cmo: evaluate.ml ast.cmo latparser.cmo scanner.cmo 
	$(OCAMLC) -c evaluate.ml

latte.cmo: latte.ml latticeCreation.cmo semanticAnalysis.cmo evaluate.cmo ast.cmo latparser.cmo scanner.cmo 
	$(OCAMLC) -c latte.ml

latte: $(OBJS)
	$(OCAMLC) -o latte -g $(OBJS)

clean:
	rm -f $(OBJS) test ast.cmo test.cmi parser.cmi scanner.cmi parser.mli parser.ml scanner.ml