OCAMLFLAGS = -g
OCAMLC = ocamlc

LIB_DIR = lib
TEST_DIR = tests

LIB_FILES = ir.ml cfg.ml dominance.ml nemo.ml parser.ml printer.ml
TEST_FILES = test.ml
MAIN_FILES = main.ml

all: nemo test

nemo: $(LIB_FILES:%.ml=$(LIB_DIR)/%.cmo) $(MAIN_FILES:%.ml=%.cmo)
	$(OCAMLC) $(OCAMLFLAGS) -o $@ $^

test: $(LIB_FILES:%.ml=$(LIB_DIR)/%.cmo) $(TEST_DIR)/test.cmo
	$(OCAMLC) $(OCAMLFLAGS) -o $@ $^

$(LIB_DIR)/%.cmo: $(LIB_DIR)/%.ml
	cd $(LIB_DIR) && $(OCAMLC) $(OCAMLFLAGS) -c $(notdir $<)

$(TEST_DIR)/%.cmo: $(TEST_DIR)/%.ml
	cd $(TEST_DIR) && $(OCAMLC) $(OCAMLFLAGS) -c -I ../$(LIB_DIR) $(notdir $<)

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

clean:
	rm -f nemo test
	rm -f $(LIB_DIR)/*.cmo $(LIB_DIR)/*.cmi
	rm -f $(TEST_DIR)/*.cmo $(TEST_DIR)/*.cmi
	rm -f *.cmo *.cmi

.PHONY: all clean
