######################################################################### # # # OCaml # # # # Xavier Clerc, SED, INRIA Rocquencourt # # # # Copyright 2010 Institut National de Recherche en Informatique et # # en Automatique. All rights reserved. This file is distributed # # under the terms of the Q Public License version 1.0. # # # ######################################################################### CMI_FILES=$(MODULES:=.cmi) CMO_FILES=$(MODULES:=.cmo) CMX_FILES=$(MODULES:=.cmx) CMA_FILES=$(LIBRARIES:=.cma) CMXA_FILES=$(LIBRARIES:=.cmxa) ML_LEX_FILES=$(LEX_MODULES:=.ml) ML_YACC_FILES=$(YACC_MODULES:=.ml) MLI_YACC_FILES=$(YACC_MODULES:=.mli) ML_FILES=$(ML_LEX_FILES) $(ML_YACC_FILES) O_FILES=$(C_FILES:=.$(O)) ADD_CMO_FILES=$(ADD_MODULES:=.cmo) ADD_CMX_FILES=$(ADD_MODULES:=.cmx) GENERATED_SOURCES=$(ML_LEX_FILES) $(ML_YACC_FILES) $(MLI_YACC_FILES) CUSTOM_FLAG=`if [ -n "$(C_FILES)" ]; then echo '-custom'; fi` ADD_CFLAGS+=$(CUSTOM_FLAG) MYRUNTIME=`if [ -z "$(C_FILES)$(CUSTOM)" ]; then echo '$(OCAMLRUN)'; fi` CC=$(NATIVECC) $(NATIVECCCOMPOPTS) .PHONY: default default: @$(MAKE) compile @$(SET_LD_PATH) $(MAKE) run .PHONY: compile compile: $(ML_FILES) $(CMO_FILES) $(MAIN_MODULE).cmo @for file in $(C_FILES); do \ $(NATIVECC) $(NATIVECCCOMPOPTS) -c -I$(CTOPDIR)/byterun $$file.c; \ done; @rm -f program.byte program.byte.exe @$(OCAMLC) $(ADD_COMPFLAGS) $(ADD_CFLAGS) -o program.byte$(EXE) \ $(O_FILES) $(CMA_FILES) $(CMO_FILES) $(ADD_CMO_FILES) \ $(MAIN_MODULE).cmo @if $(BYTECODE_ONLY); then : ; else \ rm -f program.native program.native.exe; \ $(MAKE) $(CMX_FILES) $(MAIN_MODULE).cmx; \ $(OCAMLOPT) $(ADD_COMPFLAGS) -o program.native$(EXE) $(O_FILES) \ $(CMXA_FILES) $(CMX_FILES) $(ADD_CMX_FILES) \ $(MAIN_MODULE).cmx; \ fi .PHONY: run run: @printf " ... testing with ocamlc" @$(MYRUNTIME) ./program.byte$(EXE) $(EXEC_ARGS) >$(MAIN_MODULE).result\ && $(DIFF) $(MAIN_MODULE).reference $(MAIN_MODULE).result >/dev/null \ && if $(BYTECODE_ONLY); then : ; else \ printf " ocamlopt"; \ ./program.native$(EXE) $(EXEC_ARGS) > $(MAIN_MODULE).result \ && $(DIFF) $(MAIN_MODULE).reference $(MAIN_MODULE).result \ >/dev/null; \ fi \ && echo " => passed" || echo " => failed" .PHONY: promote promote: defaultpromote .PHONY: clean clean: defaultclean @rm -f *.result program.byte program.byte.exe \ program.native program.native.exe \ $(GENERATED_SOURCES) $(O_FILES) $(TEST_TEMP_FILES)