From 64a89dc3909ad147ae0d811cb7d1ca2cca31d09b Mon Sep 17 00:00:00 2001 From: nsensfel Date: Tue, 15 Jan 2019 15:03:23 +0100 Subject: Adds Makefile --- Makefile | 118 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 Makefile (limited to 'Makefile') diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..f4c728d --- /dev/null +++ b/Makefile @@ -0,0 +1,118 @@ +################################################################################ +## USER CONFIGURATION OPTIONS ################################################## +################################################################################ +## Main Directories +SRC_DIR ?= ${CURDIR}/src +CONFIG_DIR ?= ${CURDIR}/conf + +## Optional Directories +BIN_DIR ?= ${CURDIR}/ebin +INCLUDE_DIR ?= ${CURDIR}/include + +## Local only? +#ERL_NAME_VS_SNAME ?= -name +ERL_NAME_VS_SNAME ?= -sname + +## Binaries +ERLC ?= erlc +ERLC_OPTS ?= + +DIALYZER ?= dialyzer +DIALYZER_OPTS ?= + +M4 ?= m4 +M4_OPTS ?= + +## Filenames +DIALYZER_BASE_PLT_FILE ?= base.plt +DIALYZER_PLT_FILE ?= ataxia.plt + + +################################################################################ +## MAKEFILE MAGIC ############################################################## +################################################################################ +## General +OPTIONAL_DIRS = $(BIN_DIR) $(INCLUDE_DIR) + +## Preprocessor +PREPROCESSOR_CONFIG_FILES = $(shell find -L $(CONFIG_DIR) -name "*.m4.conf") +PREPROCESSABLE_FILES = $(shell find -L ${CURDIR} -name "*.m4") +PREPROCESSED_FILES = $(patsubst %.m4,%,$(PREPROCESSABLE_FILES)) + +## Erlang +PREPROCESSED_ERL_SRC_FILES = $(filter %.erl,$(PREPROCESSED_FILES)) +CURRENT_ERL_SRC_FILES = $(shell find -L $(SRC_DIR) -name "*.erl") +ERL_SRC_FILES = \ + $(filter-out $(PREPROCESSED_ERL_SRC_FILES),$(CURRENT_ERL_SRC_FILES)) \ + $(PREPROCESSED_ERL_SRC_FILES) +ERL_BIN_FILES = $(patsubst $(SRC_DIR)%.erl,$(BIN_DIR)/%.beam,$(ERL_SRC_FILES)) + +## Binaries +ERLC_EXEC = $(ERLC) $(ERLC_OPTS) +ERL_EXEC = $(ERL) $(ERL_OPTS) +DIALYZER_EXEC = $(DIALYZER) $(DIALYZER_OPTS) +M4_EXEC = $(M4) $(M4_OPTS) + +################################################################################ +## SANITY CHECKS ############################################################### +################################################################################ + +################################################################################ +## PREPROCESSOR-VISIBLE MAKEFILE VARIABLES ##################################### +################################################################################ +MAKEFILE_TO_M4 = \ + --define=__MAKEFILE_BIN_DIR=$(BIN_DIR) \ + --define=__MAKEFILE_LOG_DIR=$(LOG_DIR) \ + --define=__MAKEFILE_INCLUDE_DIR=$(INCLUDE_DIR) + +################################################################################ +## TARGET RULES ################################################################ +################################################################################ +all: build + +debug: debug_run + +build: $(OPTIONAL_DIRS) $(PREPROCESSED_FILES) $(ERL_BIN_FILES) + +clean: + # Preprocessor + rm -rf $(PREPROCESSED_FILES) + # Erlang + rm -rf $(BIN_DIR)/* + +reset: + # Preprocessor + rm -rf $(PREPROCESSED_FILES) + rm -rf $(OPTIONAL_DIRS) + +################################################################################ +## INTERNAL RULES ############################################################## +################################################################################ +debug_rebuild: + $(MAKE) clean + $(MAKE) ERLC_OPTS="$(ERLC_OPTS) +debug_info" + +$(DIALYZER_BASE_PLT_FILE): + $(DIALYZER_EXEC) --build_plt --apps erts kernel stdlib crypto mnesia \ + --output_plt $@ + +debug_run: $(DIALYZER_BASE_PLT_FILE) + $(MAKE) debug_rebuild + cp $< $(DIALYZER_PLT_FILE) + $(DIALYZER_EXEC) --add_to_plt --get_warnings --plt $(DIALYZER_PLT_FILE) -r $(BIN_DIR) + $(DIALYZER_EXEC) --check_plt --plt $(DIALYZER_PLT_FILE) + $(DIALYZER_EXEC) --get_warnings $(ERL_SRC_FILES) $(PREPROCESSED_ERL_SRC_FILES)\ + --src --plt $(DIALYZER_PLT_FILE) + +$(PREPROCESSED_FILES): %: %.m4 .PHONY + $(M4_EXEC) -P $(MAKEFILE_TO_M4) $(PREPROCESSOR_CONFIG_FILES) $< > $@ + +$(OPTIONAL_DIRS): %: + mkdir -p $@ + +$(ERL_BIN_FILES): $(BIN_DIR)/%.beam: $(SRC_DIR)/%.erl + mkdir -p $(dir $@) + $(ERLC_EXEC) -o $(dir $@) $< + +.PHONY: + -- cgit v1.2.3-70-g09d2