obj = ksi.cmo lexer.cmo gontutil.cmo gontmodule.cmo parser.cmo \
      gontbind.cmo gonttypes.cmo gontcodegen.cmo gont.cmo \
      config.cmo main.cmo
opt_obj = ${obj:.cmo=.cmx}
target = gontc
OCAMLC = ocamlc
OCAMLC_OPT = ocamlopt

all: $(target)

netive: opt

opt: $(target).opt

$(target): $(obj)
	$(OCAMLC) -o $@ $(obj)

$(target).opt: $(opt_obj)
	$(OCAMLC_OPT) -o $@ $(opt_obj)

tags:
	otags *.ml *.mli

.SECONDARY: parser.ml lexer.ml parser.mli
.PHONY: t

t:
	$(MAKE) -C t

%.cmo: %.ml
	$(OCAMLC) -c $<

%.cmi: %.mli
	$(OCAMLC) -c $<

%.cmx: %.ml
	$(OCAMLC_OPT) -c $<

%.ml: %.mll
	ocamllex $<

%.ml %.mli: %.mly
	ocamlyacc -v $<

config.ml:
	make -C runtime
	echo 'let prefix = "$(PWD)/runtime";;' > config.ml

deps:
	ocamldep *.ml *.mli > .deps
	
.deps: parser.ml lexer.ml
	ocamldep *.ml *.mli > .deps

include .deps

# Kluge... 

gontutil.cmx: lexer.cmi

#lexer.cmi: lexer.ml
#	$(OCAMLC_OPT) -c $<

clean:
	rm -f *.cmo *.cmi *.o *.cmx core $(target) $(target).opt

nuke: clean
	rm -f parser.ml parser.mli lexer.ml parser.output config.ml .deps
