# OCAMLARGS = -g  # Uncomment if debugging

all : opt bytecode

bytecode : bin/satallax

opt : bin/satallax.opt

bin/satallax : bin/tptp_lexer.cmo bin/formula.cmo bin/tptp_config.cmo bin/tptp_parser.cmo bin/proofterm.cmo bin/search.cmo bin/syntax.cmo bin/state.cmo bin/flags.cmo bin/match.cmo bin/version.cmo bin/config.cmo bin/satallax.cmo bin/minisatinterface.cmo bin/dllminisatinterface.so
	ocamlc $(OCAMLARGS) -I bin -o bin/satallax unix.cma $(PWD)/bin/dllminisatinterface.so bin/minisatinterface.cmo bin/syntax.cmo bin/config.cmo bin/flags.cmo bin/match.cmo bin/priorityqueue.cmo bin/state.cmo bin/search.cmo bin/proofterm.cmo bin/tptp_lexer.cmo bin/formula.cmo bin/tptp_config.cmo bin/tptp_parser.cmo bin/version.cmo bin/satallax.cmo

bin/satallax.opt : bin/tptp_lexer.cmx bin/formula.cmx bin/tptp_config.cmx bin/tptp_parser.cmx bin/proofterm.cmx bin/search.cmx bin/syntax.cmx bin/state.cmx bin/flags.cmx bin/match.cmx bin/version.cmx bin/config.cmx bin/satallax.cmx bin/minisatinterface.cmx bin/libminisatinterface.a bin/priorityqueue.cmx
	ocamlopt -I bin -o bin/satallax.opt $(PWD)/bin/libminisatinterface.a unix.cmxa bin/minisatinterface.cmx bin/syntax.cmx bin/config.cmx bin/flags.cmx bin/match.cmx bin/priorityqueue.cmx bin/state.cmx bin/search.cmx bin/proofterm.cmx bin/tptp_lexer.cmx bin/formula.cmx bin/tptp_config.cmx bin/tptp_parser.cmx bin/version.cmx bin/satallax.cmx -cclib -lstdc++

bin/satallax.cmo : src/satallax.ml bin/proofterm.cmo bin/search.cmo bin/syntax.cmo bin/state.cmo bin/flags.cmo
	ocamlc $(OCAMLARGS) -I bin -o bin/satallax.cmo -c src/satallax.ml

bin/satallax.cmx : src/satallax.ml bin/proofterm.cmx bin/search.cmx bin/syntax.cmx bin/state.cmx bin/flags.cmx
	ocamlopt -I bin -o bin/satallax.cmx -c src/satallax.ml

bin/minisatinterface.cmo : src/minisatinterface.ml
	ocamlc $(OCAMLARGS) -I bin -o bin/minisatinterface.cmo -c src/minisatinterface.ml

bin/minisatinterface.cmx : src/minisatinterface.ml
	ocamlopt -I bin -o bin/minisatinterface.cmx -c src/minisatinterface.ml

bin/dllminisatinterface.so : bin/minisatinterface.cmo bin/Ointerface.o
	ocamlmklib -o bin/minisatinterface minisat/core/Solver.o minisat/simp/SimpSolver.o bin/Ointerface.o -lstdc++

bin/libminisatinterface.a : bin/minisatinterface.cmo bin/Ointerface.o
	ocamlmklib -o bin/minisatinterface minisat/core/Solver.o minisat/simp/SimpSolver.o bin/Ointerface.o -lstdc++

bin/Ointerface.o : src/minisat-interface/Ointerface.C
	$(CC) -c -Wall -Iminisat/mtl -Iminisat/core -Iminisat/simp -I"`ocamlc -where`" -o bin/Ointerface.o src/minisat-interface/Ointerface.C

bin/version.cmo : src/version.ml bin/version.cmi
	ocamlc $(OCAMLARGS) -I bin -o bin/version.cmo -c src/version.ml

bin/version.cmx : src/version.ml bin/version.cmi
	ocamlopt -I bin -o bin/version.cmx -c src/version.ml

bin/version.cmi : src/version.mli
	ocamlc $(OCAMLARGS) -I bin -o bin/version.cmi -c src/version.mli

bin/config.cmo : src/config.ml bin/config.cmi
	ocamlc $(OCAMLARGS) -I bin -o bin/config.cmo -c src/config.ml

bin/config.cmx : src/config.ml bin/config.cmi
	ocamlopt -I bin -o bin/config.cmx -c src/config.ml

bin/config.cmi : src/config.mli
	ocamlc $(OCAMLARGS) -I bin -o bin/config.cmi -c src/config.mli

bin/flags.cmo : src/flags.ml bin/flags.cmi
	ocamlc $(OCAMLARGS) -I bin -o bin/flags.cmo -c src/flags.ml

bin/flags.cmx : src/flags.ml bin/flags.cmi
	ocamlopt -I bin -o bin/flags.cmx -c src/flags.ml

bin/flags.cmi : src/flags.mli
	ocamlc $(OCAMLARGS) -I bin -o bin/flags.cmi -c src/flags.mli

bin/priorityqueue.cmi : src/priorityqueue.mli
	ocamlc $(OCAMLARGS) -I bin -o bin/priorityqueue.cmi -c src/priorityqueue.mli

bin/priorityqueue.cmo : src/priorityqueue.ml
	ocamlc $(OCAMLARGS) -I bin -o bin/priorityqueue.cmo -c src/priorityqueue.ml

bin/priorityqueue.cmx : src/priorityqueue.ml
	ocamlopt -I bin -o bin/priorityqueue.cmx -c src/priorityqueue.ml

bin/state.cmi : src/state.mli bin/syntax.cmi bin/config.cmi bin/priorityqueue.cmi
	ocamlc $(OCAMLARGS) -I bin -o bin/state.cmi -c src/state.mli

bin/state.cmo : src/state.ml bin/state.cmi bin/flags.cmo bin/syntax.cmo bin/tptp_lexer.cmo bin/tptp_parser.cmi bin/config.cmi bin/priorityqueue.cmo
	ocamlc $(OCAMLARGS) -I bin -o bin/state.cmo -c src/state.ml

bin/state.cmx : src/state.ml bin/state.cmi bin/flags.cmx bin/syntax.cmx bin/tptp_lexer.cmo bin/tptp_parser.cmi bin/config.cmi
	ocamlopt -I bin -o bin/state.cmx -c src/state.ml

bin/syntax.cmi : src/syntax.mli
	ocamlc $(OCAMLARGS) -I bin -o bin/syntax.cmi -c src/syntax.mli

bin/syntax.cmo : src/syntax.ml bin/syntax.cmi
	ocamlc $(OCAMLARGS) -I bin -o bin/syntax.cmo -c src/syntax.ml

bin/syntax.cmx : src/syntax.ml bin/syntax.cmi
	ocamlopt -I bin -o bin/syntax.cmx -c src/syntax.ml

bin/search.cmi : src/search.mli bin/flags.cmi bin/state.cmi bin/config.cmi bin/match.cmi
	ocamlc $(OCAMLARGS) -I bin -o bin/search.cmi -c src/search.mli

bin/search.cmo : src/search.ml bin/search.cmi bin/flags.cmo bin/state.cmo bin/config.cmo bin/minisatinterface.cmo bin/match.cmo
	ocamlc $(OCAMLARGS) -I bin -o bin/search.cmo -c src/search.ml

bin/search.cmx : src/search.ml bin/search.cmi bin/flags.cmx bin/state.cmx bin/config.cmx bin/match.cmx bin/minisatinterface.cmx
	ocamlopt -I bin -o bin/search.cmx -c src/search.ml

bin/proofterm.cmi : bin/state.cmi bin/search.cmi src/proofterm.mli
	ocamlc $(OCAMLARGS) -I bin -o bin/proofterm.cmi -c src/proofterm.mli

bin/proofterm.cmo : bin/state.cmo bin/search.cmo src/proofterm.ml bin/proofterm.cmi bin/refutation.cmo
	ocamlc $(OCAMLARGS) -I bin -o bin/proofterm.cmo -c src/proofterm.ml

bin/proofterm.cmx : bin/state.cmx bin/search.cmx src/proofterm.ml bin/proofterm.cmi bin/refutation.cmx
	ocamlopt -I bin -o bin/proofterm.cmx -c src/proofterm.ml

bin/formula.cmi : src/parser/formula.mli
	ocamlc $(OCAMLARGS) -I bin -o bin/formula.cmi -c src/parser/formula.mli

bin/formula.cmo : src/parser/formula.ml bin/formula.cmi
	ocamlc $(OCAMLARGS) -I bin -o bin/formula.cmo -c src/parser/formula.ml

bin/formula.cmx : src/parser/formula.ml bin/formula.cmi
	ocamlopt -I bin -o bin/formula.cmx -c src/parser/formula.ml

bin/match.cmi : src/match.mli bin/syntax.cmi bin/state.cmi
	ocamlc $(OCAMLARGS) -I bin -o bin/match.cmi -c src/match.mli

bin/match.cmo : src/match.ml bin/match.cmi bin/syntax.cmo bin/state.cmo
	ocamlc $(OCAMLARGS) -I bin -o bin/match.cmo -c src/match.ml

bin/match.cmx : src/match.ml bin/match.cmi bin/syntax.cmx bin/state.cmx
	ocamlopt -I bin -o bin/match.cmx -c src/match.ml

bin/refutation.cmi : src/refutation.mli
	ocamlc $(OCAMLARGS) -I bin -o bin/refutation.cmi -c src/refutation.mli

bin/refutation.cmo : src/refutation.ml bin/refutation.cmi
	ocamlc $(OCAMLARGS) -I bin -o bin/refutation.cmo -c src/refutation.ml

bin/refutation.cmx : src/refutation.ml bin/refutation.cmi
	ocamlopt -I bin -o bin/refutation.cmx -c src/refutation.ml

bin/tptp_config.cmi : src/parser/tptp_config.mli
	ocamlc $(OCAMLARGS) -I bin -o bin/tptp_config.cmi -c src/parser/tptp_config.mli

bin/tptp_config.cmo : src/parser/tptp_config.ml bin/tptp_config.cmi bin/syntax.cmo bin/state.cmo
	ocamlc $(OCAMLARGS) -I bin -o bin/tptp_config.cmo -c src/parser/tptp_config.ml

bin/tptp_config.cmx : src/parser/tptp_config.ml bin/tptp_config.cmi bin/syntax.cmx bin/state.cmx 
	ocamlopt -I bin -o bin/tptp_config.cmx -c src/parser/tptp_config.ml

bin/tptp_lexer.cmo : src/parser/tptp_lexer.ml bin/tptp_parser.cmi
	ocamlc $(OCAMLARGS) -I bin -o bin/tptp_lexer.cmo -c src/parser/tptp_lexer.ml

bin/tptp_lexer.cmx : src/parser/tptp_lexer.ml bin/tptp_parser.cmi
	ocamlopt -I bin -o bin/tptp_lexer.cmx -c src/parser/tptp_lexer.ml

src/parser/tptp_lexer.ml : src/parser/tptp_lexer.mll bin/tptp_parser.cmi
	ocamllex src/parser/tptp_lexer.mll

bin/tptp_parser.cmi : src/parser/tptp_parser.mli bin/syntax.cmi bin/state.cmi bin/formula.cmi bin/tptp_config.cmi
	ocamlc $(OCAMLARGS) -I bin -o bin/tptp_parser.cmi -c src/parser/tptp_parser.mli

bin/tptp_parser.cmo : bin/tptp_parser.cmi src/parser/tptp_parser.ml bin/formula.cmo bin/tptp_config.cmo
	ocamlc $(OCAMLARGS) -I bin -o bin/tptp_parser.cmo -c src/parser/tptp_parser.ml

bin/tptp_parser.cmx : bin/tptp_parser.cmi src/parser/tptp_parser.ml bin/formula.cmx bin/tptp_config.cmx
	ocamlopt -I bin -o bin/tptp_parser.cmx -c src/parser/tptp_parser.ml

src/parser/tptp_parser.ml : src/parser/tptp_parser.mly
	ocamlyacc src/parser/tptp_parser.mly

src/parser/tptp_parser.mli : src/parser/tptp_parser.mly
	ocamlyacc src/parser/tptp_parser.mly

coq/stttab.vo : coq/stt.vo coq/stttab.v
	cd coq; coqc stttab

coq/stt.vo : coq/stt.v
	cd coq; coqc stt

clean :
	rm bin/*.cma bin/*.o bin/*.opt bin/*.so bin/*.a bin/*.cmo bin/*.cmi bin/*.cmx src/parser/tptp_parser.ml src/parser/tptp_parser.mli src/parser/tptp_lexer.ml bin/satallax bin/satallax.opt

