
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@chromium.org ---
include/linux/kconfig.h | 87 ++++++++++++----------------------------- 1 file changed, 24 insertions(+), 63 deletions(-)
diff --git a/include/linux/kconfig.h b/include/linux/kconfig.h index d109ed3119e..e6b0f238ec4 100644 --- a/include/linux/kconfig.h +++ b/include/linux/kconfig.h @@ -1,7 +1,13 @@ #ifndef __LINUX_KCONFIG_H #define __LINUX_KCONFIG_H
+#ifdef CONFIG_TPL_BUILD +#include <generated/autoconf_tpl.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 @@ -31,29 +37,29 @@ (config_enabled(option))
/* - * U-Boot add-on: Helper macros to reference to different macros - * (CONFIG_ or CONFIG_SPL_ prefixed), depending on the build context. + * 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 + * + * 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. */
-#if defined(CONFIG_TPL_BUILD) -#define _CONFIG_PREFIX TPL_ -#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 +#define __config_is_enabled(cfg) (IS_ENABLED(CONFIG_ ## cfg ## _nospl) ? \ + !IS_ENABLED(CONFIG_SPL_BUILD) : \ + config_enabled(CONFIG_ ## cfg))
/* - * CONFIG_VAL(FOO) evaluates to the value of - * 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_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. */ -#define CONFIG_VAL(option) config_val(option) +#define CONFIG_IS_ENABLED(option) __config_is_enabled(option) + +#define __config_val(cfg) CONFIG_ ## cfg + +#define CONFIG_VAL(option) __config_val(option)
/* * Count number of arguments to a variadic macro. Currently only need @@ -62,49 +68,4 @@ #define __arg6(a1, a2, a3, a4, a5, a6, ...) a6 #define __count_args(...) __arg6(dummy, ##__VA_ARGS__, 4, 3, 2, 1, 0)
-#define __concat(a, b) ___concat(a, b) -#define ___concat(a, b) a ## b - -#define __unwrap(...) __VA_ARGS__ -#define __unwrap1(case1, case0) __unwrap case1 -#define __unwrap0(case1, case0) __unwrap case0 - -#define __CONFIG_IS_ENABLED_1(option) __CONFIG_IS_ENABLED_3(option, (1), (0)) -#define __CONFIG_IS_ENABLED_2(option, case1) __CONFIG_IS_ENABLED_3(option, case1, ()) -#define __CONFIG_IS_ENABLED_3(option, case1, case0) \ - __concat(__unwrap, config_enabled(CONFIG_VAL(option))) (case1, case0) - -/* - * CONFIG_IS_ENABLED(FOO) expands to - * 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, (abc)) expands to - * 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. - * - * CONFIG_IS_ENABLED(FOO, (abc), (def)) expands to - * 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. - * - * The optional second and third arguments must be parenthesized; that - * allows one to include a trailing comma, e.g. for use in - * - * CONFIG_IS_ENABLED(ACME, ({.compatible = "acme,frobnozzle"},)) - * - * which adds an entry to the array being defined if CONFIG_ACME (or - * CONFIG_SPL_ACME/CONFIG_TPL_ACME, depending on build context) is - * set, and nothing otherwise. - */ - -#define CONFIG_IS_ENABLED(option, ...) \ - __concat(__CONFIG_IS_ENABLED_, __count_args(option, ##__VA_ARGS__)) (option, ##__VA_ARGS__) - - #endif /* __LINUX_KCONFIG_H */