include ../Makefile.incl

OCAMLC := ocamlc
OLEX := ocamllex
OYACC := ocamlyacc
INTERFACES := ast.cmi parser.cmi opcodes.cmi sast.cmi translator.cmi
OBJECTS := scanner.cmo builtins.cmo parser.cmo sast.cmo opcodes.cmo \
    translator.cmo clogic.cmo

VMOBJS := vm.o

.PHONY : clean all

all: $(COMPILER) $(VMBINARY)

clean:
	rm -f $(COMPILER) $(OBJECTS) $(INTERFACES) *.output $(VMBINARY) $(VMOBJS)

$(COMPILER): $(INTERFACES) $(OBJECTS)
	$(OCAMLC) -o $@ $(OBJECTS)

$(VMBINARY): $(VMOBJS)
	g++ $(LDFLAGS) -o $(VMBINARY) $(VMOBJS)

%.ml %.mli: %.mll
	$(OLEX) $<

%.ml %.mli: %.mly
	$(OYACC) $(OYFLAGS) $<

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

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

