blob: 8985ca491116a62f0f915a750069c45b9642bcd8 (
plain) (
tree)
|
|
#
# %CopyrightBegin%
#
# Copyright Ericsson AB 2010-2011. All Rights Reserved.
#
# The contents of this file are subject to the Erlang Public License,
# Version 1.1, (the "License"); you may not use this file except in
# compliance with the License. You should have received a copy of the
# Erlang Public License along with this software. If not, it can be
# retrieved online at http://www.erlang.org/.
#
# Software distributed under the License is distributed on an "AS IS"
# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
# the License for the specific language governing rights and limitations
# under the License.
#
# %CopyrightEnd%
#
#
ifneq ($(ERL_TOP),)
include $(ERL_TOP)/make/target.mk
EBIN = ../../ebin
include $(ERL_TOP)/make/$(TARGET)/otp.mk
else
include $(DIAMETER_TOP)/make/target.mk
EBIN = ../../ebin
include $(DIAMETER_TOP)/make/$(TARGET)/rules.mk
endif
# ----------------------------------------------------
# Application version
# ----------------------------------------------------
include ../../vsn.mk
VSN=$(DIAMETER_VSN)
# ----------------------------------------------------
# Release directory specification
# ----------------------------------------------------
RELSYSDIR = $(RELEASE_PATH)/lib/diameter-$(VSN)
INCDIR = ../../include
# ----------------------------------------------------
# Target Specs
# ----------------------------------------------------
include modules.mk
SPEC_ERL_FILES = \
$(SPEC_FILES:%.dia=%.erl)
SPEC_HRL_FILES = \
$(SPEC_FILES:%.dia=%.hrl)
APP_MODULES = \
$(MODULES) \
$(SPEC_FILES:%.dia=%)
TARGET_FILES = \
$(APP_MODULES:%=$(EBIN)/%.$(EMULATOR)) \
$(APP_TARGET) \
$(APPUP_TARGET)
ESCRIPT_FILES = \
../../bin/diameterc
APP_FILE = diameter.app
APP_SRC = $(APP_FILE).src
APP_TARGET = $(EBIN)/$(APP_FILE)
APPUP_FILE = diameter.appup
APPUP_SRC = $(APPUP_FILE).src
APPUP_TARGET = $(EBIN)/$(APPUP_FILE)
# ----------------------------------------------------
# FLAGS
# ----------------------------------------------------
ifeq ($(TYPE),debug)
ERL_COMPILE_FLAGS += -Ddebug
endif
include diameter.mk
ERL_COMPILE_FLAGS += \
$(DIAMETER_ERL_COMPILE_FLAGS) \
-I$(INCDIR)
# ----------------------------------------------------
# Targets
# ----------------------------------------------------
debug:
@$(MAKE) TYPE=debug opt
opt: $(TARGET_FILES)
clean:
rm -f $(TARGET_FILES) $(SPEC_ERL_FILES) $(SPEC_HRL_FILES)
rm -f $(APP_TARGET) $(APPUP_TARGET)
rm -f errs core *~ diameter_gen_*.forms diameter_gen_*.spec
rm -f depend.mk
docs:
info:
@echo ""
@echo "SPEC_FILES = $(FILES)"
@echo "MODULES = $(MODULES)"
@echo ""
@echo "EXTERNAL_HRL_FILES = $(EXTERNAL_HRL_FILES)"
@echo "INTERNAL_HRL_FILES = $(INTERNAL_HRL_FILES)"
@echo ""
@echo "EXAMPLE_FILES = $(EXAMPLE_FILES)"
@echo ""
# ----------------------------------------------------
# Special Build Targets
# ----------------------------------------------------
# Generate the app file and then modules into in. This shouldn't know
# about ../{compiler,transport} but good enough for now.
$(APP_TARGET): $(APP_SRC) \
../../vsn.mk \
modules.mk \
../compiler/modules.mk \
../transport/modules.mk
sed -e 's;%VSN%;$(VSN);' $< > $@
M=`echo $(APP_MODULES) | sed -e 's/^ *//' -e 's/ *$$//' -e 'y/ /,/'`; \
echo "/%APP_MODULES%/s//$$M/;w;q" | tr ';' '\n' \
| ed -s $@
$(MAKE) -C ../compiler $(APP_TARGET) APP_TARGET=$(APP_TARGET)
$(MAKE) -C ../transport $(APP_TARGET) APP_TARGET=$(APP_TARGET)
$(APPUP_TARGET): $(APPUP_SRC) ../../vsn.mk
sed -e 's;%VSN%;$(VSN);' $< > $@
compiler:
$(MAKE) -C ../$@
app: $(APP_TARGET) $(APPUP_TARGET)
# erl/hrl from application spec
diameter_gen_%.erl diameter_gen_%.hrl: diameter_gen_%.dia
../../bin/diameterc -i $(EBIN) -o $(@D) $<
# ----------------------------------------------------
# Release Target
# ----------------------------------------------------
ifneq ($(ERL_TOP),)
include $(ERL_TOP)/make/otp_release_targets.mk
else
include $(DIAMETER_TOP)/make/release_targets.mk
endif
release_spec: opt
$(INSTALL_DIR) $(RELSYSDIR)/bin
$(INSTALL_DIR) $(RELSYSDIR)/ebin
$(INSTALL_DIR) $(RELSYSDIR)/src/app
$(INSTALL_DIR) $(RELSYSDIR)/include
$(INSTALL_DIR) $(RELSYSDIR)/examples
$(INSTALL_SCRIPT) $(ESCRIPT_FILES) $(RELSYSDIR)/bin
$(INSTALL_DATA) $(TARGET_FILES) $(RELSYSDIR)/ebin
$(INSTALL_DATA) $(MODULES:%=%.erl) $(SPEC_ERL_FILES) $(RELSYSDIR)/src/app
$(INSTALL_DATA) $(SPEC_FILES) $(RELSYSDIR)/src/app
$(INSTALL_DATA) $(INTERNAL_HRL_FILES) $(RELSYSDIR)/src/app
$(INSTALL_DATA) $(EXTERNAL_HRL_FILES) $(SPEC_HRL_FILES) $(RELSYSDIR)/include
$(INSTALL_DATA) $(EXAMPLE_FILES) $(RELSYSDIR)/examples
release_docs_spec:
# ----------------------------------------------------
# Dependencies
# ----------------------------------------------------
depend: depend.mk
# Generate dependencies makefile. It's assumed that the compile target
# has already been made since it's currently not smart enough to not
# force a rebuild of those beams dependent on generated hrls, and this
# is a no-no at make release.
depend.mk: depend.sed $(MODULES:%=%.erl) modules.mk Makefile
(for f in $(MODULES); do \
sed -f $< $$f.erl | sed "s@/@/$$f@"; \
done) \
> $@
-include depend.mk
.PRECIOUS: $(SPEC_ERL_FILES) $(SPEC_HRL_FILES)
.PHONY: app clean debug depend info opt compiler release_spec release_docs_spec
|