On Wed, 2021-09-01 at 09:44 +0100, Richard Purdie via lists.openembedded.org
wrote:
> Hi Esteban,
> 
> On Fri, 2021-08-27 at 15:18 +0000, Kuber, Esteban wrote:
> > On 2021/8/27, 2:03 AM, "Richard Purdie" 
> > <richard.pur...@linuxfoundation.org> wrote:
> >     > and:
> >     >
> >     > 2. a reproducible build failure on CentOS-7:
> >     >
> >     >     
> > https://autobuilder.yoctoproject.org/typhoon/#/builders/115/builds/597
> >     >
> >     > where, we see:
> >     >     = note: /bin/sh: /lib64/libc.so.6: version `GLIBC_2.33' \
> >     >     not found (required by \
> >     >     /home/pokybuild/yocto-worker/reproducible-centos/build/\
> >     >     build-st/reproducibleB/tmp/work/x86_64-linux/cargo-native/\
> >     >     1.54.0-r0/recipe-sysroot-native/usr/lib/libtinfo.so.5)
> >     >
> >     >
> >     >
> >     >
> >     >
> >     >     error: linking with `\
> >     >     /home/pokybuild/yocto-worker/reproducible-centos/build/\
> >     >     build-st/reproducibleB/tmp/work/x86_64-linux/cargo-native/\
> >     >     1.54.0-r0/wrapper/target-rust-ccld` failed: exit status: 1
> >    
> > 
> >     I had a quick look at this. It reproduces if you build cargo-native on 
> > a centos7
> >     machine with our M2 buildtools tarball in the environment of the build.
> > 
> >     Adding the uninative relocation hack to the cargo snapshot binary with:
> > 
> >      do_cargo_setup_snapshot () {
> >             
> > ${WORKDIR}/rust-snapshot-components/${CARGO_SNAPSHOT}/install.sh 
> > --prefix="${WORKDIR}/${CARGO_SNAPSHOT}" --disable-ldconfig
> >     +       # Need to use uninative's loader if enabled/present since the 
> > library paths
> >     +       # are used internally by rust and result in symbol mismatches 
> > if we don't
> >     +       if [ ! -z "${UNINATIVE_LOADER}" -a -e "${UNINATIVE_LOADER}" ]; 
> > then
> >     +               patchelf-uninative 
> > ${WORKDIR}/${CARGO_SNAPSHOT}/bin/cargo --set-interpreter ${UNINATIVE_LOADER}
> >     +       fi
> >      }
> > 
> >     didn't help.
> > 
> >     Running the command it mentions failing by hand in the same toolchain 
> > enabled
> >     shell works. It therefore seems likely that something rust is putting 
> > into the
> >     environment is breaking things. What that is, I don't know, I'm out of 
> > time to
> >     debug further.
> > 
> > I'm looking at what that could be. If I can't give you the actual list 
> > (from the
> > code), I can give you a patch to print out to stderr *everything* that 
> > rustc is
> > setting during builds. We currently have a `-v` verbose  flag in cargo that
> > gives out the full command with wich rustc in invoked, but as you say, the
> > problem is likely the environment variables at play.
> 
> With some further debugging as I mentioned in my other reply, it is the
> LD_LIBRARY_PATH setting which is confusing things. Probably as a result of:
> 
> https://doc.rust-lang.org/cargo/reference/environment-variables.html#dynamic-library-paths
> 
> >     It looks to me like it is using the ld from the host instead of the 
> > buildtools
> >     tarball. I did change tmp/work/x86_64-linux/cargo-native/1.54.0-
> >     r0/wrapper/target-rust-ccld to a full path to gcc and messed with PATH 
> > to ensure
> >     it would find "our" ld first but that didn't help.
> > 
> > This is making me wonder, could it be that we are defaulting to a linker 
> > that is
> > not supplied in the buildtools tar.gz? That would explain why it ends up 
> > picking
> > up the system's even when changing the $PATH.
> 
> It is a bit more subtle than that. The ccld script has /bin/sh as the
> interpreter which uses the host libc and host libtinfo. The LD_LIBRARY_PATH
> injected by cargo causes it to find the libtinfo in the recipe-sysroot-native
> which is incompatible with it and things then fail :(.
> 
> > 
> >     In the error output is some:
> > 
> >     Usage: which [options] [--] COMMAND [...]
> >     Write the full path of COMMAND(s) to standard output.
> > 
> >     suggesting some which call might not be compatible with centos7?
> > 
> >     Cheers,
> > 
> >     Richard
> > 
> > One clarification I would like to have is, is this the *first* time you are 
> > trying to build rustc in this configuration, or is this a *recent* problem 
> > introduced in 1.54? Just want to make sure that my understanding that we 
> > are 
> > dealing with the former is correct.
> 
> This is the first time we've tried this as far as I know.
> 
> It is a horrible mix of different host tools and libcs from uninative,
> buildtools and the host all conflicting when LD_LIBRARY_PATH is set :(.
> 
> I'm not sure how to go about resolving this.

I noticed some code in cargo. I think the code is where the sysroot path is
injected. Since rust figures out its own paths to everything it is a little
surprising this is needed and the comment suggests the author had similar
thoughts. I therefore tried the following patch:

Index: cargo/src/cargo/core/compiler/compilation.rs
===================================================================
--- cargo.orig/src/cargo/core/compiler/compilation.rs
+++ cargo/src/cargo/core/compiler/compilation.rs
@@ -273,13 +273,6 @@ impl<'cfg> Compilation<'cfg> {
             ));
             search_path.push(self.deps_output[&kind].clone());
             search_path.push(self.root_output[&kind].clone());
-            // For build-std, we don't want to accidentally pull in any shared
-            // libs from the sysroot that ships with rustc. This may not be
-            // required (at least I cannot craft a situation where it
-            // matters), but is here to be safe.
-            if self.config.cli_unstable().build_std.is_none() {
-                search_path.push(self.sysroot_target_libdir[&kind].clone());
-            }
         }
 
         let dylib_path = paths::dylib_path();

however since I think we're running a prebuilt binary rather than the one we're
building, this does work. I'm therefore not sure how we can fix this. Is this
code something upstream might consider removing?

Cheers,

Richard


-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#155550): 
https://lists.openembedded.org/g/openembedded-core/message/155550
Mute This Topic: https://lists.openembedded.org/mt/85017687/21656
Group Owner: openembedded-core+ow...@lists.openembedded.org
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to