Hi, I had a variant of this patch for quite some time, now after adaptation for moved sources. It still seems to do the job: Making rustc link to the toolchain libraries that I provide. Please ignore for now why the toolchain doesn't add the paths itself. There are reasons for BUILDLINK_PASSTHROUGH_RPATHDIRS and I use it to inject paths into the normal builds. Rust is different and needs explicit insertion of RPATH. We have a patch for that. I propose to change it like this: diff -ruN pkgsrc-2025Q1/lang/rust/patches/patch-src_bootstrap_src_core_builder.rs pkgsrc/lang/rust/patches/patch-src_bootstrap_src_core_builder.rs --- pkgsrc-2025Q1/lang/rust/patches/patch-src_bootstrap_src_core_builder.rs 2025-04-02 05:01:42.000000000 +0200 +++ pkgsrc/lang/rust/patches/patch-src_bootstrap_src_core_builder.rs 2025-04-11 16:45:22.543345358 +0200 @@ -2,6 +2,8 @@ Find external libunwind and libLLVM on pkgsrc (not just Linux). Use @PREFIX@ in rpath. +Also pass along our configured RPATH directories from the environment +(for example supporting custom toolchain). Also, follow up on https://github.com/rust-lang/rust/issues/133629 by applying @@ -40,11 +42,17 @@ Cargo { command: cargo, compiler, -@@ -2617,7 +2624,7 @@ impl Cargo { +@@ -2617,7 +2624,13 @@ impl Cargo { Some(format!("-Wl,-rpath,@loader_path/../{libdir}")) } else if !target.is_windows() && !target.contains("aix") && !target.contains("xous") { self.rustflags.arg("-Clink-args=-Wl,-z,origin"); - Some(format!("-Wl,-rpath,$ORIGIN/../{libdir}")) ++ let s = "@BUILDLINK_PASSTHRU_RPATHDIRS@".to_string(); ++ let mut more_paths:Vec<_> = s.split_whitespace().collect(); ++ more_paths.reverse(); // To have correct order when pop()ing. ++ while let Some(p) = more_paths.pop() { ++ self.rustflags.arg(&format!("-Clink-args=-Wl,-rpath,{}", p)); ++ } + Some(format!("-Wl,-rpath,@PREFIX@/lib")) } else { None I had this code already in 2023 at least, where this block as at a different location, but still bootstrap*builder.rs. It works for me to insert my list of paths into rustc, for example: $ readelf -d .prefix/bin/rustc |grep RPATH 0x000000000000000f (RPATH) Library rpath: [/sw/env/gcc-13.2.0_openmpi-4.1.6/pkgsrc/2025Q1-devel/lib:/sw/env/gcc-13.2.0/openmpi/4.1.6/lib/openmpi:/sw/env/gcc-13.2.0/openmpi/4.1.6/lib:/sw/compiler/gcc-13.2.0/lib64:/sw/compiler/gcc-13.2.0/lib] I see one detail differing from my earlier patch. Before, we had + Some(format!("-Wl,-rpath,@PREFIX@/{libdir}")) instead of a plain /lib. I wonder if that should also be the case again. Ideally, I would like to have some facility to insert rpaths upstreamed to rust. But for some reason not even the @PREFIX@ part got in. Or did nobody try? I can only hope that this is the one and only place that matters and it's the right way. I didn't ever code something in rust besides hacking its toolchain, truly cargo-coding here;-) Alrighty then, Thomas -- Dr. Thomas Orgis Universität Hamburg Regionales Rechenzentrum / Regional Computing Center Basis-Infrastruktur / Basic Infrastructure High-Performance Computing Schlüterstr. 70 20146 Hamburg Tel.: +49 40 42838 8826 E-Mail: thomas.orgis%uni-hamburg.de@localhost Team: hpc%uni-hamburg.de@localhost https://www.uni-hamburg.de https://www.rrz.uni-hamburg.de
Attachment:
smime.p7s
Description: S/MIME cryptographic signature