From c801cb29d64764fa8082ec2ab17dd12f74b3143f Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Tue, 19 Aug 2014 16:17:25 +0100 Subject: [build] Allow for named configurations at build time Allow named configurations to be specified via the CONFIG=... build parameter. For headers in config/*.h which support named configurations, the following files will be included when building with CONFIG=: - config/defaults/.h (e.g. config/defaults/pcbios.h) - config/
.h - config//
.h (only if the directory config/ exists) - config/local/
.h (autocreated if necessary) - config/local//
.h (autocreated if necessary) This mechanism allows for predefined named configurations to be checked in to the source tree, as a directory config/ containing all of the required header files. The mechanism also allows for users to define multiple local configurations, by creating header files in the directory config/local/. Note that the config/*.h files which are used only to configure internal iPXE APIs (e.g. config/ioapi.h) cannot be modified via a named configuration. This avoids rebuilding the entire iPXE codebase whenever switching to a different named configuration. Inspired-by: Robin Smidsrød Tested-by: Robin Smidsrød Signed-off-by: Michael Brown --- src/Makefile.housekeeping | 40 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 38 insertions(+), 2 deletions(-) (limited to 'src/Makefile.housekeeping') diff --git a/src/Makefile.housekeeping b/src/Makefile.housekeeping index 0dce8d06..b07a8d96 100644 --- a/src/Makefile.housekeeping +++ b/src/Makefile.housekeeping @@ -689,6 +689,34 @@ privkey_DEPS += $(PRIVKEY_LIST) CFLAGS_privkey += $(if $(PRIVKEY),-DPRIVATE_KEY="\"$(PRIVKEY_INC)\"") +# (Single-element) list of named configurations +# +CONFIG_LIST := $(BIN)/.config.list +ifeq ($(wildcard $(CONFIG_LIST)),) +CONFIG_OLD := +else +CONFIG_OLD := $(shell cat $(CONFIG_LIST)) +endif +ifneq ($(CONFIG_OLD),$(CONFIG)) +$(shell $(ECHO) "$(CONFIG)" > $(CONFIG_LIST)) +endif + +$(CONFIG_LIST) : $(MAKEDEPS) + +VERYCLEANUP += $(CONFIG_LIST) + +# Named configurations +# +ifneq ($(CONFIG),) +ifneq ($(wildcard config/$(CONFIG)),) +CFLAGS += -DCONFIG=$(CONFIG) +endif +CFLAGS += -DLOCAL_CONFIG=$(CONFIG) +endif + +config/named.h : $(CONFIG_LIST) + $(Q)$(TOUCH) $@ + # These files use .incbin inline assembly to include a binary file. # Unfortunately ccache does not detect this dependency and caches # builds even when the binary file has changed. @@ -1260,8 +1288,16 @@ CLEANUP += $(EINFO) # # Local configs # -config/local/%.h : - $(Q)touch $@ +CONFIG_HEADERS := $(patsubst config/%,%,$(wildcard config/*.h)) + +$(foreach HEADER,$(CONFIG_HEADERS),config/local/$(HEADER)) : + $(Q)$(TOUCH) $@ + +ifneq ($(CONFIG),) +$(foreach HEADER,$(CONFIG_HEADERS),config/local/$(CONFIG)/$(HEADER)) : + $(Q)$(MKDIR) -p $(dir $@) + $(Q)$(TOUCH) $@ +endif ############################################################################### # -- cgit v1.2.3-55-g7522