More readable recursive descent macro in Makefile
authorPatrick Georgi <patrick.georgi@coresystems.de>
Sat, 6 Mar 2010 21:18:43 +0000 (21:18 +0000)
committerPatrick Georgi <patrick.georgi@coresystems.de>
Sat, 6 Mar 2010 21:18:43 +0000 (21:18 +0000)
Signed-off-by: Patrick Georgi <patrick.georgi@coresystems.de>
Acked-by: Stefan Reinauer <stepan@coresystems.de>
git-svn-id: svn://svn.coreboot.org/coreboot/trunk@5195 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1

Makefile

index 9be6a4cd3acb5051b7ce0ab97017ced9dd4c04b4..9de0fe5efec383bdadc6d26d89f0a9082bdce9a5 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -119,8 +119,32 @@ smmobjs:=
 crt0s:=
 ldscripts:=
 types:=obj initobj driver smmobj
-includemakefiles=$(foreach type,$(2), $(eval $(type)-y:=)) $(eval subdirs-y:=) $(eval -include $(1)) $(if $(strip $(3)),$(foreach type,$(2),$(eval $(type)s+=$$(patsubst util/%,$(obj)/util/%,$$(patsubst src/%,$(obj)/%,$$(addprefix $(dir $(1)),$$($(type)-y))))))) $(eval subdirs+=$$(subst $(PWD)/,,$$(abspath $$(addprefix $(dir $(1)),$$(subdirs-y)))))
-evaluate_subdirs=$(eval cursubdirs:=$(subdirs)) $(eval subdirs:=) $(foreach dir,$(cursubdirs),$(eval $(call includemakefiles,$(dir)/Makefile.inc,$(types),$(1)))) $(if $(subdirs),$(eval $(call evaluate_subdirs, $(1))))
+
+# Clean -y variables, include Makefile.inc
+# If $(3) is non-empty, add paths to files in X-y, and add them to Xs
+# Add subdirs-y to subdirs
+includemakefiles= \
+       $(foreach type,$(2), $(eval $(type)-y:=)) \
+       $(eval subdirs-y:=) \
+       $(eval -include $(1)) \
+       $(if $(strip $(3)), \
+               $(foreach type,$(2), \
+                       $(eval $(type)s+= \
+                               $$(patsubst util/%, \
+                                       $(obj)/util/%, \
+                                       $$(patsubst src/%, \
+                                               $(obj)/%, \
+                                               $$(addprefix $(dir $(1)),$$($(type)-y))))))) \
+       $(eval subdirs+=$$(subst $(PWD)/,,$$(abspath $$(addprefix $(dir $(1)),$$(subdirs-y)))))
+
+# For each path in $(subdirs) call includemakefiles, passing $(1) as $(3)
+# Repeat until subdirs is empty
+evaluate_subdirs= \
+       $(eval cursubdirs:=$(subdirs)) \
+       $(eval subdirs:=) \
+       $(foreach dir,$(cursubdirs), \
+               $(eval $(call includemakefiles,$(dir)/Makefile.inc,$(types),$(1)))) \
+       $(if $(subdirs),$(eval $(call evaluate_subdirs, $(1))))
 
 # collect all object files eligible for building
 subdirs:=$(PLATFORM-y) $(BUILD-y)