On Sat, Jan 22, 2022 at 05:07:26AM -0700, Simon Glass wrote:

> At present if an optional Kconfig value needs to be used it must be
> bracketed by #ifdef. For example, with this Kconfig setup:
> 
> config WIBBLE
>       bool "Support wibbles, the world needs more wibbles"
> 
> config WIBBLE_ADDR
>       hex "Address of the wibble"
>       depends on WIBBLE
> 
> then the following code must be used:
> 
>  #ifdef CONFIG_WIBBLE
>  static void handle_wibble(void)
>  {
>       int val = CONFIG_WIBBLE_ADDR;
> 
>       ...
>  }
>  #endif
> 
>  static void init_machine()
>  {
>  ...
>  #ifdef CONFIG_WIBBLE
>       handle_wibble();
>  #endif
>  }
> 
> Add a new IF_ENABLED_INT() to help with this. So now it is possible to
> write, without #ifdefs:
> 
>  static void handle_wibble(void)
>  {
>         int val = IF_ENABLED_INT(CONFIG_WIBBLE, CONFIG_WIBBLE_ADDR);
> 
>       ...
>  }
> 
>  static void init_machine()
>  {
>  ...
>  if (IS_ENABLED(CONFIG_WIBBLE))
>       handle_wibble();
>  }
> 
> The value will be CONFIG_WIBBLE_ADDR if CONFIG_WIBBLE is defined and will
> produce a build error if not.. This allows us to reduce the use of #ifdef
> in the code, ensuring that the compiler still checks the code even if it
> is not ultimately used for a particular build.
> 
> Add a CONFIG_IF_ENABLED_INT() version as well.
> 
> If an attempt is made to use a value that does not exist (i.e. when the
> conditional is not enabled), an error about a non-existing function is
> generated, e.g.:
> 
> common/bloblist.c:447: undefined reference to `invalid_use_of_IF_ENABLED_INT'
> 
> Signed-off-by: Simon Glass <s...@chromium.org>

Applied to u-boot/master, thanks!

-- 
Tom

Attachment: signature.asc
Description: PGP signature

Reply via email to