Message ID | 20240722053459.2462155-1-denis@denix.org |
---|---|
State | Accepted, archived |
Commit | 350ff7d53f7506de2bc01f0efc569b8294b9afea |
Headers | show |
Series | [v3,1/2] gcc: remove paths to sysroot from configargs.h and checksum-options for gcc-cross-canadian | expand |
On Mon, 2024-07-22 at 01:34 -0400, Denys Dmytriyenko via lists.openembedded.org wrote: > From: Oleksandr Hnatiuk <ohnatiuk@cisco.com> > > Apply fixes from gcc-cross (84a78f46d594 and 0ead8cbdfb96) to gcc-cross-canadian. > This will improve (but not fix) reproducibility of gcc-cross-canadian. > Also move this code to functions to avoid code duplication. > > Signed-off-by: Oleksandr Hnatiuk <ohnatiuk@cisco.com> > Signed-off-by: Denys Dmytriyenko <denys@konsulko.com> > --- > v3 - add common functions to gcc-common.inc instead of gcc-configure-common.h > > meta/recipes-devtools/gcc/gcc-common.inc | 19 +++++++++++++++++++ > .../gcc/gcc-configure-common.inc | 1 - > .../gcc/gcc-cross-canadian.inc | 3 +++ > meta/recipes-devtools/gcc/gcc-cross.inc | 15 ++------------- > meta/recipes-devtools/gcc/gcc-target.inc | 16 ++-------------- > 5 files changed, 26 insertions(+), 28 deletions(-) I ran a test build with this series and there is still a reproducibility issue: https://autobuilder.yoctoproject.org/typhoon/#/builders/117/builds/5097 http://autobuilder.yocto.io/pub/repro-fail/oe-reproducible-20240722-tr5vb5sa/packages/ the key difference appearing to start in gcc-src. Cheers, Richard
On Mon, Jul 22, 2024 at 09:51:51PM +0100, Richard Purdie wrote: > On Mon, 2024-07-22 at 01:34 -0400, Denys Dmytriyenko via lists.openembedded.org wrote: > > From: Oleksandr Hnatiuk <ohnatiuk@cisco.com> > > > > Apply fixes from gcc-cross (84a78f46d594 and 0ead8cbdfb96) to gcc-cross-canadian. > > This will improve (but not fix) reproducibility of gcc-cross-canadian. > > Also move this code to functions to avoid code duplication. > > > > Signed-off-by: Oleksandr Hnatiuk <ohnatiuk@cisco.com> > > Signed-off-by: Denys Dmytriyenko <denys@konsulko.com> > > --- > > v3 - add common functions to gcc-common.inc instead of gcc-configure-common.h > > > > meta/recipes-devtools/gcc/gcc-common.inc | 19 +++++++++++++++++++ > > .../gcc/gcc-configure-common.inc | 1 - > > .../gcc/gcc-cross-canadian.inc | 3 +++ > > meta/recipes-devtools/gcc/gcc-cross.inc | 15 ++------------- > > meta/recipes-devtools/gcc/gcc-target.inc | 16 ++-------------- > > 5 files changed, 26 insertions(+), 28 deletions(-) > > I ran a test build with this series and there is still a reproducibility issue: > > https://autobuilder.yoctoproject.org/typhoon/#/builders/117/builds/5097 > > http://autobuilder.yocto.io/pub/repro-fail/oe-reproducible-20240722-tr5vb5sa/packages/ > > the key difference appearing to start in gcc-src. Thanks. What's the simplest way to reproduce it locally?
On Mon, 2024-07-22 at 17:18 -0400, Denys Dmytriyenko wrote: > On Mon, Jul 22, 2024 at 09:51:51PM +0100, Richard Purdie wrote: > > On Mon, 2024-07-22 at 01:34 -0400, Denys Dmytriyenko via > > lists.openembedded.org wrote: > > > From: Oleksandr Hnatiuk <ohnatiuk@cisco.com> > > > > > > Apply fixes from gcc-cross (84a78f46d594 and 0ead8cbdfb96) to > > > gcc-cross-canadian. > > > This will improve (but not fix) reproducibility of gcc-cross- > > > canadian. > > > Also move this code to functions to avoid code duplication. > > > > > > Signed-off-by: Oleksandr Hnatiuk <ohnatiuk@cisco.com> > > > Signed-off-by: Denys Dmytriyenko <denys@konsulko.com> > > > --- > > > v3 - add common functions to gcc-common.inc instead of gcc- > > > configure-common.h > > > > > > meta/recipes-devtools/gcc/gcc-common.inc | 19 > > > +++++++++++++++++++ > > > .../gcc/gcc-configure-common.inc | 1 - > > > .../gcc/gcc-cross-canadian.inc | 3 +++ > > > meta/recipes-devtools/gcc/gcc-cross.inc | 15 ++----------- > > > -- > > > meta/recipes-devtools/gcc/gcc-target.inc | 16 ++----------- > > > --- > > > 5 files changed, 26 insertions(+), 28 deletions(-) > > > > I ran a test build with this series and there is still a > > reproducibility issue: > > > > https://autobuilder.yoctoproject.org/typhoon/#/builders/117/builds/5097 > > > > http://autobuilder.yocto.io/pub/repro-fail/oe-reproducible-20240722-tr5vb5sa/packages/ > > > > the key difference appearing to start in gcc-src. > > Thanks. What's the simplest way to reproduce it locally? Build the affected recipes in two different build paths and compare the packages in question. You could narrow down the selftest to that recipe and then "oe-selftest -r reproducible.ReproducibleTests.test_reproducible_builds" too. Change targets in meta/lib/oeqa/selftest/cases/reproducible.py to be the recipe in question rather than the default of: 'core-image-minimal', 'core-image-sato', 'core-image-full-cmdline', 'core-image-weston', 'world', 'virtual/librpc', 'virtual/libsdl2', 'virtual/crypt' to narrow it down and make it faster. You can likely use most things from sstate too rather than rebuilding most of one of the builds. Cheers, Richard
diff --git a/meta/recipes-devtools/gcc/gcc-common.inc b/meta/recipes-devtools/gcc/gcc-common.inc index 5ac82b1b57..507b257e1f 100644 --- a/meta/recipes-devtools/gcc/gcc-common.inc +++ b/meta/recipes-devtools/gcc/gcc-common.inc @@ -116,3 +116,22 @@ target_prefix ?= "${prefix}" # The real WORKDIR location isn't a dependency for the shared workdir. src_patches[vardepsexclude] = "WORKDIR" should_apply[vardepsexclude] += "PN" + +remove_sysroot_paths_from_configargs () { + # Prevent sysroot path from being used in configargs.h header, as it will + # be rewritten when used by other sysroots preventing support for gcc + # plugins. Additionally the path is embeddeded into the output binary, this + # prevents building a reproducible binary. + oe_runmake configure-gcc + sed -i 's@${STAGING_DIR_TARGET}@/host@g' ${B}/gcc/configargs.h + sed -i 's@${STAGING_DIR_HOST}@/host@g' ${B}/gcc/configargs.h +} + +remove_sysroot_paths_from_checksum_options () { + # Prevent sysroot/workdir paths from being used in checksum-options. + # checksum-options is used to generate a checksum which is embedded into + # the output binary. + oe_runmake TARGET-gcc=checksum-options all-gcc + sed -i 's@${DEBUG_PREFIX_MAP}@@g' ${B}/gcc/checksum-options + sed -i 's@${1}@/host@g' ${B}/gcc/checksum-options +} diff --git a/meta/recipes-devtools/gcc/gcc-configure-common.inc b/meta/recipes-devtools/gcc/gcc-configure-common.inc index d77b2ec3d1..5c79936242 100644 --- a/meta/recipes-devtools/gcc/gcc-configure-common.inc +++ b/meta/recipes-devtools/gcc/gcc-configure-common.inc @@ -119,4 +119,3 @@ do_configure () { oe_runconf } - diff --git a/meta/recipes-devtools/gcc/gcc-cross-canadian.inc b/meta/recipes-devtools/gcc/gcc-cross-canadian.inc index 7c4233c211..9528b71272 100644 --- a/meta/recipes-devtools/gcc/gcc-cross-canadian.inc +++ b/meta/recipes-devtools/gcc/gcc-cross-canadian.inc @@ -64,6 +64,9 @@ do_configure () { } do_compile () { + remove_sysroot_paths_from_configargs + remove_sysroot_paths_from_checksum_options '${STAGING_DIR_HOST}' + oe_runmake all-host configure-target-libgcc (cd ${B}/${TARGET_SYS}/libgcc; oe_runmake enable-execute-stack.c unwind.h md-unwind-support.h sfp-machine.h gthr-default.h) } diff --git a/meta/recipes-devtools/gcc/gcc-cross.inc b/meta/recipes-devtools/gcc/gcc-cross.inc index 5b0ca15d47..f8a7730cf3 100644 --- a/meta/recipes-devtools/gcc/gcc-cross.inc +++ b/meta/recipes-devtools/gcc/gcc-cross.inc @@ -62,19 +62,8 @@ do_compile () { export CXXFLAGS_FOR_TARGET="${TARGET_CXXFLAGS}" export LDFLAGS_FOR_TARGET="${TARGET_LDFLAGS}" - # Prevent native/host sysroot path from being used in configargs.h header, - # as it will be rewritten when used by other sysroots preventing support - # for gcc plugins - oe_runmake configure-gcc - sed -i 's@${STAGING_DIR_TARGET}@/host@g' ${B}/gcc/configargs.h - sed -i 's@${STAGING_DIR_HOST}@/host@g' ${B}/gcc/configargs.h - - # Prevent sysroot/workdir paths from being used in checksum-options. - # checksum-options is used to generate a checksum which is embedded into - # the output binary. - oe_runmake TARGET-gcc=checksum-options all-gcc - sed -i 's@${DEBUG_PREFIX_MAP}@@g' ${B}/gcc/checksum-options - sed -i 's@${STAGING_DIR_HOST}@/host@g' ${B}/gcc/checksum-options + remove_sysroot_paths_from_configargs + remove_sysroot_paths_from_checksum_options '${STAGING_DIR_HOST}' oe_runmake all-host configure-target-libgcc (cd ${B}/${TARGET_SYS}/libgcc; oe_runmake enable-execute-stack.c unwind.h md-unwind-support.h sfp-machine.h gthr-default.h) diff --git a/meta/recipes-devtools/gcc/gcc-target.inc b/meta/recipes-devtools/gcc/gcc-target.inc index e9187fc444..bd7506fe3a 100644 --- a/meta/recipes-devtools/gcc/gcc-target.inc +++ b/meta/recipes-devtools/gcc/gcc-target.inc @@ -132,20 +132,8 @@ FILES:${PN}-doc = "\ " do_compile () { - # Prevent full target sysroot path from being used in configargs.h header, - # as it will be rewritten when used by other sysroots preventing support - # for gcc plugins. Additionally the path is embeddeded into the output - # binary, this prevents building a reproducible binary. - oe_runmake configure-gcc - sed -i 's@${STAGING_DIR_TARGET}@/@g' ${B}/gcc/configargs.h - sed -i 's@${STAGING_DIR_HOST}@/@g' ${B}/gcc/configargs.h - - # Prevent sysroot/workdir paths from being used in checksum-options. - # checksum-options is used to generate a checksum which is embedded into - # the output binary. - oe_runmake TARGET-gcc=checksum-options all-gcc - sed -i 's@${DEBUG_PREFIX_MAP}@@g' ${B}/gcc/checksum-options - sed -i 's@${STAGING_DIR_TARGET}@/@g' ${B}/gcc/checksum-options + remove_sysroot_paths_from_configargs + remove_sysroot_paths_from_checksum_options '${STAGING_DIR_TARGET}' oe_runmake all-host }