[Buildroot] [PATCH 1/1] toolchain: add link-time-optimization support
Peter Kümmel
syntheticpp at gmx.net
Thu Mar 5 14:47:24 UTC 2015
This patch is an update of the reviewed patch:
http://patchwork.ozlabs.org/patch/423082
Hope it is enough to get committed.
BTW, how do I add comments in patchwork.
Am 04.03.2015 um 15:35 schrieb Peter Kümmel:
> GCC's link-time-optimization could be enabled by the flag '-flto'.
> With LTO enabled, ar and runlib must be called with an argument which
> triggers the usage of a LTO plugin.
> GCC provides wrappers for ar and ranlib which implicitly pass the LTO
> arguments to ar/ranlib. This way existing Makefiles don't need to be
> changed for LTO support when these wrappers around ar and ranlib are used.
> Also the LTO and plugin support must be enabled in the host's binutils.
>
> Signed-off-by: Peter Kümmel <syntheticpp at gmx.net>
> ---
> package/binutils/binutils.mk | 4 ++++
> package/gcc/Config.in.host | 7 +++++++
> package/gcc/gcc.mk | 4 ++++
> toolchain/toolchain-external/toolchain-external.mk | 8 ++++++++
> 4 files changed, 23 insertions(+)
>
> diff --git a/package/binutils/binutils.mk b/package/binutils/binutils.mk
> index 9e99253..daa8c45 100644
> --- a/package/binutils/binutils.mk
> +++ b/package/binutils/binutils.mk
> @@ -96,5 +96,9 @@ BINUTILS_PRE_PATCH_HOOKS += BINUTILS_XTENSA_PRE_PATCH
> HOST_BINUTILS_PRE_PATCH_HOOKS += BINUTILS_XTENSA_PRE_PATCH
> endif
>
> +ifeq ($(BR2_GCC_ENABLE_LTO),y)
> +HOST_BINUTILS_CONF_OPTS += --enable-plugins --enable-lto
> +endif
> +
> $(eval $(autotools-package))
> $(eval $(host-autotools-package))
> diff --git a/package/gcc/Config.in.host b/package/gcc/Config.in.host
> index dd61f51..3c83579 100644
> --- a/package/gcc/Config.in.host
> +++ b/package/gcc/Config.in.host
> @@ -116,6 +116,13 @@ config BR2_GCC_ENABLE_TLS
> Enable the compiler to generate code for accessing
> thread local storage variables
>
> +config BR2_GCC_ENABLE_LTO
> + bool "Enable compiler link-time-optimization support"
> + depends on !BR2_GCC_VERSION_4_2_2_AVR32_2_1_5
> + help
> + Since version 4.5 GCC supports lto. Build GCC with lto support enabled.
> + Needed when -flto should be used.
> +
> config BR2_GCC_ENABLE_OPENMP
> bool "Enable compiler OpenMP support"
> depends on !BR2_PTHREADS_NONE && !BR2_arc && !BR2_microblaze
> diff --git a/package/gcc/gcc.mk b/package/gcc/gcc.mk
> index ffac15c..b5d2ddb 100644
> --- a/package/gcc/gcc.mk
> +++ b/package/gcc/gcc.mk
> @@ -132,6 +132,10 @@ else
> HOST_GCC_COMMON_CONF_OPTS += --disable-tls
> endif
>
> +ifeq ($(BR2_GCC_ENABLE_LTO),y)
> +HOST_GCC_COMMON_CONF_OPTS += --enable-plugins --enable-lto
> +endif
> +
> ifeq ($(BR2_GCC_ENABLE_LIBMUDFLAP),y)
> HOST_GCC_COMMON_CONF_OPTS += --enable-libmudflap
> else
> diff --git a/toolchain/toolchain-external/toolchain-external.mk b/toolchain/toolchain-external/toolchain-external.mk
> index ab73f9a..d7a8499 100644
> --- a/toolchain/toolchain-external/toolchain-external.mk
> +++ b/toolchain/toolchain-external/toolchain-external.mk
> @@ -656,12 +656,20 @@ endif
> # Build toolchain wrapper for preprocessor, C and C++ compiler and setup
> # symlinks for everything else. Skip gdb symlink when we are building our
> # own gdb to prevent two gdb's in output/host/usr/bin.
> +# When the link-time-optimazation flag '-flto' is used, then the compiler
> +# and binutils have to support lto. ar/ranlib needs to be called with the
> +# lto plugin. The wrappers *-gcc-ar and *-gcc-ranlib provided by GCC could
> +# be used as drop-ins for ar/runlib when Makefiles are used which do not
> +# pass the lto arguments.
> define TOOLCHAIN_EXTERNAL_INSTALL_WRAPPER
> $(Q)$(call MESSAGE,"Building ext-toolchain wrapper")
> mkdir -p $(HOST_DIR)/usr/bin; cd $(HOST_DIR)/usr/bin; \
> for i in $(TOOLCHAIN_EXTERNAL_CROSS)*; do \
> base=$${i##*/}; \
> case "$$base" in \
> + *-ar|*-ranlib|*-nm) \
> + ln -sf $$(echo $$i | sed 's%^$(HOST_DIR)%../..%') .; \
> + ;; \
> *cc|*cc-*|*++|*++-*|*cpp) \
> ln -sf ext-toolchain-wrapper $$base; \
> ;; \
>
More information about the buildroot
mailing list