Make Makefile.inc parser loop more generic

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



git-svn-id: svn://svn.coreboot.org/coreboot/trunk@6371 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
This commit is contained in:
Patrick Georgi 2011-02-17 20:47:49 +00:00 committed by Stefan Reinauer
parent b159f7ab37
commit 58262656c6
1 changed files with 42 additions and 33 deletions

View File

@ -183,38 +183,51 @@ $(obj)/%.ramstage.o: $(obj)/%.c $(obj)/config.h
@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:=
# Add a new class of source/object files to the build system
add-class= \
$(eval $(1)-srcs:=) \
$(eval $(1)-objs:=) \
$(eval classes+=$(1))
ramstage-objs:=
romstage-objs:=
driver-objs:=
smm-objs:=
types:=ramstage romstage driver smm
# 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 @@ evaluate_subdirs= \
$(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 @@ subdirs:=$(PLATFORM-y) $(BUILD-y)
$(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,c))
$(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)