summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJoshua Oreman2009-08-07 03:52:06 +0200
committerMarty Connor2009-11-21 02:30:58 +0100
commit9a0bd0711f9e5d0a555fa35de8eb07cb29dc83a9 (patch)
tree11c38538abb48a5b9aef36c3782e11982d41e859 /src
parent[linker] Expand and correct symbol requirement macros (diff)
downloadipxe-9a0bd0711f9e5d0a555fa35de8eb07cb29dc83a9.tar.gz
ipxe-9a0bd0711f9e5d0a555fa35de8eb07cb29dc83a9.tar.xz
ipxe-9a0bd0711f9e5d0a555fa35de8eb07cb29dc83a9.zip
[linker] Add mechanism for subsystem-dependent configuration options
It is often the case that some module of gPXE is only relevant if the subsystem it depends on is already being included. For instance, commands to manage wireless interfaces are quite useless if no compiled-in driver has pulled in the wireless networking stack. There may be a user-modifiable configuration options for these dependent modules, but even if enabled, they should not be included when they would be useless. Solve this by allowing the creation of config_subsystem.c, for configuration directives like those in the global config.c that should only be considered when subsystem.c is included in the final gPXE build. For consistency, move core/config.c to the config/ directory, where the other config_subsystem.c files will eventually reside. Signed-off-by: Marty Connor <mdc@etherboot.org>
Diffstat (limited to 'src')
-rw-r--r--src/Makefile1
-rw-r--r--src/config/config.c (renamed from src/core/config.c)18
-rw-r--r--src/include/compiler.h5
3 files changed, 24 insertions, 0 deletions
diff --git a/src/Makefile b/src/Makefile
index 16759ca0..72b0e64c 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -73,6 +73,7 @@ SRCDIRS += crypto crypto/axtls crypto/matrixssl
SRCDIRS += hci hci/commands hci/tui
SRCDIRS += hci/mucurses hci/mucurses/widgets
SRCDIRS += usr
+SRCDIRS += config
# NON_AUTO_SRCS lists files that are excluded from the normal
# automatic build system.
diff --git a/src/core/config.c b/src/config/config.c
index e4c05613..3c43dfbc 100644
--- a/src/core/config.c
+++ b/src/config/config.c
@@ -10,6 +10,24 @@ FILE_LICENCE ( GPL2_OR_LATER );
#include <config/general.h>
#include <config/console.h>
+/** @file
+ *
+ * Configuration options
+ *
+ * This file contains macros that pull various objects into the link
+ * based on definitions in configuration header files. Ideally it
+ * should be the only place in gPXE where one might need to use #ifdef
+ * for compile-time options.
+ *
+ * In the fairly common case where an object should only be considered
+ * for inclusion if the subsystem it depends on is present, its
+ * configuration macros should be placed in a file named
+ * <tt>config_<i>subsystem</i>.c</tt>, where @e subsystem is the
+ * object basename of the main source file for that subsystem. The
+ * build system will pull in that file if @c subsystem.c is included
+ * in the final gPXE executable built.
+ */
+
/*
* Build ID string calculations
*
diff --git a/src/include/compiler.h b/src/include/compiler.h
index 5ba7f441..f481f38a 100644
--- a/src/include/compiler.h
+++ b/src/include/compiler.h
@@ -159,10 +159,15 @@
#define PREFIX_OBJECT( _prefix ) _C2 ( _prefix, OBJECT )
#define OBJECT_SYMBOL PREFIX_OBJECT ( obj_ )
+#define REQUEST_EXPANDED( _sym ) REQUEST_SYMBOL ( _sym )
+#define CONFIG_SYMBOL PREFIX_OBJECT ( obj_config_ )
/** Always provide the symbol for the current object (defined by -DOBJECT) */
PROVIDE_SYMBOL ( OBJECT_SYMBOL );
+/** Pull in an object-specific configuration file if available */
+REQUEST_EXPANDED ( CONFIG_SYMBOL );
+
/** Explicitly require another object */
#define REQUIRE_OBJECT( _obj ) REQUIRE_SYMBOL ( obj_ ## _obj )