mirror of https://github.com/ipxe/ipxe.git
[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=<name>: - config/defaults/<platform>.h (e.g. config/defaults/pcbios.h) - config/<header>.h - config/<name>/<header>.h (only if the directory config/<name> exists) - config/local/<header>.h (autocreated if necessary) - config/local/<name>/<header>.h (autocreated if necessary) This mechanism allows for predefined named configurations to be checked in to the source tree, as a directory config/<name> 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/<name>. 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 <robin@smidsrod.no> Tested-by: Robin Smidsrød <robin@smidsrod.no> Signed-off-by: Michael Brown <mcb30@ipxe.org>pull/25/head
parent
3953ddd2ac
commit
c801cb29d6
|
@ -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 := <invalid>
|
||||
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
|
||||
|
||||
###############################################################################
|
||||
#
|
||||
|
|
|
@ -30,6 +30,9 @@ FILE_LICENCE ( GPL2_OR_LATER );
|
|||
#define COLOR_PXE_FG COLOR_BLACK
|
||||
#define COLOR_PXE_BG COLOR_WHITE
|
||||
|
||||
#include <config/named.h>
|
||||
#include NAMED_CONFIG(colour.h)
|
||||
#include <config/local/colour.h>
|
||||
#include LOCAL_NAMED_CONFIG(colour.h)
|
||||
|
||||
#endif /* CONFIG_COLOUR_H */
|
||||
|
|
|
@ -28,6 +28,9 @@ FILE_LICENCE ( GPL2_OR_LATER );
|
|||
|
||||
#define LOG_LEVEL LOG_NONE
|
||||
|
||||
#include <config/named.h>
|
||||
#include NAMED_CONFIG(console.h)
|
||||
#include <config/local/console.h>
|
||||
#include LOCAL_NAMED_CONFIG(console.h)
|
||||
|
||||
#endif /* CONFIG_CONSOLE_H */
|
||||
|
|
|
@ -17,6 +17,9 @@ FILE_LICENCE ( GPL2_OR_LATER );
|
|||
*/
|
||||
#define TIMESTAMP_ERROR_MARGIN ( ( 12 * 60 + 30 ) * 60 )
|
||||
|
||||
#include <config/named.h>
|
||||
#include NAMED_CONFIG(crypto.h)
|
||||
#include <config/local/crypto.h>
|
||||
#include LOCAL_NAMED_CONFIG(crypto.h)
|
||||
|
||||
#endif /* CONFIG_CRYPTO_H */
|
||||
|
|
|
@ -182,6 +182,9 @@ FILE_LICENCE ( GPL2_OR_LATER );
|
|||
#undef GDBUDP /* Remote GDB debugging over UDP
|
||||
* (both may be set) */
|
||||
|
||||
#include <config/named.h>
|
||||
#include NAMED_CONFIG(general.h)
|
||||
#include <config/local/general.h>
|
||||
#include LOCAL_NAMED_CONFIG(general.h)
|
||||
|
||||
#endif /* CONFIG_GENERAL_H */
|
||||
|
|
|
@ -0,0 +1,26 @@
|
|||
#ifndef CONFIG_NAMED_H
|
||||
#define CONFIG_NAMED_H
|
||||
|
||||
/** @file
|
||||
*
|
||||
* Named configurations
|
||||
*
|
||||
*/
|
||||
|
||||
FILE_LICENCE ( GPL2_OR_LATER );
|
||||
|
||||
/* config/<name>/<header>.h */
|
||||
#ifdef CONFIG
|
||||
#define NAMED_CONFIG(_header) <config/CONFIG/_header>
|
||||
#else
|
||||
#define NAMED_CONFIG(_header) <config/_header>
|
||||
#endif
|
||||
|
||||
/* config/local/<name>/<header>.h */
|
||||
#ifdef LOCAL_CONFIG
|
||||
#define LOCAL_NAMED_CONFIG(_header) <config/local/LOCAL_CONFIG/_header>
|
||||
#else
|
||||
#define LOCAL_NAMED_CONFIG(_header) <config/_header>
|
||||
#endif
|
||||
|
||||
#endif /* CONFIG_NAMED_H */
|
|
@ -32,6 +32,9 @@ FILE_LICENCE ( GPL2_OR_LATER );
|
|||
#define COMSTOP 1 /* Stop bits */
|
||||
#endif
|
||||
|
||||
#include <config/named.h>
|
||||
#include NAMED_CONFIG(serial.h)
|
||||
#include <config/local/serial.h>
|
||||
#include LOCAL_NAMED_CONFIG(serial.h)
|
||||
|
||||
#endif /* CONFIG_SERIAL_H */
|
||||
|
|
|
@ -14,6 +14,9 @@ FILE_LICENCE ( GPL2_OR_LATER );
|
|||
//#define MEMMAP_SETTINGS /* Memory map settings */
|
||||
//#define VMWARE_SETTINGS /* VMware GuestInfo settings */
|
||||
|
||||
#include <config/named.h>
|
||||
#include NAMED_CONFIG(settings.h)
|
||||
#include <config/local/settings.h>
|
||||
#include LOCAL_NAMED_CONFIG(settings.h)
|
||||
|
||||
#endif /* CONFIG_SETTINGS_H */
|
||||
|
|
|
@ -11,6 +11,9 @@ FILE_LICENCE ( GPL2_OR_LATER );
|
|||
|
||||
//#define CONFIG_BOFM /* IBM's BladeCenter Open Fabric Manager */
|
||||
|
||||
#include <config/named.h>
|
||||
#include NAMED_CONFIG(sideband.h)
|
||||
#include <config/local/sideband.h>
|
||||
#include LOCAL_NAMED_CONFIG(sideband.h)
|
||||
|
||||
#endif /* CONFIG_SIDEBAND_H */
|
||||
|
|
Loading…
Reference in New Issue