• Masahiro Yamada's avatar
    kbuild: add a makefile macro useful with per-image config options · 04a5c406
    Masahiro Yamada authored
    Commit e02ee254 ("kconfig: switch to single .config
    configuration") made the configuration itself pretty simple,
    instead, we lost the way to systematically enable/disable config
    options for each image independently.
    
    Our current strategy is, put entries into Makefile.spl for options
    we need separate enabling, or once enable the options globally in
    Kconfig and then undef them in Makefile.uncmd_spl if we do not want
    to compile the features for SPL at all.  Things are getting really
    messy.  Besides, "ifdef CONFIG_SPL_BUILD" are sprinkled everywhere
    in makefiles.
    
    This commit adds a variable to help describe makefile simpler.
    
    $(SPL_) evaluates to "SPL_" during the SPL build, while to an empty
    string during building U-boot proper.
    
    So, you can write
    
      obj-$(CONFIG_$(SPL_)FOO) += foo.o
    
    instead of
    
      ifdef CONFIG_SPL_BUILD
      obj-$(CONFIG_SPL_FOO) += foo.o
      else
      obj-$(CONFIG_FOO) += foo.o
      endif
    
    If CONFIG_SPL_FOO does not exist in Kconfig, it is equivalent to
    
      ifndef CONFIG_SPL_BUILD
      obj-$(CONFIG_SPL_FOO) += foo.o
      endif
    
    This is the pattern we often see in our current makefiles.
    
    To take advantage of this macro, we should prefix SPL_ for the SPL
    version of the option when we need independent control between
    U-boot and SPL.  With this naming scheme, I hope our makefiles will
    be much simplified.
    
    It means we want to rename existing config options as follows
    in the long run:
    
      CONFIG_SPL_SERIAL_SUPPORT     -> CONFIG_SPL_SERIAL
      CONFIG_SPL_I2C_SUPPORT        -> CONFIG_SPL_I2C
      CONFIG_SPL_GPIO_SUPPORT       -> CONFIG_SPL_GPIO
      CONFIG_SPL_SPI_SUPPORT        -> CONFIG_SPL_SPI
      CONFIG_SPL_DISABLE_OF_CONTROL -> CONFIG_SPL_OF_CONTROL
                                          (inverting the logic)
    
    Then drivers/Makefile would be re-worked as follows:
    
      obj-$(CONFIG_$(SPL_)SERIAL)  += serial/
      obj-$(CONFIG_$(SPL_)I2C)     += i2c/
      obj-$(CONFIG_$(SPL_)GPIO)    += gpio/
      obj-$(CONFIG_$(SPL_)SPI)     += spi/
         ...
    
    Eventually, SPL-specialized entries in Makefile.spl would go away.
    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>
    04a5c406
Kbuild.include 11.2 KB