Skip to content
  • Masahiro Yamada's avatar
    kbuild: improve Kbuild speed · 026f9cf2
    Masahiro Yamada authored and Tom Rini's avatar Tom Rini committed
    
    
    Kbuild brought about many advantages for us but a significant
    performance regression was reported by Simon Glass.
    
    After some discussions and analysis, it turned out
    its main cause is in $(call cc-option,...).
    
    Historically, U-Boot parses all config.mk
    (arch/*/config.mk and board/*/config.mk)
    every time descending into subdirectories.
    That means cc-options are evaluated over and over again.
    
    $(call cc-option,...) is useful but costly.
    So we want to evaluate them only in ./Makefile
    and spl/Makefile and export compiler flags.
    
    This commit changes the build system as follows:
    
      - Modify scripts/Makefile.build to not include config.mk
        Instead, add $(PLATFORM_CPPFLAGS) to asflags-y, ccflags-y,
        cppflags-y.
    
      - Export many variables
        Going forward, Kbuild will not parse config.mk files
        when it descends into subdirectories.
        If we want to set variables in config.mk and use them
        in subdirectories, they must be exported.
    
        This is the list of variables to get exported:
          PLATFORM_CPPFLAGS
          CPUDIR
          BOARDDIR
          OBJCOPYFLAGS
          LDFLAGS
          LDFLAGS_FINAL
            (used in nand_spl/board/*/*/Makefile)
          CONFIG_STANDALONE_LOAD_ADDR
            (used in examples/standalone/Makefile)
          SYM_PREFIX
            (used in examples/standalone/Makefile)
          RELFLAGS
            (used in examples/standalone/Makefile)
    
      - Delete CPPFLAGS
        This variable has been replaced with PLATFORM_CPPFLAGS
    
      - Copy gcclibdir from example/standalone/Makefile
        to arch/sparc/config.mk
        The reference in CONFIG_STANDALONE_LOAD_ADDR must be
        resolved before it is exported.
    
    Signed-off-by: default avatarMasahiro Yamada <yamada.m@jp.panasonic.com>
    Reported-by: Simon Glass's avatarSimon Glass <sjg@chromium.org>
    Acked-by: Simon Glass's avatarSimon Glass <sjg@chromium.org>
    Tested-by: Simon Glass <sjg@chromium.org> [on Sandbox]
    Tested-by: Stephen Warren <swarren@nvidia.com> [on Tegra]
    026f9cf2