[coreboot] [commit] r6371 - trunk

repository service svn at coreboot.org
Thu Feb 17 21:47:49 CET 2011


Author: stepan
Date: Thu Feb 17 21:47:49 2011
New Revision: 6371
URL: https://tracker.coreboot.org/trac/coreboot/changeset/6371

Log:
Make Makefile.inc parser loop more generic

Signed-off-by: Patrick Georgi <patrick.georgi at secunet.com>
Acked-by: Stefan Reinauer <stefan.reinauer at coreboot.org>

Modified:
   trunk/Makefile

Modified: trunk/Makefile
==============================================================================
--- trunk/Makefile	Thu Feb 17 01:52:02 2011	(r6370)
+++ trunk/Makefile	Thu Feb 17 21:47:49 2011	(r6371)
@@ -183,38 +183,51 @@
 	@printf "    CC         $(subst $(obj)/,,$(@))\n"
 	$(CC) -MMD $(CFLAGS) -c -o $@ $<
 
-ramstage-srcs:=$(obj)/mainboard/$(MAINBOARDDIR)/static.c
-romstage-srcs:=
-driver-srcs:=
-smm-srcs:=
-cbfs-files:=
-
-ramstage-objs:=
-romstage-objs:=
-driver-objs:=
-smm-objs:=
-types:=ramstage romstage driver smm
+# Add a new class of source/object files to the build system
+add-class= \
+	$(eval $(1)-srcs:=) \
+	$(eval $(1)-objs:=) \
+	$(eval classes+=$(1))
+
+# Special classes are managed types with special behaviour
+# On parse time, for each entry in variable $(1)-y
+# a handler $(1)-handler is executed with the arguments:
+# * $(1): directory the parser is in
+# * $(2): current entry
+add-special-class= \
+	$(eval $(1):=) \
+	$(eval special-classes+=$(1))
+
+$(call add-class,ramstage)
+$(call add-class,romstage)
+$(call add-class,driver)
+$(call add-class,smm)
+
+$(call add-special-class,cbfs-files)
+cbfs-files-handler= \
+		$(if $(wildcard $(1)$($(2)-file)), \
+			$(eval tmp-cbfs-file:= $(wildcard $(1)$($(2)-file))), \
+			$(eval tmp-cbfs-file:= $($(2)-file))) \
+		$(eval cbfs-files += $(tmp-cbfs-file)|$(2)|$($(2)-type)|$($(2)-position)) \
+		$(eval $(2)-name:=) \
+		$(eval $(2)-type:=) \
+		$(eval $(2)-position:=)
+
+ramstage-srcs+=$(obj)/mainboard/$(MAINBOARDDIR)/static.c
 
 # Clean -y variables, include Makefile.inc
 # Add paths to files in X-y to X-srcs
 # Add subdirs-y to subdirs
 includemakefiles= \
-	$(foreach type,$(2), $(eval $(type)-y:=)) \
-	$(eval subdirs-y:=) \
-	$(eval cbfs-files-y:=) \
+	$(foreach class,classes subdirs $(classes) $(special-classes), $(eval $(class)-y:=)) \
 	$(eval -include $(1)) \
-	$(foreach type,$(2), \
-		$(eval $(type)-srcs+= \
+	$(foreach class,$(classes-y), $(call add-class,$(class))) \
+	$(foreach class,$(classes), \
+		$(eval $(class)-srcs+= \
 			$$(subst $(top)/,, \
-			$$(abspath $$(addprefix $(dir $(1)),$$($(type)-y)))))) \
-	$(foreach file,$(cbfs-files-y), \
-		$(if $(wildcard $(dir $(1))$($(file)-file)), \
-			$(eval tmp-cbfs-file:= $(wildcard $(dir $(1))$($(file)-file))), \
-			$(eval tmp-cbfs-file:= $($(file)-file))) \
-		$(eval cbfs-files += $(tmp-cbfs-file)|$(file)|$($(file)-type)|$($(file)-position)) \
-		$(eval $(file)-name:=) \
-		$(eval $(file)-type:=) \
-		$(eval $(file)-position:=)) \
+			$$(abspath $$(addprefix $(dir $(1)),$$($(class)-y)))))) \
+	$(foreach special,$(special-classes), \
+		$(foreach item,$($(special)-y), $(call $(special)-handler,$(dir $(1)),$(item)))) \
 	$(eval subdirs+=$$(subst $(CURDIR)/,,$$(abspath $$(addprefix $(dir $(1)),$$(subdirs-y)))))
 
 # For each path in $(subdirs) call includemakefiles
@@ -223,7 +236,7 @@
 	$(eval cursubdirs:=$(subdirs)) \
 	$(eval subdirs:=) \
 	$(foreach dir,$(cursubdirs), \
-		$(eval $(call includemakefiles,$(dir)/Makefile.inc,$(types)))) \
+		$(eval $(call includemakefiles,$(dir)/Makefile.inc))) \
 	$(if $(subdirs),$(eval $(call evaluate_subdirs)))
 
 # collect all object files eligible for building
@@ -231,14 +244,10 @@
 $(eval $(call evaluate_subdirs))
 
 src-to-obj=$(addsuffix .$(1).o, $(basename $(patsubst src/%, $(obj)/%, $($(1)-srcs))))
+$(foreach class,$(classes),$(eval $(class)-objs:=$(call src-to-obj,$(class))))
 
-ramstage-objs:=$(call src-to-obj,ramstage)
-romstage-objs:=$(call src-to-obj,romstage)
-driver-objs:=$(call src-to-obj,driver)
-smm-objs:=$(call src-to-obj,smm)
-
-allsrcs:=$(foreach var, $(addsuffix -srcs,$(types)), $($(var)))
-allobjs:=$(foreach var, $(addsuffix -objs,$(types)), $($(var)))
+allsrcs:=$(foreach var, $(addsuffix -srcs,$(classes)), $($(var)))
+allobjs:=$(foreach var, $(addsuffix -objs,$(classes)), $($(var)))
 alldirs:=$(sort $(abspath $(dir $(allobjs))))
 
 define ramstage-objs_asl_template
@@ -274,7 +283,7 @@
 $(eval $(call create_cc_template,smm,S))
 
 foreach-src=$(foreach file,$($(1)-srcs),$(eval $(call $(1)-objs_$(subst .,,$(suffix $(file)))_template,$(subst src/,,$(basename $(file))))))
-$(eval $(foreach type,$(types),$(call foreach-src,$(type))))
+$(eval $(foreach class,$(classes),$(call foreach-src,$(class))))
 
 DEPENDENCIES = $(ramstage-objs:.o=.d) $(romstage-objs:.o=.d) $(driver-objs:.o=.d) $(smm-objs:.o=.d)
 -include $(DEPENDENCIES)




More information about the coreboot mailing list