[PATCH v5 05/13] kconfig: Add support for conditional values
Tom Rini
trini at konsulko.com
Wed Feb 9 17:37:53 CET 2022
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 <sjg at chromium.org>
Applied to u-boot/master, thanks!
--
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 659 bytes
Desc: not available
URL: <https://lists.denx.de/pipermail/u-boot/attachments/20220209/ec416b91/attachment.sig>
More information about the U-Boot
mailing list