u-boot/scripts
Masahiro Yamada 026f9cf24f kbuild: improve Kbuild speed
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: Masahiro Yamada <yamada.m@jp.panasonic.com>
Reported-by: Simon Glass <sjg@chromium.org>
Acked-by: Simon Glass <sjg@chromium.org>
Tested-by: Simon Glass <sjg@chromium.org> [on Sandbox]
Tested-by: Stephen Warren <swarren@nvidia.com> [on Tegra]
2014-03-07 10:59:06 -05:00
..
basic kbuild: import more build scripts from Linux v3.13 tag 2014-02-19 11:07:50 -05:00
.gitignore kernel-doc: move kernel-doc tools to scripts/ 2014-02-19 11:10:04 -05:00
binutils-version.sh Makefile: Move some scripts imported from Linux 2013-12-13 09:18:45 -05:00
checkpatch.pl scripts: update checkpatch.pl to latest upstream version 2014-03-04 12:15:30 -05:00
checkstack.pl Makefile: Move some scripts imported from Linux 2013-12-13 09:18:45 -05:00
cleanpatch Makefile: Move some scripts imported from Linux 2013-12-13 09:18:45 -05:00
docproc.c kernel-doc: update kernel-doc related files to Linux v3.13 2014-02-19 11:10:04 -05:00
dtc-version.sh Makefile: Move some scripts imported from Linux 2013-12-13 09:18:45 -05:00
gcc-stack-usage.sh Makefile: add a new script to check -fstack-usage support 2014-02-25 07:51:08 -05:00
gcc-version.sh Makefile: Move some scripts imported from Linux 2013-12-13 09:18:45 -05:00
Kbuild.include kbuild: Do not generate .*.su files at the top directory 2014-02-19 11:10:04 -05:00
kernel-doc kbuild: consolidate version and timestamp headers generation 2014-02-25 11:01:28 -05:00
Makefile kernel-doc: move kernel-doc tools to scripts/ 2014-02-19 11:10:04 -05:00
Makefile.build kbuild: improve Kbuild speed 2014-03-07 10:59:06 -05:00
Makefile.clean kbuild: use scripts/Makefile.clean 2014-02-19 11:10:04 -05:00
Makefile.host kbuild: import more build scripts from Linux v3.13 tag 2014-02-19 11:07:50 -05:00
Makefile.lib kbuild: improve Kbuild speed 2014-03-07 10:59:06 -05:00
mkmakefile kbuild: import more build scripts from Linux v3.13 tag 2014-02-19 11:07:50 -05:00
setlocalversion Makefile: Move some scripts imported from Linux 2013-12-13 09:18:45 -05:00