[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