gcc: enable zstd compression of LTO bytecode

Message ID 20220203172619.1299363-1-enrico.scholz@sigma-chemnitz.de
State New
Headers show
Series gcc: enable zstd compression of LTO bytecode | expand

Commit Message

Enrico Scholz Feb. 3, 2022, 5:26 p.m. UTC
gcc-10+ supports zstd compression of LTO bytecode.  Install the
corresponding package to enable this feature in a deterministic way.

NOTE: previously built LTO object files (without this compression)
must be regenerated; gcc will fail else with

  | lto1: internal compiler error: original not compressed with zstd

in this case.

NOTE: it seems to be possible that zstd support is enabled non
deterministically (perhaps by host system pollution).

I had the problem that the SDK gcc was built with zstd while the
cross gcc was built without it.  Libraries (built by cross gcc and
uncompressed hence) could not be used with the SDK gcc.

Signed-off-by: Enrico Scholz <enrico.scholz@sigma-chemnitz.de>
---
 meta/recipes-devtools/gcc/gcc-11.2.inc | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Khem Raj Feb. 3, 2022, 7:23 p.m. UTC | #1
On Thu, Feb 3, 2022 at 9:26 AM Enrico Scholz via
lists.openembedded.org
<enrico.scholz=sigma-chemnitz.de@lists.openembedded.org> wrote:
>
> gcc-10+ supports zstd compression of LTO bytecode.  Install the
> corresponding package to enable this feature in a deterministic way.
>
> NOTE: previously built LTO object files (without this compression)
> must be regenerated; gcc will fail else with
>
>   | lto1: internal compiler error: original not compressed with zstd
>
> in this case.
>
> NOTE: it seems to be possible that zstd support is enabled non
> deterministically (perhaps by host system pollution).
>
> I had the problem that the SDK gcc was built with zstd while the
> cross gcc was built without it.  Libraries (built by cross gcc and
> uncompressed hence) could not be used with the SDK gcc.
>

this means regenerating entire shared state isnt it ?

> Signed-off-by: Enrico Scholz <enrico.scholz@sigma-chemnitz.de>
> ---
>  meta/recipes-devtools/gcc/gcc-11.2.inc | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/meta/recipes-devtools/gcc/gcc-11.2.inc b/meta/recipes-devtools/gcc/gcc-11.2.inc
> index f07a5be507b3..62db035760aa 100644
> --- a/meta/recipes-devtools/gcc/gcc-11.2.inc
> +++ b/meta/recipes-devtools/gcc/gcc-11.2.inc
> @@ -11,7 +11,7 @@ BINV = "11.2.0"
>  FILESEXTRAPATHS =. "${FILE_DIRNAME}/gcc:${FILE_DIRNAME}/gcc/backport:"
>
>  DEPENDS =+ "mpfr gmp libmpc zlib flex-native"
> -NATIVEDEPS = "mpfr-native gmp-native libmpc-native zlib-native flex-native"
> +NATIVEDEPS = "mpfr-native gmp-native libmpc-native zlib-native flex-native zstd-native"
>
>  LICENSE = "GPL-3.0-with-GCC-exception & GPLv3"
>
> --
> 2.34.1
>
>
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#161292): https://lists.openembedded.org/g/openembedded-core/message/161292
> Mute This Topic: https://lists.openembedded.org/mt/88888010/1997914
> Group Owner: openembedded-core+owner@lists.openembedded.org
> Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [raj.khem@gmail.com]
> -=-=-=-=-=-=-=-=-=-=-=-
>
Enrico Scholz Feb. 3, 2022, 9:40 p.m. UTC | #2
Khem Raj <raj.khem@gmail.com> writes:

>> gcc-10+ supports zstd compression of LTO bytecode.  Install the
>> corresponding package to enable this feature in a deterministic way.
>>
>> NOTE: previously built LTO object files (without this compression)
>> must be regenerated; gcc will fail else with
>>
>>   | lto1: internal compiler error: original not compressed with zstd
>>
>> in this case.
>>
>> NOTE: it seems to be possible that zstd support is enabled non
>> deterministically (perhaps by host system pollution).
>>
>> I had the problem that the SDK gcc was built with zstd while the
>> cross gcc was built without it.  Libraries (built by cross gcc and
>> uncompressed hence) could not be used with the SDK gcc.
>
> this means regenerating entire shared state isnt it ?

yes (at least when lto.inc is used (which is *not* by default)).  When a
bad sstate really matters for 'master', perhaps there can be wait for a
change in glibc or so before applying this patch.

Or do you think that adding a DISTRO_FEATURE like 'lto-zstd' would make
sense?  When this flag is missing, '--without-zstd' must be added to
EXTRA_OECONF.  Also some early [vardeps] must be set (where?) to avoid
the sstate problem.

Globally enabling 'zstd' appears easier because drawbacks (costs for
compression + decompression) should be negligible for zstd.



Enrico
Khem Raj Feb. 3, 2022, 9:48 p.m. UTC | #3
On Thu, Feb 3, 2022 at 1:40 PM Enrico Scholz
<enrico.scholz@sigma-chemnitz.de> wrote:
>
> Khem Raj <raj.khem@gmail.com> writes:
>
> >> gcc-10+ supports zstd compression of LTO bytecode.  Install the
> >> corresponding package to enable this feature in a deterministic way.
> >>
> >> NOTE: previously built LTO object files (without this compression)
> >> must be regenerated; gcc will fail else with
> >>
> >>   | lto1: internal compiler error: original not compressed with zstd
> >>
> >> in this case.
> >>
> >> NOTE: it seems to be possible that zstd support is enabled non
> >> deterministically (perhaps by host system pollution).
> >>
> >> I had the problem that the SDK gcc was built with zstd while the
> >> cross gcc was built without it.  Libraries (built by cross gcc and
> >> uncompressed hence) could not be used with the SDK gcc.
> >
> > this means regenerating entire shared state isnt it ?
>
> yes (at least when lto.inc is used (which is *not* by default)).  When a
> bad sstate really matters for 'master', perhaps there can be wait for a
> change in glibc or so before applying this patch.
>
> Or do you think that adding a DISTRO_FEATURE like 'lto-zstd' would make
> sense?  When this flag is missing, '--without-zstd' must be added to
> EXTRA_OECONF.  Also some early [vardeps] must be set (where?) to avoid
> the sstate problem.
>
> Globally enabling 'zstd' appears easier because drawbacks (costs for
> compression + decompression) should be negligible for zstd.

I think switching to zstd is fine.

>
>
>
> Enrico
Richard Purdie Feb. 3, 2022, 9:59 p.m. UTC | #4
On Thu, 2022-02-03 at 18:26 +0100, Enrico Scholz via lists.openembedded.org
wrote:
> gcc-10+ supports zstd compression of LTO bytecode.  Install the
> corresponding package to enable this feature in a deterministic way.
> 
> NOTE: previously built LTO object files (without this compression)
> must be regenerated; gcc will fail else with
> 
>   | lto1: internal compiler error: original not compressed with zstd
> 
> in this case.
> 
> NOTE: it seems to be possible that zstd support is enabled non
> deterministically (perhaps by host system pollution).
> 
> I had the problem that the SDK gcc was built with zstd while the
> cross gcc was built without it.  Libraries (built by cross gcc and
> uncompressed hence) could not be used with the SDK gcc.
> 
> Signed-off-by: Enrico Scholz <enrico.scholz@sigma-chemnitz.de>
> ---
>  meta/recipes-devtools/gcc/gcc-11.2.inc | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/meta/recipes-devtools/gcc/gcc-11.2.inc b/meta/recipes-devtools/gcc/gcc-11.2.inc
> index f07a5be507b3..62db035760aa 100644
> --- a/meta/recipes-devtools/gcc/gcc-11.2.inc
> +++ b/meta/recipes-devtools/gcc/gcc-11.2.inc
> @@ -11,7 +11,7 @@ BINV = "11.2.0"
>  FILESEXTRAPATHS =. "${FILE_DIRNAME}/gcc:${FILE_DIRNAME}/gcc/backport:"
>  
>  DEPENDS =+ "mpfr gmp libmpc zlib flex-native"
> -NATIVEDEPS = "mpfr-native gmp-native libmpc-native zlib-native flex-native"
> +NATIVEDEPS = "mpfr-native gmp-native libmpc-native zlib-native flex-native zstd-native"
>  
>  LICENSE = "GPL-3.0-with-GCC-exception & GPLv3"
>  

Should we be passing some flag to gcc explicitly to configure this
deterministicly?

Cheers,

Richard
Khem Raj Feb. 3, 2022, 10:11 p.m. UTC | #5
On Thu, Feb 3, 2022 at 1:59 PM Richard Purdie <
richard.purdie@linuxfoundation.org> wrote:

> On Thu, 2022-02-03 at 18:26 +0100, Enrico Scholz via
> lists.openembedded.org
> wrote:
> > gcc-10+ supports zstd compression of LTO bytecode.  Install the
> > corresponding package to enable this feature in a deterministic way.
> >
> > NOTE: previously built LTO object files (without this compression)
> > must be regenerated; gcc will fail else with
> >
> >   | lto1: internal compiler error: original not compressed with zstd
> >
> > in this case.
> >
> > NOTE: it seems to be possible that zstd support is enabled non
> > deterministically (perhaps by host system pollution).
> >
> > I had the problem that the SDK gcc was built with zstd while the
> > cross gcc was built without it.  Libraries (built by cross gcc and
> > uncompressed hence) could not be used with the SDK gcc.
> >
> > Signed-off-by: Enrico Scholz <enrico.scholz@sigma-chemnitz.de>
> > ---
> >  meta/recipes-devtools/gcc/gcc-11.2.inc | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/meta/recipes-devtools/gcc/gcc-11.2.inc
> b/meta/recipes-devtools/gcc/gcc-11.2.inc
> > index f07a5be507b3..62db035760aa 100644
> > --- a/meta/recipes-devtools/gcc/gcc-11.2.inc
> > +++ b/meta/recipes-devtools/gcc/gcc-11.2.inc
> > @@ -11,7 +11,7 @@ BINV = "11.2.0"
> >  FILESEXTRAPATHS =. "${FILE_DIRNAME}/gcc:${FILE_DIRNAME}/gcc/backport:"
> >
> >  DEPENDS =+ "mpfr gmp libmpc zlib flex-native"
> > -NATIVEDEPS = "mpfr-native gmp-native libmpc-native zlib-native
> flex-native"
> > +NATIVEDEPS = "mpfr-native gmp-native libmpc-native zlib-native
> flex-native zstd-native"
> >
> >  LICENSE = "GPL-3.0-with-GCC-exception & GPLv3"
> >
>
> Should we be passing some flag to gcc explicitly to configure this
> deterministicly?


Perhaps use —with-zstd configure switch maybe via package config but it’s
better to enable it always

>
>
> Cheers,
>
> Richard
>
>
>
>
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#161323):
> https://lists.openembedded.org/g/openembedded-core/message/161323
> Mute This Topic: https://lists.openembedded.org/mt/88888010/1997914
> Group Owner: openembedded-core+owner@lists.openembedded.org
> Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [
> raj.khem@gmail.com]
> -=-=-=-=-=-=-=-=-=-=-=-
>
>
Richard Purdie Feb. 3, 2022, 10:21 p.m. UTC | #6
On Thu, 2022-02-03 at 14:11 -0800, Khem Raj wrote:
> 
> 
> On Thu, Feb 3, 2022 at 1:59 PM Richard Purdie
> <richard.purdie@linuxfoundation.org> wrote:
> > On Thu, 2022-02-03 at 18:26 +0100, Enrico Scholz via lists.openembedded.org
> > wrote:
> > > gcc-10+ supports zstd compression of LTO bytecode.  Install the
> > > corresponding package to enable this feature in a deterministic way.
> > > 
> > > NOTE: previously built LTO object files (without this compression)
> > > must be regenerated; gcc will fail else with
> > > 
> > >    | lto1: internal compiler error: original not compressed with zstd
> > > 
> > > in this case.
> > > 
> > > NOTE: it seems to be possible that zstd support is enabled non
> > > deterministically (perhaps by host system pollution).
> > > 
> > > I had the problem that the SDK gcc was built with zstd while the
> > > cross gcc was built without it.  Libraries (built by cross gcc and
> > > uncompressed hence) could not be used with the SDK gcc.
> > > 
> > > Signed-off-by: Enrico Scholz <enrico.scholz@sigma-chemnitz.de>
> > > ---
> > >   meta/recipes-devtools/gcc/gcc-11.2.inc | 2 +-
> > >   1 file changed, 1 insertion(+), 1 deletion(-)
> > > 
> > > diff --git a/meta/recipes-devtools/gcc/gcc-11.2.inc b/meta/recipes-
> > devtools/gcc/gcc-11.2.inc
> > > index f07a5be507b3..62db035760aa 100644
> > > --- a/meta/recipes-devtools/gcc/gcc-11.2.inc
> > > +++ b/meta/recipes-devtools/gcc/gcc-11.2.inc
> > > @@ -11,7 +11,7 @@ BINV = "11.2.0"
> > >   FILESEXTRAPATHS =. "${FILE_DIRNAME}/gcc:${FILE_DIRNAME}/gcc/backport:"
> > >   
> > >   DEPENDS =+ "mpfr gmp libmpc zlib flex-native"
> > > -NATIVEDEPS = "mpfr-native gmp-native libmpc-native zlib-native flex-
> > > native"
> > > +NATIVEDEPS = "mpfr-native gmp-native libmpc-native zlib-native flex-
> > > native
> > zstd-native"
> > >   
> > >   LICENSE = "GPL-3.0-with-GCC-exception & GPLv3"
> > >   
> > 
> > Should we be passing some flag to gcc explicitly to configure this
> > deterministicly?
> > 
> 
> 
> Perhaps use —with-zstd configure switch maybe via package config but it’s
> better to enable it always 
> 

Agreed, I'm fine with enabling it, I'd just like to be explicit about what we're
doing.

Cheers,

Richard
Enrico Scholz Feb. 4, 2022, 7 p.m. UTC | #7
Richard Purdie <richard.purdie@linuxfoundation.org> writes:

>>   | lto1: internal compiler error: original not compressed with zstd
>>
>>  DEPENDS =+ "mpfr gmp libmpc zlib flex-native"
>> -NATIVEDEPS = "mpfr-native gmp-native libmpc-native zlib-native flex-native"
>> +NATIVEDEPS = "mpfr-native gmp-native libmpc-native zlib-native flex-native zstd-native"
>>  
>>  LICENSE = "GPL-3.0-with-GCC-exception & GPLv3"
>>  
>
> Should we be passing some flag to gcc explicitly to configure this
> deterministicly?

Both '--with-zstd' and '--without-zstd' make it deterministic (require
zstd.h and abort when non-existing resp. ignore it when existing).

Perhaps '--without-zstd' should be added in the hardknott and honister
branches to prevent pollution by host environment.



Enrico
Khem Raj Feb. 4, 2022, 9 p.m. UTC | #8
On Fri, Feb 4, 2022 at 11:00 AM Enrico Scholz via
lists.openembedded.org
<enrico.scholz=sigma-chemnitz.de@lists.openembedded.org> wrote:
>
> Richard Purdie <richard.purdie@linuxfoundation.org> writes:
>
> >>   | lto1: internal compiler error: original not compressed with zstd
> >>
> >>  DEPENDS =+ "mpfr gmp libmpc zlib flex-native"
> >> -NATIVEDEPS = "mpfr-native gmp-native libmpc-native zlib-native flex-native"
> >> +NATIVEDEPS = "mpfr-native gmp-native libmpc-native zlib-native flex-native zstd-native"
> >>
> >>  LICENSE = "GPL-3.0-with-GCC-exception & GPLv3"
> >>
> >
> > Should we be passing some flag to gcc explicitly to configure this
> > deterministicly?
>
> Both '--with-zstd' and '--without-zstd' make it deterministic (require
> zstd.h and abort when non-existing resp. ignore it when existing).
>
> Perhaps '--without-zstd' should be added in the hardknott and honister
> branches to prevent pollution by host environment.
>

yes makes sense.

>
>
> Enrico
>
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#161379): https://lists.openembedded.org/g/openembedded-core/message/161379
> Mute This Topic: https://lists.openembedded.org/mt/88888010/1997914
> Group Owner: openembedded-core+owner@lists.openembedded.org
> Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [raj.khem@gmail.com]
> -=-=-=-=-=-=-=-=-=-=-=-
>

Patch

diff --git a/meta/recipes-devtools/gcc/gcc-11.2.inc b/meta/recipes-devtools/gcc/gcc-11.2.inc
index f07a5be507b3..62db035760aa 100644
--- a/meta/recipes-devtools/gcc/gcc-11.2.inc
+++ b/meta/recipes-devtools/gcc/gcc-11.2.inc
@@ -11,7 +11,7 @@  BINV = "11.2.0"
 FILESEXTRAPATHS =. "${FILE_DIRNAME}/gcc:${FILE_DIRNAME}/gcc/backport:"
 
 DEPENDS =+ "mpfr gmp libmpc zlib flex-native"
-NATIVEDEPS = "mpfr-native gmp-native libmpc-native zlib-native flex-native"
+NATIVEDEPS = "mpfr-native gmp-native libmpc-native zlib-native flex-native zstd-native"
 
 LICENSE = "GPL-3.0-with-GCC-exception & GPLv3"