diff --git a/jsref/Makefile b/jsref/Makefile index 6b2617d6b4edf071d4fe40e5828a0521833fad71..cbe992d1faba45eceb918c9fe604d45307c4321c 100644 --- a/jsref/Makefile +++ b/jsref/Makefile @@ -10,9 +10,8 @@ all: # Defined below -JSREF_DIR := . -JSREF_ML := $(filter-out JsOutput.ml,$(wildcard $(JSREF_DIR)/*.ml)) -JSREF_MLI := $(wildcard $(JSREF_DIR)/*.mli) +JSREF_ML := $(filter-out JsOutput.ml,$(wildcard *.ml)) +JSREF_MLI := $(wildcard *.mli) GENERATOR_DIR := ../generator STDLIB_DIR := $(GENERATOR_DIR)/stdlib_ml @@ -50,16 +49,14 @@ ASSEMBLY_JS_FILES := \ JsInterpreterMonads.unlog.js \ JsInterpreter.log.js \ ModuleExport.js -ASSEMBLY_JS := $(STDLIB_DIR)/stdlib.js $(addprefix $(JSREF_DIR)/,$(ASSEMBLY_JS_FILES)) +ASSEMBLY_JS := $(STDLIB_DIR)/stdlib.js $(ASSEMBLY_JS_FILES) ############################################################### -DISPLAYED_FILES := \ +DISPLAYED := \ JsInterpreter.ml -DISPLAYED := $(addprefix $(JSREF_DIR)/,$(DISPLAYED_FILES)) - ALL_DISPLAYED := $(DISPLAYED:.ml=.unlog.js) $(DISPLAYED:.ml=.pseudo.js) $(DISPLAYED) ALL_LINEOF := $(DISPLAYED:.ml=.token.js) $(DISPLAYED:.ml=.mlloc.js) $(DISPLAYED:.ml=.ptoken.js) @@ -84,95 +81,96 @@ ASSEMBLY := $(ASSEMBLY_BIN) DISPLAYGEN_BIN := $(GENERATOR_DIR)/displayed_sources.byte DISPLAYGEN := $(OCAMLPAR) $(DISPLAYGEN_BIN) +# Warn if buildtools are missing +$(MLTOJS_BIN) $(LINEOF_BIN) $(PPX_BIN) $(ASSEMBLY_BIN) $(DISPLAYGEN_BIN): + $(error Missing generator tools, build from project root, or set paths.) + ############################################################### # Dependencies ifeq ($(filter clean%,$(MAKECMDGOALS)),) -include $(JSREF_DIR)/.depends +include .depends endif ############################################################### # Rules - - ##### Rule for dependencies - -$(JSREF_DIR)/.depends: $(JSREF_ML) - $(OCAMLDEP) -all -I $(<D) $(<D)/* > $@ - +.depends: $(JSREF_ML) + $(OCAMLDEP) -all $(<D)/* > $@ ##### Rule for cmi %.cmi: %.ml $(MLTOJS_BIN) - $(MLTOJS) -mode cmi -I $(<D) -I $(STDLIB_DIR) $< + $(MLTOJS) -mode cmi -I $(STDLIB_DIR) $< %.cmi: %.mli - ocamlc -I $(JSREF_DIR) -I $(STDLIB_DIR) -open Stdlib $< + ocamlc -I $(STDLIB_DIR) -open Stdlib $< ##### Rule for log/unlog/token %.log.js: %.ml %.cmi $(MLTOJS_BIN) - $(MLTOJS) -mode log -I $(<D) -I $(STDLIB_DIR) $< + $(MLTOJS) -mode log -I $(STDLIB_DIR) $< %.unlog.js: %.ml %.cmi $(MLTOJS_BIN) - $(MLTOJS) -mode unlog -I $(<D) -I $(STDLIB_DIR) $< + $(MLTOJS) -mode unlog -I $(STDLIB_DIR) $< %.token.js %.mlloc.js: %.ml %.cmi $(MLTOJS_BIN) - $(MLTOJS) -mode token -I $(<D) -I $(STDLIB_DIR) $< + $(MLTOJS) -mode token -I $(STDLIB_DIR) $< %.pseudo.js: %.ml %.cmi $(MLTOJS_BIN) - $(MLTOJS) -mode pseudo -I $(<D) -I $(STDLIB_DIR) $< + $(MLTOJS) -mode pseudo -I $(STDLIB_DIR) $< %.ptoken.js: %.ml %.cmi $(MLTOJS_BIN) - $(MLTOJS) -mode ptoken -I $(<D) -I $(STDLIB_DIR) $< + $(MLTOJS) -mode ptoken -I $(STDLIB_DIR) $< ##### Rule for lineof.js -$(JSREF_DIR)/lineof.js: $(ALL_LINEOF) $(LINEOF_BIN) +lineof.js: $(ALL_LINEOF) $(LINEOF_BIN) $(LINEOF) -o $@ $(ALL_LINEOF) ##### Rule for assembly.js #--LATER (optional) add as dependencies the unlog files: $(JSREF_ML:.ml=.unlog.js) -$(JSREF_DIR)/assembly.js: $(ASSEMBLY_JS) $(ASEMBLY_BIN) +assembly.js: $(ASSEMBLY_JS) $(ASSEMBLY_BIN) $(ASSEMBLY) -o $@ $(ASSEMBLY_JS) # -stdlib $(STDLIB_DIR)/stdlib.js ##### Rule for displayed_sources.js -$(JSREF_DIR)/displayed_sources.js: $(ALL_DISPLAYED) $(DISPLAYGEN_BIN) +displayed_sources.js: $(ALL_DISPLAYED) $(DISPLAYGEN_BIN) $(DISPLAYGEN) -o $@ $(ALL_DISPLAYED) ##################################################################### # Short targets -all: assembly lineof display +ALL_TARGETS := lineof.js assembly.js displayed_sources.js +all: $(ALL_TARGETS) cmi: $(JSREF_ML:.ml=.cmi) $(JSREF_MLI:.mli=.cmi) gen: $(JSREF_ML:.ml=.log.js) $(JSREF_ML:.ml=.unlog.js) $(JSREF_ML:.ml=.token.js) -ref: $(JSREF_DIR)/JsInterpreter.log.js $(JSREF_DIR)/JsInterpreter.unlog.js $(JSREF_DIR)/JsInterpreter.token.js +ref: JsInterpreter.log.js JsInterpreter.unlog.js JsInterpreter.token.js -pseudo: $(JSREF_DIR)/JsInterpreter.pseudo.js $(JSREF_DIR)/JsInterpreter.ptoken.js +pseudo: JsInterpreter.pseudo.js JsInterpreter.ptoken.js log: $(JSREF_ML:.ml=.log.js) $(JSREF_ML:.ml=.token.js) unlog: $(JSREF_ML:.ml=.unlog.js) -lineof: $(JSREF_DIR)/lineof.js +lineof: lineof.js -assembly: $(JSREF_DIR)/assembly.js +assembly: assembly.js -display: $(JSREF_DIR)/displayed_sources.js +display: displayed_sources.js ############################################################### # Global options -.PHONY: all cmi gen ref pseudo log unlog lineof assembly display +.PHONY: all cmi gen ref pseudo log unlog lineof assembly display clean # Do not delete intermediate files. .SECONDARY: @@ -181,10 +179,10 @@ display: $(JSREF_DIR)/displayed_sources.js ##################################################################### # Clean -DIRTY_EXTS := cmi,.mlloc.js,token.js,log.js,unlog.js,d,ml.d,mli.d,js.pre +DIRTY_EXTS := cmi,{mlloc,log,unlog,pseudo,token,ptoken}.js + clean: - rm -f $(JSREF_DIR)/lineof.js - rm -f $(JSREF_DIR)/assembly.js - bash -c "rm -f $(JSREF_DIR)/*.{$(DIRTY_EXTS)}" - bash -c "rm -f $(JSREF_DIR)/.depends" + bash -c "rm -f $(ALL_TARGETS)" + bash -c "rm -f *.{$(DIRTY_EXTS)}" + bash -c "rm -f .depends"