summaryrefslogtreecommitdiff
path: root/build
diff options
context:
space:
mode:
authorNicolas Schodet2015-10-31 01:54:28 +0100
committerNicolas Schodet2019-10-07 00:44:57 +0200
commitdde0d4cfe6379e628729fe87aa5849db6cc11366 (patch)
tree406d7dc0010a2c185704f9082476079a9dd9320f /build
parent4fd623cd267ecfb1663be4e7c8b56c55201c3c82 (diff)
build: recursively include submodules
Diffstat (limited to 'build')
-rw-r--r--build/macros.mk8
-rw-r--r--build/setup.mk25
2 files changed, 28 insertions, 5 deletions
diff --git a/build/macros.mk b/build/macros.mk
index cd8347c..f77159b 100644
--- a/build/macros.mk
+++ b/build/macros.mk
@@ -2,6 +2,10 @@
#
# Usefull macros.
+# Evaluate B only if A is defined.
+# $(call ifdefined,A,B)
+ifdefined = $(if $(filter undefined,$(origin $1)),$2)
+
# Return $(A) only if defined, else return B.
# $(call defval,A,B)
defval = $(if $(filter undefined,$(origin $1)),$2,$($1))
@@ -44,3 +48,7 @@ $(foreach target,$(TARGETS),\
$(addprefix $1/,$(basename $2)))): $3
endef
source_specific = $(eval $(call source_specific_sub,$1,$2,$3))
+
+# Evaluate subvariables.
+# $(call foreachsub,LIST,PREFIX)
+foreachsub = $(foreach v,$1,$($(subst /,_,$v)_$2))
diff --git a/build/setup.mk b/build/setup.mk
index 26601ed..4999fba 100644
--- a/build/setup.mk
+++ b/build/setup.mk
@@ -8,14 +8,29 @@ DEFAULT_MODULES ?= ucoo/intf ucoo/arch ucoo/arch/host ucoo/arch/host/mex
ALL_PROGS := $(PROGS) $(foreach target,$(TARGETS),$($(target)_PROGS))
-ALL_MODULES := $(sort $(DEFAULT_MODULES) $(MODULES) \
- $(foreach prog,$(ALL_PROGS),$($(prog)_MODULES)))
+ALL_MODULES :=
+NEW_MODULES := $(sort $(DEFAULT_MODULES) $(MODULES) \
+ $(call foreachsub,$(ALL_PROGS),MODULES))
+
+define MODULES_deps_template
+ALL_MODULES += $$(NEW_MODULES)
+NEW_UCOO_MODULES := $$(filter ucoo/%,$$(NEW_MODULES))
+NEW_EXT_MODULES := $$(filter-out ucoo/%,$$(NEW_MODULES))
+include $$(NEW_UCOO_MODULES:%=$$(UCOO_BASE)/%/Module)
+include $$(NEW_EXT_MODULES:%=$$(BASE)/%/Module)
+NEW_MODULES := $$(filter-out $$(ALL_MODULES),\
+ $$(call foreachsub,$$(ALL_MODULES),MODULES))
+MODULES := $$(sort $$(MODULES) $$(call foreachsub,$$(MODULES),MODULES))
+$$(foreach prog,$$(ALL_PROGS),$$(eval $$(call ifdefined $$(prog)_MODULES,\
+$$(prog)_MODULES := $$(sort $$($$(prog)_MODULES) \
+ $$(call foreachsub,$$($$(prog)_MODULES),MODULES)))))
+$$(if $$(NEW_MODULES),$$(eval $$(MODULES_deps_template)))
+endef
+$(eval $(MODULES_deps_template))
+
ALL_UCOO_MODULES := $(filter ucoo/%,$(ALL_MODULES))
ALL_EXT_MODULES := $(filter-out ucoo/%,$(ALL_MODULES))
-include $(ALL_UCOO_MODULES:%=$(UCOO_BASE)/%/Module)
-include $(ALL_EXT_MODULES:%=$(BASE)/%/Module)
-
define MODULES_template
$1_SOURCES += $$(foreach module,\
$$(DEFAULT_MODULES) $$(call defval,$1_MODULES,$$(MODULES)),\