WHY3D := ../why3d
BUILD := _build
SRC   := nested-dfs.mlw
EXTRACTED := $(BUILD)/extracted.ml
HARNESS_SRC := run_nested_dfs.ml
BIN := $(BUILD)/run_tests
ACC_HARNESS_SRC := run_check_accepting.ml
ACC_BIN := $(BUILD)/run_accepting

.PHONY: all test-all test% test-acc-all test-acc% clean extract build
TESTS    := tests-nested-dfs

all: $(BIN) $(ACC_BIN)

$(BUILD):
	mkdir -p $(BUILD)

extract: $(EXTRACTED)

$(EXTRACTED): $(SRC) | $(BUILD)
	$(WHY3D) extract -D ocaml64 --recursive $< -o $@

build: $(BIN) $(ACC_BIN)

$(BIN): $(EXTRACTED) $(HARNESS_SRC)
	ocamlfind ocamlopt -package zarith,str,unix -linkpkg -I $(BUILD) $(EXTRACTED) $(HARNESS_SRC) -o $(BIN)

$(ACC_BIN): $(EXTRACTED) $(ACC_HARNESS_SRC)
	ocamlfind ocamlopt -package zarith,str,unix -linkpkg -I $(BUILD) $(EXTRACTED) $(ACC_HARNESS_SRC) -o $(ACC_BIN)

test-dfs-all: $(BIN)
	$(BIN) all

test-acc-all: $(ACC_BIN)
	$(ACC_BIN) all

clean:
	rm -rf $(BUILD)
	rm -f *.cmi *.cmx *.o
	rm -rf nested-dfs
