diff mbox

[1/1] binutils/gcc: make it possible to use lto

Message ID 1415534161-24389-1-git-send-email-syntheticpp@gmx.net
State Superseded
Headers show

Commit Message

Peter Kümmel Nov. 9, 2014, 11:56 a.m. UTC
When -flto is used the compiler and binutils have to support lto.
ar/ranlib needs to be called with the lto plugin, therefore use
the wrappers provided by GCC: *-gcc-ar and *-gcc-ranlib.

Signed-off-by: Peter Kümmel <syntheticpp@gmx.net>
---
 package/binutils/binutils.mk | 2 ++
 package/gcc/gcc.mk           | 2 ++
 2 files changed, 4 insertions(+)

Comments

Thomas Petazzoni Nov. 9, 2014, 1 p.m. UTC | #1
Dear Peter Kümmel,

On Sun,  9 Nov 2014 12:56:01 +0100, Peter Kümmel wrote:
> When -flto is used the compiler and binutils have to support lto.
> ar/ranlib needs to be called with the lto plugin, therefore use
> the wrappers provided by GCC: *-gcc-ar and *-gcc-ranlib.
> 
> Signed-off-by: Peter Kümmel <syntheticpp@gmx.net>
> ---
>  package/binutils/binutils.mk | 2 ++
>  package/gcc/gcc.mk           | 2 ++
>  2 files changed, 4 insertions(+)
> 
> diff --git a/package/binutils/binutils.mk b/package/binutils/binutils.mk
> index b8dab5d..e552abc 100644
> --- a/package/binutils/binutils.mk
> +++ b/package/binutils/binutils.mk
> @@ -48,6 +48,7 @@ BINUTILS_DISABLE_GDB_CONF_OPTS = \
>  BINUTILS_CONF_OPTS = --disable-multilib --disable-werror \
>  		--host=$(GNU_TARGET_NAME) \
>  		--target=$(GNU_TARGET_NAME) \
> +		--enable-plugins --enable-lto \
>  		--enable-install-libiberty \
>  		$(BINUTILS_DISABLE_GDB_CONF_OPTS) \
>  		$(BINUTILS_EXTRA_CONFIG_OPTIONS)
> @@ -67,6 +68,7 @@ endif
>  HOST_BINUTILS_CONF_OPTS = --disable-multilib --disable-werror \
>  			--target=$(GNU_TARGET_NAME) \
>  			--disable-shared --enable-static \
> +			--enable-plugins --enable-lto \
>  			--with-sysroot=$(STAGING_DIR) \
>  			$(BINUTILS_DISABLE_GDB_CONF_OPTS) \
>  			$(BINUTILS_EXTRA_CONFIG_OPTIONS)
> diff --git a/package/gcc/gcc.mk b/package/gcc/gcc.mk
> index cdd71aa..a8853f7 100644
> --- a/package/gcc/gcc.mk
> +++ b/package/gcc/gcc.mk
> @@ -92,6 +92,8 @@ HOST_GCC_COMMON_CONF_OPTS = \
>  	--with-gnu-ld \
>  	--disable-libssp \
>  	--disable-multilib \
> +	--enable-plugins \
> +	--enable-lto \
>  	--with-gmp=$(HOST_DIR)/usr \
>  	--with-mpfr=$(HOST_DIR)/usr
>  

Should we make this optional?

Thomas
Peter Kümmel Nov. 9, 2014, 1:16 p.m. UTC | #2
> Gesendet: Sonntag, 09. November 2014 um 14:00 Uhr
> Von: "Thomas Petazzoni" <thomas.petazzoni@free-electrons.com>
> An: "Peter Kümmel" <syntheticpp@gmx.net>
> Cc: buildroot@buildroot.org
> Betreff: Re: [Buildroot] [PATCH 1/1] binutils/gcc: make it possible to use lto
>
> Dear Peter Kümmel,
> 
> On Sun,  9 Nov 2014 12:56:01 +0100, Peter Kümmel wrote:
> > When -flto is used the compiler and binutils have to support lto.
> > ar/ranlib needs to be called with the lto plugin, therefore use
> > the wrappers provided by GCC: *-gcc-ar and *-gcc-ranlib.
> > 
> > Signed-off-by: Peter Kümmel <syntheticpp@gmx.net>
> > ---
> >  package/binutils/binutils.mk | 2 ++
> >  package/gcc/gcc.mk           | 2 ++
> >  2 files changed, 4 insertions(+)
> > 
> > diff --git a/package/binutils/binutils.mk b/package/binutils/binutils.mk
> > index b8dab5d..e552abc 100644
> > --- a/package/binutils/binutils.mk
> > +++ b/package/binutils/binutils.mk
> > @@ -48,6 +48,7 @@ BINUTILS_DISABLE_GDB_CONF_OPTS = \
> >  BINUTILS_CONF_OPTS = --disable-multilib --disable-werror \
> >  		--host=$(GNU_TARGET_NAME) \
> >  		--target=$(GNU_TARGET_NAME) \
> > +		--enable-plugins --enable-lto \
> >  		--enable-install-libiberty \
> >  		$(BINUTILS_DISABLE_GDB_CONF_OPTS) \
> >  		$(BINUTILS_EXTRA_CONFIG_OPTIONS)
> > @@ -67,6 +68,7 @@ endif
> >  HOST_BINUTILS_CONF_OPTS = --disable-multilib --disable-werror \
> >  			--target=$(GNU_TARGET_NAME) \
> >  			--disable-shared --enable-static \
> > +			--enable-plugins --enable-lto \
> >  			--with-sysroot=$(STAGING_DIR) \
> >  			$(BINUTILS_DISABLE_GDB_CONF_OPTS) \
> >  			$(BINUTILS_EXTRA_CONFIG_OPTIONS)
> > diff --git a/package/gcc/gcc.mk b/package/gcc/gcc.mk
> > index cdd71aa..a8853f7 100644
> > --- a/package/gcc/gcc.mk
> > +++ b/package/gcc/gcc.mk
> > @@ -92,6 +92,8 @@ HOST_GCC_COMMON_CONF_OPTS = \
> >  	--with-gnu-ld \
> >  	--disable-libssp \
> >  	--disable-multilib \
> > +	--enable-plugins \
> > +	--enable-lto \
> >  	--with-gmp=$(HOST_DIR)/usr \
> >  	--with-mpfr=$(HOST_DIR)/usr
> >  
> 
> Should we make this optional?
> 

I've tested with binutils 2.24 and gcc 4.9.2.
Also binutils 2.22 configures with this flags.

So I think it doesn't hurt to enable by default,
at least when the buidroot compiler is used. Not
sure about very old external GCCs, which have no lto.

Peter



> Thomas
> -- 
> Thomas Petazzoni, CTO, Free Electrons
> Embedded Linux, Kernel and Android engineering
> http://free-electrons.com
>
Peter Kümmel Nov. 10, 2014, 9:28 a.m. UTC | #3
> Gesendet: Sonntag, 09. November 2014 um 14:00 Uhr
> Von: "Thomas Petazzoni" <thomas.petazzoni@free-electrons.com>
> An: "Peter Kümmel" <syntheticpp@gmx.net>
> Cc: buildroot@buildroot.org
> Betreff: Re: [Buildroot] [PATCH 1/1] binutils/gcc: make it possible to use lto
>
> Dear Peter Kümmel,
> 
> On Sun,  9 Nov 2014 12:56:01 +0100, Peter Kümmel wrote:
> > When -flto is used the compiler and binutils have to support lto.
> > ar/ranlib needs to be called with the lto plugin, therefore use
> > the wrappers provided by GCC: *-gcc-ar and *-gcc-ranlib.
> > 
> > Signed-off-by: Peter Kümmel <syntheticpp@gmx.net>
> > ---
> >  package/binutils/binutils.mk | 2 ++
> >  package/gcc/gcc.mk           | 2 ++
> >  2 files changed, 4 insertions(+)
> > 
> > diff --git a/package/binutils/binutils.mk b/package/binutils/binutils.mk
> > index b8dab5d..e552abc 100644
> > --- a/package/binutils/binutils.mk
> > +++ b/package/binutils/binutils.mk
> > @@ -48,6 +48,7 @@ BINUTILS_DISABLE_GDB_CONF_OPTS = \
> >  BINUTILS_CONF_OPTS = --disable-multilib --disable-werror \
> >  		--host=$(GNU_TARGET_NAME) \
> >  		--target=$(GNU_TARGET_NAME) \
> > +		--enable-plugins --enable-lto \
> >  		--enable-install-libiberty \
> >  		$(BINUTILS_DISABLE_GDB_CONF_OPTS) \
> >  		$(BINUTILS_EXTRA_CONFIG_OPTIONS)
> > @@ -67,6 +68,7 @@ endif
> >  HOST_BINUTILS_CONF_OPTS = --disable-multilib --disable-werror \
> >  			--target=$(GNU_TARGET_NAME) \
> >  			--disable-shared --enable-static \
> > +			--enable-plugins --enable-lto \
> >  			--with-sysroot=$(STAGING_DIR) \
> >  			$(BINUTILS_DISABLE_GDB_CONF_OPTS) \
> >  			$(BINUTILS_EXTRA_CONFIG_OPTIONS)
> > diff --git a/package/gcc/gcc.mk b/package/gcc/gcc.mk
> > index cdd71aa..a8853f7 100644
> > --- a/package/gcc/gcc.mk
> > +++ b/package/gcc/gcc.mk
> > @@ -92,6 +92,8 @@ HOST_GCC_COMMON_CONF_OPTS = \
> >  	--with-gnu-ld \
> >  	--disable-libssp \
> >  	--disable-multilib \
> > +	--enable-plugins \
> > +	--enable-lto \
> >  	--with-gmp=$(HOST_DIR)/usr \
> >  	--with-mpfr=$(HOST_DIR)/usr
> >  
> 
> Should we make this optional?

Thought more about it: it is not necessary to make it optional.
Using --enable-plugins --enable-lto in binutils only allows using lto,
but when not used, it doesn't change anything. And these options are 
available in the binutils versions supported by buildroot.

Also all buildroot's builds of the GCC (>=4.7) support the lto flags,
and when -flto is not used nothing changed.

So in both cases optional support of lto is provided without changing
behavior when lto is not used.

Peter

> 
> Thomas
> -- 
> Thomas Petazzoni, CTO, Free Electrons
> Embedded Linux, Kernel and Android engineering
> http://free-electrons.com
>
Thomas Petazzoni Nov. 10, 2014, 9:45 a.m. UTC | #4
Dear Peter Kuemmel,

On Mon, 10 Nov 2014 10:28:18 +0100, Peter Kuemmel wrote:

> Thought more about it: it is not necessary to make it optional.
> Using --enable-plugins --enable-lto in binutils only allows using lto,
> but when not used, it doesn't change anything. And these options are 
> available in the binutils versions supported by buildroot.
> 
> Also all buildroot's builds of the GCC (>=4.7) support the lto flags,
> and when -flto is not used nothing changed.
> 
> So in both cases optional support of lto is provided without changing
> behavior when lto is not used.

Ok. What about older versions of gcc/binutils, such as gcc 4.2, gcc
4.5, or binutils 2.18. We still support gcc 4.2 and binutils 2.18 for
the AVR32 architecture (even though it's marked deprecated, we still
haven't removed the support for this arch). We still have gcc 4.5 as
the default for Blackfin.

I guess some of those older versions don't support LTO, so maybe a
Config.in knob BR2_GCC_SUPPORTS_LTO will be needed, and ditto for
binutils.

Best regards,

Thomas
diff mbox

Patch

diff --git a/package/binutils/binutils.mk b/package/binutils/binutils.mk
index b8dab5d..e552abc 100644
--- a/package/binutils/binutils.mk
+++ b/package/binutils/binutils.mk
@@ -48,6 +48,7 @@  BINUTILS_DISABLE_GDB_CONF_OPTS = \
 BINUTILS_CONF_OPTS = --disable-multilib --disable-werror \
 		--host=$(GNU_TARGET_NAME) \
 		--target=$(GNU_TARGET_NAME) \
+		--enable-plugins --enable-lto \
 		--enable-install-libiberty \
 		$(BINUTILS_DISABLE_GDB_CONF_OPTS) \
 		$(BINUTILS_EXTRA_CONFIG_OPTIONS)
@@ -67,6 +68,7 @@  endif
 HOST_BINUTILS_CONF_OPTS = --disable-multilib --disable-werror \
 			--target=$(GNU_TARGET_NAME) \
 			--disable-shared --enable-static \
+			--enable-plugins --enable-lto \
 			--with-sysroot=$(STAGING_DIR) \
 			$(BINUTILS_DISABLE_GDB_CONF_OPTS) \
 			$(BINUTILS_EXTRA_CONFIG_OPTIONS)
diff --git a/package/gcc/gcc.mk b/package/gcc/gcc.mk
index cdd71aa..a8853f7 100644
--- a/package/gcc/gcc.mk
+++ b/package/gcc/gcc.mk
@@ -92,6 +92,8 @@  HOST_GCC_COMMON_CONF_OPTS = \
 	--with-gnu-ld \
 	--disable-libssp \
 	--disable-multilib \
+	--enable-plugins \
+	--enable-lto \
 	--with-gmp=$(HOST_DIR)/usr \
 	--with-mpfr=$(HOST_DIR)/usr