.PHONY: clean all rel_mktemp_dir console help include build.mk CONTROLLER_REL_TAR:=$(CURDIR)/controller_$(shell date +%Y%m%d%H%M).tar.gz CONSOLE_REL_TAR:=$(CURDIR)/console_$(shell date +%Y%m%d%H%M).tar.gz all: common controller console help: @echo "Available build rules"; \ echo "---------------------"; \ echo " console Build all executables for the console"; \ echo " controller Build the controller executables"; \ echo " all Build both controller and console"; \ echo " release_console Build a release tar file for the console"; \ echo " release_controller Build a release tar file for the controller"; \ echo " release Build both controller and console release"; \ echo " clean Clean for both controller and console"; \ echo ""; \ echo " HOST= Cross compile for .";\ echo " e.g.: HOST=arm-linux-gnueabihf"; \ echo ""; \ echo "Building a release"; \ echo "------------------"; \ echo "Simply running \"make release\" will build both the console and"; \ echo "controller. They are stored in individual tar files, in the root"; \ echo "of the dt_ctrl directory."; \ echo "The releases are built in a temporary work directory from a clean"; \ echo "git checkout. A release to be used for production must always"; \ echo "be built from a version which is already committed to the"; \ echo "golden repository (on eris.camras.nl)." libnova/libnova.h: lib/libnova.la libnova.la: lib/libnova.la lib/libnova.la: cd libnova-0.13.0 ; ./configure -enable-static -disable-shared --prefix=${CURDIR} $(CONF_HOST); make; make install clean: subdirs_CLEAN rm -rf lib/* rm -rf include/libnova cd libnova-0.13.0 ; make clean || true # Rules for building a release rel_mktemp_dir: $(eval REL_BUILD_DIR:=$(shell mktemp -d /tmp/dt_ctrl_XXXXXX)) @echo "****** Building code in dir: $(REL_BUILD_DIR)" rel_clone_dir: rel_mktemp_dir @echo "****** Creating clean checkout of source"; \ git clone . $(REL_BUILD_DIR) >/dev/null; \ echo " Done" rel_utils: rel_clone_dir @echo "****** Building common/utils"; \ $(MAKE) -C $(REL_BUILD_DIR)/common/utils >/dev/null; \ echo " Done" rel_trace: rel_utils @echo "****** Building common/trace"; \ $(MAKE) -C $(REL_BUILD_DIR)/common/trace >/dev/null; \ echo " Done" rel_command: rel_utils @echo "****** Building common/command"; \ $(MAKE) -C $(REL_BUILD_DIR)/common/command >/dev/null; \ echo " Done" rel_log: @echo "****** Building common/log"; \ $(MAKE) -C $(REL_BUILD_DIR)/common/log >/dev/null; \ echo " Done" rel_ctrl: rel_trace rel_log rel_command @echo "****** Building controller"; \ $(MAKE) -C $(REL_BUILD_DIR)/controller >/dev/null; \ echo " Done" rel_libnova: rel_clone_dir @echo "****** Building libnova"; \ (cd $(REL_BUILD_DIR)/libnova-0.13.0 ; ./configure -enable-static -disable-shared --prefix=$(REL_BUILD_DIR) $(CONF_HOST); make; make install) >/dev/null; \ echo " Done" rel_cons: rel_trace rel_libnova rel_log rel_command @echo "****** Building console"; \ $(MAKE) -C $(REL_BUILD_DIR)/console >/dev/null; \ echo " Done" $(CONSOLE_REL_TAR): rel_cons @tar -C $(REL_BUILD_DIR)/release -zhcf $@ console @echo "****** Created console release file $@" $(CONTROLLER_REL_TAR): rel_ctrl @tar -C $(REL_BUILD_DIR)/release -zhcf $@ controller @echo "****** Created controller release file $@" release: $(CONSOLE_REL_TAR) $(CONTROLLER_REL_TAR) release_console: $(CONSOLE_REL_TAR) release_controller: $(CONTROLLER_REL_TAR) DIR := . SRCS := TARGETS := CLEAN := define SUBDIR ifeq ($(DIR),.) DIR := $1 else DIR := $(DIR)/$1 endif $(DIR)_TMPTARGETS:=$(value TARGETS) TARGETS:= include $(DIR)/$1/build.mk targets_$$(DIR): $$(TARGETS) $$(TARGETS): $(DIR)/$1/build.mk TARGETS:= $$($(DIR)_TMPTARGETS) $$(TARGETS) DIR := $(DIR) endef CFLAGS := -pthread -D_GNU_SOURCE -Icommon -Icommon/include -Icontroller -Iconsole/console -Iinclude LDFLAGS := -pthread -Lcommon/lib -Lcontroller/lib -Lconsole/console/lib -Llib -Wl,--as-needed VPATH += common/lib controller/lib console/console/lib lib VPATH += include TARGETS:= $(eval $(call SUBDIR,common)) common: $(TARGETS) TARGETS:= $(eval $(call SUBDIR,controller)) controller: $(TARGETS) TARGETS:= $(eval $(call SUBDIR,console)) console: $(TARGETS) SRCS_TMP:=$(SRCS:.il=.il2c.d) DEPS:=$(SRCS_TMP:.c=.d) DEPSLIBS:=$(foreach DEP,$(DEPS),$(dir $(DEP)).libs/$(notdir $(DEP))) -include $(DEPS) $(DEPSLIBS) CLEAN += $(DEPS) $(DEPSLIBS) SRCS_IL = $(filter %.il,$(SRCS)) $(SRCS_IL): $(IL2C) subdirs_CLEAN: $(foreach CLEANITEM,$(CLEAN), rm -rf $(CLEANITEM);)