# StockQ: compiler Makefile
#  - builds and manages all compiler components


default: stockq

.PHONY: stockq.native
stockq.native:
	ocamlbuild -use-ocamlfind -pkgs llvm,llvm.analysis -cflags \
		-w,+a-4 stockq.native
	mv stockq.native stockq

.PHONY: test
test:
	@echo Running the test suite!
	@cd ../test; make > /dev/null
	@echo All tests passed, directory clean!

.PHONY: clean
clean:
	ocamlbuild -clean
	rm -rf testall.log *.diff stockq scanner.ml parser.ml parser.mli
	rm -rf *.cmx *.cmi *.cmo *.cmx *.o temp.ll parser.output


# More detailed: build using ocamlc/ocamlopt + ocamlfind to locate LLVM

OBJS = ast.cmx utils.cmx codegen.cmx parser.cmx scanner.cmx semant.cmx stockq.cmx

stockq: $(OBJS)
	ocamlfind ocamlopt -linkpkg -package llvm -package llvm.analysis $(OBJS) -o stockq

scanner.ml: scanner.mll
	ocamllex scanner.mll

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

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

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

%.cmx: %.ml
	ocamlfind ocamlopt -c -package llvm $<

### Generated by "ocamldep *.ml *.mli" after building scanner.ml and parser.ml
ast.cmo:
ast.cmx:
utils.cmo: parser.cmo ast.cmo
utils.cmx: parser.cmx ast.cmx
codegen.cmo: ast.cmo
codegen.cmx: ast.cmx
stockq.cmo: semant.cmo scanner.cmo parser.cmi codegen.cmo ast.cmo utils.cmo
stockq.cmx: semant.cmx scanner.cmx parser.cmx codegen.cmx ast.cmx utils.cmx
parser.cmo: ast.cmo parser.cmi
parser.cmx: ast.cmx parser.cmi
scanner.cmo: parser.cmi
scanner.cmx: parser.cmx
semant.cmo: ast.cmo
semant.cmx: ast.cmx
parser.cmi: ast.cmo

# Building the tarball...
