Skip to content
Snippets Groups Projects
  • Simon Glass's avatar
    097ff01f
    kconfig: Add support for conditional values · 097ff01f
    Simon Glass authored
    
    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: default avatarSimon Glass <sjg@chromium.org>
    097ff01f
    History
    kconfig: Add support for conditional values
    Simon Glass authored
    
    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: default avatarSimon Glass <sjg@chromium.org>