# Andrew O'Reilly, Jonathan Sun

OBJS = ast.cmo parser.cmo scanner.cmo sast.cmo semantics.cmo compile.cmo execute.cmo cmajor.cmo

# Choose one
YACC = ocamlyacc
# YACC = menhir --explain

SRCS = $(wildcard *.*)
JAVA_SRCS = $(shell find java -name '*')
TESTS := $(shell find tests -name '*.cmajor' -o -name "*.out")
DEMOS = $(shell find finaldemo *.cmajor -name '*')

TARFILES = Makefile $(SRCS) $(JAVA_SRCS) $(TESTS) $(DEMOS)



cmajor : $(OBJS) CSVPlayer
	ocamlc -g -o cmajor $(OBJS)

CSVPlayer :
	javac CSVPlayer.java

scanner.ml : scanner.mll
	ocamllex scanner.mll

parser.ml parser.mli : parser.mly
	$(YACC) parser.mly

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

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

.PHONY : clean
clean :
	    rm -f cmajor parser.ml parser.mli parser.ouput scanner.ml \
	    *.cmo *.cmi *.out *.diff *.log *.txt *.gz

.PHONY : cleanJava
cleanJava :
	rm -f java/function_* java/output.java java/*.class


.PHONY : test
test : cmajor testall.sh
	./testall.sh


.PHONY : all
all : clean cmajor CSVPlayer



# Generated by ocamldep *.ml *.mli >> Makefile
ast.cmo :
ast.cmx :
cmajor.cmo : parser.cmi execute.cmo compile.cmo
cmajor.cmx : parser.cmx execute.cmx compile.cmx
compile.cmo : semantics.cmo sast.cmo ast.cmo
compile.cmx : semantics.cmx sast.cmx ast.cmx
execute.cmo : sast.cmo compile.cmo
execute.cmx : sast.cmx compile.cmx
parser.cmo : ast.cmo parser.cmi
parser.cmx : ast.cmx parser.cmi
sast.cmo : ast.cmo
sast.cmx : ast.cmx
semantics.cmo : sast.cmo ast.cmo
semantics.cmx : sast.cmx ast.cmx
parser.cmi : ast.cmo # this was extra, after an unsuccessful make.

