[U-Boot] [PATCH v2 03/15] linux/kconfig.h: add CPP macros useful for per-image config options

Simon Glass sjg at chromium.org
Mon Aug 3 16:06:17 CEST 2015


On 1 August 2015 at 07:14, Masahiro Yamada
<yamada.masahiro at socionext.com> wrote:
> The previous commit introduced a useful macro used in makefiles,
> in order to reference to different variables (CONFIG_... or
> CONFIG_SPL_...) depending on the build context.
>
> Per-image config option control is a PITA in C sources, too.
> Here are some macros useful in C/CPP expressions.
>
> CONFIG_IS_ENABLED(FOO) can be used as a shorthand for
>
>   (!defined(CONFIG_SPL_BUILD) && defined(CONFIG_FOO)) || \
>    (defined(CONFIG_SPL_BUILD) && defined(CONFIG_SPL_FOO))
>
> For example, it is useful to describe C code as follows,
>
>   #if CONFIG_IS_ENABLED(OF_CONTROL)
>       (device tree code)
>   #else
>       (board file code)
>   #endif
>
> The ifdef conditional above is switched by CONFIG_OF_CONTROL during
> the U-Boot proper building (CONFIG_SPL_BUILD is not defined), and by
> CONFIG_SPL_OF_CONTROL during SPL building (CONFIG_SPL_BUILD is
> defined).
>
> The macro can be used in C context as well, so you can also write the
> equivalent code as follows:
>
>   if (CONFIG_IS_ENABLED(OF_CONTROL)) {
>       (device tree code)
>   } else {
>       (board file code)
>   }
>
> Another useful macro is CONFIG_VALUE().
> CONFIG_VALUE(FOO) is expanded into CONFIG_FOO if CONFIG_SPL_BUILD is
> undefined, and into CONFIG_SPL_FOO if CONFIG_SPL_BUILD is defined.
>
> You can write as follows:
>
>   text_base = CONFIG_VALUE(TEXT_BASE);
>
> instead of:
>
>   #ifdef CONFIG_SPL_BUILD
>       text_base = CONFIG_SPL_TEXT_BASE;
>   #else
>       text_base = CONFIG_TEXT_BASE;
>   #endif
>
> This commit also adds slight hacking on fixdep so that it can
> output a correct list of fixed dependencies.
>
> If the fixdep finds CONFIG_IS_ENABLED(FOO) in a source file,
> we want
>     $(wildcard include/config/foo.h)
> in the U-boot proper building context, while we want
>     $(wildcard include/config/spl/foo.h)
> in the SPL build context.
>
> Signed-off-by: Masahiro Yamada <yamada.masahiro at socionext.com>
> Reviewed-by: Tom Rini <trini at konsulko.com>
> ---
>
> Changes in v2: None
>
>  include/linux/kconfig.h | 48 ++++++++++++++++++++++++++++++++++++++++++++++++
>  scripts/basic/fixdep.c  | 26 ++++++++++++++++++++++++++
>  2 files changed, 74 insertions(+)

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


More information about the U-Boot mailing list