Skip to content
  • Masahiro Yamada's avatar
    linux/kconfig.h: add CPP macros useful for per-image config options · 8be60f06
    Masahiro Yamada authored
    
    
    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: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
    Reviewed-by: default avatarTom Rini <trini@konsulko.com>
    Reviewed-by: default avatarSimon Glass <sjg@chromium.org>
    8be60f06