blob: 2ca70402ce5d9b1d70fe4515bc27c4917b3b62db (
plain) (
tree)
|
|
# Copyright (c) 2013-2014, Loïc Hoguin <[email protected]>
# This file is part of erlang.mk and subject to the terms of the ISC License.
.PHONY: clean-app
# Configuration.
ERLC_OPTS ?= -Werror +debug_info +warn_export_all +warn_export_vars \
+warn_shadow_vars +warn_obsolete_guard # +bin_opt_info +warn_missing_spec
COMPILE_FIRST ?=
COMPILE_FIRST_PATHS = $(addprefix src/,$(addsuffix .erl,$(COMPILE_FIRST)))
# Verbosity.
appsrc_verbose_0 = @echo " APP " $(PROJECT).app.src;
appsrc_verbose = $(appsrc_verbose_$(V))
erlc_verbose_0 = @echo " ERLC " $(filter %.erl %.core,$(?F));
erlc_verbose = $(erlc_verbose_$(V))
xyrl_verbose_0 = @echo " XYRL " $(filter %.xrl %.yrl,$(?F));
xyrl_verbose = $(xyrl_verbose_$(V))
# Core targets.
erlc-include:
-@find include/ src/ -type f -name \*.hrl -newer ebin -exec touch $(shell find src/ -type f -name "*.erl") \;
app:: erlc-include ebin/$(PROJECT).app
$(eval MODULES := $(shell find ebin -type f -name \*.beam \
| sed "s/ebin\//'/;s/\.beam/',/" | sed '$$s/.$$//'))
$(appsrc_verbose) cat src/$(PROJECT).app.src \
| sed "s/{modules,[[:space:]]*\[\]}/{modules, \[$(MODULES)\]}/" \
> ebin/$(PROJECT).app
define compile_erl
$(erlc_verbose) erlc -v $(ERLC_OPTS) -o ebin/ \
-pa ebin/ -I include/ $(COMPILE_FIRST_PATHS) $(1)
endef
define compile_xyrl
$(xyrl_verbose) erlc -v -o ebin/ $(1)
$(xyrl_verbose) erlc $(ERLC_OPTS) -o ebin/ ebin/*.erl
@rm ebin/*.erl
endef
ifneq ($(wildcard src/),)
ebin/$(PROJECT).app::
@mkdir -p ebin/
ebin/$(PROJECT).app:: $(shell find src -type f -name \*.erl) \
$(shell find src -type f -name \*.core)
$(if $(strip $?),$(call compile_erl,$?))
ebin/$(PROJECT).app:: $(shell find src -type f -name \*.xrl) \
$(shell find src -type f -name \*.yrl)
$(if $(strip $?),$(call compile_xyrl,$?))
endif
clean:: clean-app
# Extra targets.
clean-app:
$(gen_verbose) rm -rf ebin/
|