[PATCH 23/32] kconfig: Update CONFIG_IS_ENABLED() for split files

Simon Glass sjg at chromium.org
Tue Jan 31 16:26:53 CET 2023


Update this file 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.

Signed-off-by: Simon Glass <sjg at chromium.org>
---

 include/linux/kconfig.h                | 74 +++++++++-----------------
 tools/binman/test/generated/autoconf.h |  4 +-
 2 files changed, 28 insertions(+), 50 deletions(-)

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/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.456.gfc5497dd1b-goog



More information about the U-Boot mailing list