diff mbox series

[v3,1/2] gcc: remove paths to sysroot from configargs.h and checksum-options for gcc-cross-canadian

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

Commit Message

Denys Dmytriyenko July 22, 2024, 5:34 a.m. UTC
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(-)

Comments

Richard Purdie July 22, 2024, 8:51 p.m. UTC | #1
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
Denys Dmytriyenko July 22, 2024, 9:18 p.m. UTC | #2
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?
Richard Purdie July 22, 2024, 9:23 p.m. UTC | #3
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 mbox series

Patch

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
 }