summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/Makefile.housekeeping40
-rw-r--r--src/config/colour.h3
-rw-r--r--src/config/console.h3
-rw-r--r--src/config/crypto.h3
-rw-r--r--src/config/general.h3
-rw-r--r--src/config/named.h26
-rw-r--r--src/config/serial.h3
-rw-r--r--src/config/settings.h3
-rw-r--r--src/config/sideband.h3
9 files changed, 85 insertions, 2 deletions
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 := <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
###############################################################################
#
diff --git a/src/config/colour.h b/src/config/colour.h
index c75f65e6..57d20c1d 100644
--- a/src/config/colour.h
+++ b/src/config/colour.h
@@ -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 */
diff --git a/src/config/console.h b/src/config/console.h
index 5d2cc1dc..908ec5a0 100644
--- a/src/config/console.h
+++ b/src/config/console.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 */
diff --git a/src/config/crypto.h b/src/config/crypto.h
index 95c73d47..1e021b0f 100644
--- a/src/config/crypto.h
+++ b/src/config/crypto.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 */
diff --git a/src/config/general.h b/src/config/general.h
index 72cfc3b8..53920345 100644
--- a/src/config/general.h
+++ b/src/config/general.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 */
diff --git a/src/config/named.h b/src/config/named.h
new file mode 100644
index 00000000..36efdabd
--- /dev/null
+++ b/src/config/named.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 */
diff --git a/src/config/serial.h b/src/config/serial.h
index 8bb9311f..08368efd 100644
--- a/src/config/serial.h
+++ b/src/config/serial.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 */
diff --git a/src/config/settings.h b/src/config/settings.h
index b06f2901..42fe9cc8 100644
--- a/src/config/settings.h
+++ b/src/config/settings.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 */
diff --git a/src/config/sideband.h b/src/config/sideband.h
index 2e2a8d41..039bb5d0 100644
--- a/src/config/sideband.h
+++ b/src/config/sideband.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 */