BIN = bin/
SOURCE = source/
OCAML = ocamlopt -noassert -inline 20 -unsafe
LEXER = ocamllex -q
PARSER = ocamlyacc

CMOS = \
   $(BIN)primitives.cmx \
   $(BIN)parser.cmx \
   $(BIN)lexer.cmx \
   $(BIN)semantic.cmx \
   $(BIN)treecode.cmx \
   $(BIN)funalg.cmx
   
CMIS = \
  $(BIN)primitives.cmi \
  $(BIN)syntax_tree.cmi \
  $(BIN)parser.cmi \
  $(BIN)semantic.cmi \
  $(BIN)treecode.cmi
    
all : funalg

funalg : $(CMOS)
	$(OCAML) -o $@ nums.cmxa $(CMOS)

$(CMOS) : $(BIN)%.cmx : $(SOURCE)%.ml $(BIN)%.cmi 
	$(OCAML) -o $@ -I $(BIN) -c $<

$(CMIS) : $(BIN)%.cmi : $(SOURCE)%.mli
	$(OCAML) -o $@ -I $(BIN) -c $<
	
$(SOURCE)parser.ml $(SURCE)parser.mli : $(SOURCE)parser.mly $(BIN)syntax_tree.cmi
	$(PARSER) $<
	
$(SOURCE)lexer.ml : $(SOURCE)lexer.mll
	$(LEXER) $<
	
$(BIN)lexer.mli : $(BIN)lexer.cmi

$(BIN)lexer.cmi : $(SOURCE)lexer.ml
	$(OCAML) -o $@ -I $(BIN) -c $<
	
$(BIN)funalg.cmi : $(SOURCE)funalg.ml	
	$(OCAML) -o $@ -I $(BIN) -c $<
	
clean :	
	rm -f $(BIN)*
	rm -f $(SOURCE)lexer.ml $(SOURCE)parser.ml $(SOURCE)parser.mli
	
install : all clean	
	
.PHONY: all clean install