* [PATCH v3 1/2] gcc: remove paths to sysroot from configargs.h and checksum-options for gcc-cross-canadian
@ 2024-07-22 5:34 Denys Dmytriyenko
2024-07-22 5:34 ` [PATCH 2/2] gcc: unify cleanup of include-fixed, apply to cross-canadian Denys Dmytriyenko
2024-07-22 20:51 ` [OE-core] [PATCH v3 1/2] gcc: remove paths to sysroot from configargs.h and checksum-options for gcc-cross-canadian Richard Purdie
0 siblings, 2 replies; 5+ messages in thread
From: Denys Dmytriyenko @ 2024-07-22 5:34 UTC (permalink / raw)
To: openembedded-core; +Cc: Oleksandr Hnatiuk, Denys Dmytriyenko
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(-)
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
}
--
2.25.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 2/2] gcc: unify cleanup of include-fixed, apply to cross-canadian
2024-07-22 5:34 [PATCH v3 1/2] gcc: remove paths to sysroot from configargs.h and checksum-options for gcc-cross-canadian Denys Dmytriyenko
@ 2024-07-22 5:34 ` Denys Dmytriyenko
2024-07-22 20:51 ` [OE-core] [PATCH v3 1/2] gcc: remove paths to sysroot from configargs.h and checksum-options for gcc-cross-canadian Richard Purdie
1 sibling, 0 replies; 5+ messages in thread
From: Denys Dmytriyenko @ 2024-07-22 5:34 UTC (permalink / raw)
To: openembedded-core; +Cc: Denys Dmytriyenko
From: Denys Dmytriyenko <denys@konsulko.com>
Since target and cross variants were already doing similar cleanup
of include-fixed headers, as those aren't used, unify the code and
also apply the same to cross-canadian variant.
Some of those header files get processed with a tool that leaves
absolute buildpaths inside the file's commented section, causing
QA errors. Since those aren't used, let's remove them.
This may be a temporary solution until the tool itself gets fixed
to not embed absolute buildpaths in the header files:
https://lists.openembedded.org/g/openembedded-core/topic/107268307
Signed-off-by: Denys Dmytriyenko <denys@konsulko.com>
---
meta/recipes-devtools/gcc/gcc-common.inc | 4 +++
.../gcc/gcc-cross-canadian.inc | 2 ++
meta/recipes-devtools/gcc/gcc-cross.inc | 2 +-
meta/recipes-devtools/gcc/gcc-target.inc | 31 +------------------
4 files changed, 8 insertions(+), 31 deletions(-)
diff --git a/meta/recipes-devtools/gcc/gcc-common.inc b/meta/recipes-devtools/gcc/gcc-common.inc
index 507b257e1f..661f2aef5c 100644
--- a/meta/recipes-devtools/gcc/gcc-common.inc
+++ b/meta/recipes-devtools/gcc/gcc-common.inc
@@ -135,3 +135,7 @@ remove_sysroot_paths_from_checksum_options () {
sed -i 's@${DEBUG_PREFIX_MAP}@@g' ${B}/gcc/checksum-options
sed -i 's@${1}@/host@g' ${B}/gcc/checksum-options
}
+
+cleanup_installed_include_fixed () {
+ find ${D}${libdir}/gcc/${TARGET_SYS}/${BINV}/include-fixed -type f -not -name "README" -not -name limits.h -not -name syslimits.h | xargs rm -f
+}
diff --git a/meta/recipes-devtools/gcc/gcc-cross-canadian.inc b/meta/recipes-devtools/gcc/gcc-cross-canadian.inc
index 9528b71272..39f468412a 100644
--- a/meta/recipes-devtools/gcc/gcc-cross-canadian.inc
+++ b/meta/recipes-devtools/gcc/gcc-cross-canadian.inc
@@ -175,6 +175,8 @@ do_install () {
done
done
done
+
+ cleanup_installed_include_fixed
}
ELFUTILS = "nativesdk-elfutils"
diff --git a/meta/recipes-devtools/gcc/gcc-cross.inc b/meta/recipes-devtools/gcc/gcc-cross.inc
index f8a7730cf3..a1a52d9449 100644
--- a/meta/recipes-devtools/gcc/gcc-cross.inc
+++ b/meta/recipes-devtools/gcc/gcc-cross.inc
@@ -109,7 +109,7 @@ do_install () {
cp ${S}/libquadmath/quadmath.h ${D}${libdir}/gcc/${TARGET_SYS}/${BINV}/include/
cp ${S}/libquadmath/quadmath_weak.h ${D}${libdir}/gcc/${TARGET_SYS}/${BINV}/include/
- find ${D}${libdir}/gcc/${TARGET_SYS}/${BINV}/include-fixed -type f -not -name "README" -not -name limits.h -not -name syslimits.h | xargs rm -f
+ cleanup_installed_include_fixed
# install LTO linker plugins where binutils tools can find it
install -d ${D}${libdir}/bfd-plugins
diff --git a/meta/recipes-devtools/gcc/gcc-target.inc b/meta/recipes-devtools/gcc/gcc-target.inc
index bd7506fe3a..aba5c2848e 100644
--- a/meta/recipes-devtools/gcc/gcc-target.inc
+++ b/meta/recipes-devtools/gcc/gcc-target.inc
@@ -193,37 +193,8 @@ do_install () {
install -d ${D}${libdir}/bfd-plugins
ln -sf ${libexecdir}/gcc/${TARGET_SYS}/${BINV}/liblto_plugin.so ${D}${libdir}/bfd-plugins/liblto_plugin.so
chown -R root:root ${D}
-}
-do_install:append () {
- #
- # Thefixinc.sh script, run on the gcc's compile phase, looks into sysroot header
- # files and places the modified files into
- # {D}${libdir}/gcc/${TARGET_SYS}/${BINV}/include-fixed folder. This makes the
- # build not deterministic. The following code prunes all those headers
- # except those under include-fixed/linux, *limits.h and README, yielding
- # the same include-fixed folders no matter what sysroot
-
- include_fixed="${D}${libdir}/gcc/${TARGET_SYS}/${BINV}/include-fixed"
- for f in $(find ${include_fixed} -type f); do
- case $f in
- */include-fixed/linux/*)
- continue
- ;;
- */include-fixed/*limits.h)
- continue
- ;;
- */include-fixed/README)
- continue
- ;;
- *)
- # remove file and directory if empty
- bbdebug 2 "Pruning $f"
- rm $f
- find $(dirname $f) -maxdepth 0 -empty -exec rmdir {} \;
- ;;
- esac
- done
+ cleanup_installed_include_fixed
}
# Installing /usr/lib/gcc/* means we'd have two copies, one from gcc-cross
--
2.25.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [OE-core] [PATCH v3 1/2] gcc: remove paths to sysroot from configargs.h and checksum-options for gcc-cross-canadian
2024-07-22 5:34 [PATCH v3 1/2] gcc: remove paths to sysroot from configargs.h and checksum-options for gcc-cross-canadian Denys Dmytriyenko
2024-07-22 5:34 ` [PATCH 2/2] gcc: unify cleanup of include-fixed, apply to cross-canadian Denys Dmytriyenko
@ 2024-07-22 20:51 ` Richard Purdie
2024-07-22 21:18 ` Denys Dmytriyenko
1 sibling, 1 reply; 5+ messages in thread
From: Richard Purdie @ 2024-07-22 20:51 UTC (permalink / raw)
To: denis, openembedded-core; +Cc: Oleksandr Hnatiuk, Denys Dmytriyenko
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
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [OE-core] [PATCH v3 1/2] gcc: remove paths to sysroot from configargs.h and checksum-options for gcc-cross-canadian
2024-07-22 20:51 ` [OE-core] [PATCH v3 1/2] gcc: remove paths to sysroot from configargs.h and checksum-options for gcc-cross-canadian Richard Purdie
@ 2024-07-22 21:18 ` Denys Dmytriyenko
2024-07-22 21:23 ` Richard Purdie
0 siblings, 1 reply; 5+ messages in thread
From: Denys Dmytriyenko @ 2024-07-22 21:18 UTC (permalink / raw)
To: Richard Purdie; +Cc: openembedded-core
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?
--
Denys
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [OE-core] [PATCH v3 1/2] gcc: remove paths to sysroot from configargs.h and checksum-options for gcc-cross-canadian
2024-07-22 21:18 ` Denys Dmytriyenko
@ 2024-07-22 21:23 ` Richard Purdie
0 siblings, 0 replies; 5+ messages in thread
From: Richard Purdie @ 2024-07-22 21:23 UTC (permalink / raw)
To: Denys Dmytriyenko; +Cc: openembedded-core
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
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2024-07-22 21:23 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-07-22 5:34 [PATCH v3 1/2] gcc: remove paths to sysroot from configargs.h and checksum-options for gcc-cross-canadian Denys Dmytriyenko
2024-07-22 5:34 ` [PATCH 2/2] gcc: unify cleanup of include-fixed, apply to cross-canadian Denys Dmytriyenko
2024-07-22 20:51 ` [OE-core] [PATCH v3 1/2] gcc: remove paths to sysroot from configargs.h and checksum-options for gcc-cross-canadian Richard Purdie
2024-07-22 21:18 ` Denys Dmytriyenko
2024-07-22 21:23 ` Richard Purdie
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.