[RFC PATCH v2 46/56] Makefile: Include the config for the phase being built
Simon Glass
sjg at chromium.org
Sat Feb 4 01:26:09 CET 2023
At present there is only a single auto.conf file used within the
makefiles. Update them to use the correct one for each phase.
Also update kconfig.h to include the correct autoconf.h or autoconf_spl.h
file for each phase. This allows the macros to be simplified.
With this, CONFIG_IS_ENABLED() is the same as IS_ENABLED() apart from a
migration detail.
Both changes are made in the same patch to avoid build errors.
Signed-off-by: Simon Glass <sjg at chromium.org>
---
Changes in v2:
- Include code from 'Update CONFIG_IS_ENABLED() for split files' too
Makefile | 11 +++-
include/linux/kconfig.h | 74 +++++++++-----------------
scripts/Makefile.build | 12 ++++-
scripts/Makefile.spl | 10 +++-
tools/binman/test/generated/autoconf.h | 4 +-
5 files changed, 58 insertions(+), 53 deletions(-)
diff --git a/Makefile b/Makefile
index 4d6f71037ff..1eea78a2d7e 100644
--- a/Makefile
+++ b/Makefile
@@ -587,8 +587,17 @@ scripts: scripts_basic scripts_dtc include/config/auto.conf
$(Q)$(MAKE) $(build)=$(@)
ifeq ($(dot-config),1)
-# Read in config
+
+# Read in the config for this phase
+ifdef CONFIG_TPL_BUILD
+-include include/config/auto_tpl.conf
+else ifdef CONFIG_VPL_BUILD
+-include include/config/auto_vpl.conf
+else ifdef CONFIG_SPL_BUILD
+-include include/config/auto_spl.conf
+else
-include include/config/auto.conf
+endif
# Read in dependencies to all Kconfig* files, make sure to run
# oldconfig if changes are detected.
diff --git a/include/linux/kconfig.h b/include/linux/kconfig.h
index 2bc704e1104..f00686eb3e1 100644
--- a/include/linux/kconfig.h
+++ b/include/linux/kconfig.h
@@ -1,7 +1,17 @@
#ifndef __LINUX_KCONFIG_H
#define __LINUX_KCONFIG_H
+#ifdef USE_HOSTCC
+#include <generated/autoconf_tools.h>
+#elif defined(CONFIG_TPL_BUILD)
+#include <generated/autoconf_tpl.h>
+#elif defined(CONFIG_VPL_BUILD)
+#include <generated/autoconf_vpl.h>
+#elif defined(CONFIG_SPL_BUILD)
+#include <generated/autoconf_spl.h>
+#else
#include <generated/autoconf.h>
+#endif
/*
* Helper macros to use CONFIG_ options in C/CPP expressions. Note that
@@ -28,37 +38,9 @@
*/
#define IS_ENABLED(option) config_enabled(option, 0)
-/*
- * U-Boot add-on: Helper macros to reference to different macros (prefixed by
- * CONFIG_, CONFIG_SPL_, CONFIG_TPL_ or CONFIG_TOOLS_), depending on the build
- * context.
- */
+#define __config_val(cfg) CONFIG_ ## cfg
-#ifdef USE_HOSTCC
-#define _CONFIG_PREFIX TOOLS_
-#elif defined(CONFIG_TPL_BUILD)
-#define _CONFIG_PREFIX TPL_
-#elif defined(CONFIG_VPL_BUILD)
-#define _CONFIG_PREFIX VPL_
-#elif defined(CONFIG_SPL_BUILD)
-#define _CONFIG_PREFIX SPL_
-#else
-#define _CONFIG_PREFIX
-#endif
-
-#define config_val(cfg) _config_val(_CONFIG_PREFIX, cfg)
-#define _config_val(pfx, cfg) __config_val(pfx, cfg)
-#define __config_val(pfx, cfg) CONFIG_ ## pfx ## cfg
-
-/*
- * CONFIG_VAL(FOO) evaluates to the value of
- * CONFIG_TOOLS_FOO if USE_HOSTCC is defined,
- * CONFIG_FOO if CONFIG_SPL_BUILD is undefined,
- * CONFIG_SPL_FOO if CONFIG_SPL_BUILD is defined.
- * CONFIG_TPL_FOO if CONFIG_TPL_BUILD is defined.
- * CONFIG_VPL_FOO if CONFIG_VPL_BUILD is defined.
- */
-#define CONFIG_VAL(option) config_val(option)
+#define CONFIG_VAL(option) __config_val(option)
/*
* This uses a similar mechanism to config_enabled() above. If cfg is enabled,
@@ -104,26 +86,17 @@ long invalid_use_of_IF_ENABLED_INT(void);
__concat(__unwrap, config_enabled(CONFIG_VAL(option), 0)) (case1, case0)
/*
- * CONFIG_IS_ENABLED(FOO) expands to
- * 1 if USE_HOSTCC is defined and CONFIG_TOOLS_FOO is set to 'y',
- * 1 if CONFIG_SPL_BUILD is undefined and CONFIG_FOO is set to 'y',
- * 1 if CONFIG_SPL_BUILD is defined and CONFIG_SPL_FOO is set to 'y',
- * 1 if CONFIG_TPL_BUILD is defined and CONFIG_TPL_FOO is set to 'y',
- * 0 otherwise.
+ * CONFIG_IS_ENABLED(FOO) returns 1 if CONFIG_FOO is enabled for the phase being
+ * built, else 0. Note that CONFIG_FOO corresponds to CONFIG_SPL_FOO (in
+ * Kconfig) for the SPL phase, CONFIG_TPL_FOO for the TPL phase, etc.
*
- * CONFIG_IS_ENABLED(FOO, (abc)) expands to
- * abc if USE_HOSTCC is defined and CONFIG_TOOLS_FOO is set to 'y',
- * abc if CONFIG_SPL_BUILD is undefined and CONFIG_FOO is set to 'y',
- * abc if CONFIG_SPL_BUILD is defined and CONFIG_SPL_FOO is set to 'y',
- * abc if CONFIG_TPL_BUILD is defined and CONFIG_TPL_FOO is set to 'y',
- * nothing otherwise.
+ * The _nospl version of a CONFIG is emitted by kconfig when an option has no
+ * SPL equivalent. So in that case there is a CONFIG_xxx for example, but not a
+ * CONFIG_SPL_xxx
*
- * CONFIG_IS_ENABLED(FOO, (abc), (def)) expands to
- * abc if USE_HOSTCC is defined and CONFIG_TOOLS_FOO is set to 'y',
- * abc if CONFIG_SPL_BUILD is undefined and CONFIG_FOO is set to 'y',
- * abc if CONFIG_SPL_BUILD is defined and CONFIG_SPL_FOO is set to 'y',
- * abc if CONFIG_TPL_BUILD is defined and CONFIG_TPL_FOO is set to 'y',
- * def otherwise.
+ * This is needed as a transition measure while CONFIG_IS_ENABLED() is used on
+ * options without SPL equivalent, since in that case it should always return
+ * zero. Once we add SPL equivalents, this clause can be dropped.
*
* The optional second and third arguments must be parenthesized; that
* allows one to include a trailing comma, e.g. for use in
@@ -135,7 +108,7 @@ long invalid_use_of_IF_ENABLED_INT(void);
* set, and nothing otherwise.
*/
-#define CONFIG_IS_ENABLED(option, ...) \
+#define CONFIG_IS_ENABLED(option, ...) \
__concat(__CONFIG_IS_ENABLED_, __count_args(option, ##__VA_ARGS__)) (option, ##__VA_ARGS__)
#ifndef __ASSEMBLY__
@@ -155,4 +128,7 @@ long invalid_use_of_CONFIG_IF_ENABLED_INT(void);
CONFIG_IS_ENABLED(option, (CONFIG_VAL(int_option)), \
(invalid_use_of_CONFIG_IF_ENABLED_INT()))
+#define CONFIG_IF_INT(option, int_option) \
+ CONFIG_IF_ENABLED_INT(option, int_option)
+
#endif /* __LINUX_KCONFIG_H */
diff --git a/scripts/Makefile.build b/scripts/Makefile.build
index 97dd4a64f6e..093392b430f 100644
--- a/scripts/Makefile.build
+++ b/scripts/Makefile.build
@@ -44,9 +44,19 @@ ldflags-y :=
subdir-asflags-y :=
subdir-ccflags-y :=
-# Read auto.conf if it exists, otherwise ignore
+# Read appropriate auto.conf if it exists, otherwise ignore
# Modified for U-Boot
+
+ifeq ($(SPL_NAME),tpl)
+-include include/config/auto_tpl.conf
+else ifeq ($(SPL_NAME),vpl)
+-include include/config/auto_vpl.conf
+else ifeq ($(SPL_NAME),spl)
+-include include/config/auto_spl.conf
+else
-include include/config/auto.conf
+endif
+
-include $(prefix)/include/autoconf.mk
include scripts/Kbuild.include
diff --git a/scripts/Makefile.spl b/scripts/Makefile.spl
index 15ac87286d5..41528f32307 100644
--- a/scripts/Makefile.spl
+++ b/scripts/Makefile.spl
@@ -19,9 +19,17 @@ _dummy := $(shell [ -d $(obj) ] || mkdir -p $(obj))
include $(srctree)/scripts/Kbuild.include
--include include/config/auto.conf
-include $(obj)/include/autoconf.mk
+# Read in the config for this SPL phase
+ifdef CONFIG_TPL_BUILD
+-include include/config/auto_tpl.conf
+else ifdef CONFIG_VPL_BUILD
+-include include/config/auto_vpl.conf
+else
+-include include/config/auto_spl.conf
+endif
+
UBOOTINCLUDE := -I$(obj)/include $(UBOOTINCLUDE)
KBUILD_CPPFLAGS += -DCONFIG_SPL_BUILD
diff --git a/tools/binman/test/generated/autoconf.h b/tools/binman/test/generated/autoconf.h
index 6a23039f469..88dc762c423 100644
--- a/tools/binman/test/generated/autoconf.h
+++ b/tools/binman/test/generated/autoconf.h
@@ -1,3 +1,5 @@
#define CONFIG_BINMAN 1
#define CONFIG_SPL_BUILD 1
-#define CONFIG_SPL_BINMAN_SYMBOLS 1
+
+/* Don't include the SPL_ here since we are using separate autoconf files */
+#define CONFIG_BINMAN_SYMBOLS 1
--
2.39.1.519.gcb327c4b5f-goog
More information about the U-Boot
mailing list