[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