We also clearly need to extend automated reproducibility testing to native recipes - I’ll look into that. It’s fine to have core items in repro exception list, we just need to know what they are.
Alex On Mon 22. Nov 2021 at 9.00, Jacob Kroon <[email protected]> wrote: > Hi, > > Some days ago there was a patch in OE-Core that updated the > Upstream-Status tags in a couple of the gcc patches. I figured this > wouldn't cause too much of rebuilding thanks to hashequiv, but it did, > and all my target packages got rebuilt. > > It turns out that gcc embeds a checksum of its build artifacts, which > includes .a archives, and those will most likely differ between > gcc-cross builds since the timestamps of the .o files are included as > meta information by default. There is a way to configure binutils in > such a way that ar and ranlib defaults to being deterministic > (--enable-deterministic-archives), but I don't think distros like Fedora > do that. > > The target gcc reproduces because it is built with binutils-cross, and > binutils-cross *is* configured with --enable-deterministic-archives. > gcc-cross however is built with the host's binutils. > > I proposed a gcc patch > (https://gcc.gnu.org/pipermail/gcc-patches/2021-November/585060.html) > for building gcc with the 'D' flags passed to ar/ranlib, but it turns > out it is not portable to all platforms. But it did mean that gcc-cross > reproduced. > > Next thing I tried was to let gcc-cross depend on binutils-native, so I > made sure the tools were not removed during do_install(), added the > deterministic configure switch and added the dependency to gcc-cross, > and again gcc-cross reproduced. However, RP raised some concerns about > circular dependencies and increased build times. > > Also, it might be better if *all* cross/native recipes would use > deterministic ar/ranlib, so next thing was to try and pass "-D" in > BUILD_AR and BUILD_RANLIB. This causes problems with recipes that do > "$(AR) cru ...". This becomes "ar D cru ..." which is a fatal error in > ar, see > > https://sourceware.org/git/?p=binutils-gdb.git;a=blob;f=binutils/ar.c;h=8885585ef7537450f0f0990a5eeea7eb16bcad8f;hb=HEAD#l814 > . > > So next idea was to add wrappers around ar/ranlib (similar to what is > done today for chown/chgrp for native recipes) that filters the options > and makes them behave as if they were built with > --enable-deterministic-archives. This also reproduces gcc-cross, but > introducing more wrapper scripts is perhaps not so great. > > Here are the fragile wrappers I used: > > openembedded-core/scripts/cross-intercept/ar > #!/bin/bash > args=$(echo $1 | sed -e "s/u//g") > shift > PATH=$(echo $PATH | sed -e "s,$(dirname $(realpath -s $0)),,g") > exec ar D $args $* > > openembedded-core/scripts/cross-intercept/ranlib > #!/bin/bash > PATH=$(echo $PATH | sed -e "s,$(dirname $(realpath -s $0)),,g") > exec ranlib -D $* > > Thoughts anyone ? > > Jacob > > > >
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#1353): https://lists.openembedded.org/g/openembedded-architecture/message/1353 Mute This Topic: https://lists.openembedded.org/mt/87230716/21656 Group Owner: [email protected] Unsubscribe: https://lists.openembedded.org/g/openembedded-architecture/unsub [[email protected]] -=-=-=-=-=-=-=-=-=-=-=-
