diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2023-07-20 07:08:41 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-07-20 07:08:41 +0200 |
| commit | 8027dd95cf37e7bb9ad54541f5fa5460805380a7 (patch) | |
| tree | 32c563a73d129f458f74be85d6e98da971485b54 /src | |
| parent | 0646a5d1aa3745cb448db247f6fa432890a1812b (diff) | |
| parent | e326e1ad18acf4ae598b02228232bfd76e3a7fa6 (diff) | |
Rollup merge of #113710 - loongarch-rs:fix-rpath, r=clubby789
Fix rpath for libdir is specified ## What does this PR try to resolve? When building the Rust toolchain with `--libdir=lib64`, the executable tools such as `rustc` cannot find shared libraries. ```bash ./configure --prefix=/ --libdir=lib64 DESTDIR=/tmp/rust ./x.py install ``` ``` $ /tmp/rust/bin/rustc rustc: error while loading shared libraries: librustc_driver-13f1fd1bc7f7000d.so: cannot open shared object file: No such file or directory ``` This issue is caused by the link args `-Wl,rpath` being different from `--libdir`. ``` $ readelf -d /tmp/rust/bin/rustc | grep RUNPATH 0x000000000000001d (RUNPATH) Library runpath: [$ORIGIN/../lib] ``` ## How to resolve? When setting the rpath, get it from sysroot libdir relative path. After this patch: ``` $ readelf -d /tmp/rust/bin/rustc | grep RUNPATH 0x000000000000001d (RUNPATH) Library runpath: [$ORIGIN/../lib64] ```
Diffstat (limited to 'src')
| -rw-r--r-- | src/bootstrap/builder.rs | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/src/bootstrap/builder.rs b/src/bootstrap/builder.rs index 766c187e8e8..32eb4e68b08 100644 --- a/src/bootstrap/builder.rs +++ b/src/bootstrap/builder.rs @@ -1629,6 +1629,7 @@ impl<'a> Builder<'a> { // fun to pass a flag to a tool to pass a flag to pass a flag to a tool // to change a flag in a binary? if self.config.rpath_enabled(target) && util::use_host_linker(target) { + let libdir = self.sysroot_libdir_relative(compiler).to_str().unwrap(); let rpath = if target.contains("apple") { // Note that we need to take one extra step on macOS to also pass // `-Wl,-instal_name,@rpath/...` to get things to work right. To @@ -1636,10 +1637,10 @@ impl<'a> Builder<'a> { // so. Note that this is definitely a hack, and we should likely // flesh out rpath support more fully in the future. rustflags.arg("-Zosx-rpath-install-name"); - Some("-Wl,-rpath,@loader_path/../lib") + Some(format!("-Wl,-rpath,@loader_path/../{}", libdir)) } else if !target.contains("windows") && !target.contains("aix") { rustflags.arg("-Clink-args=-Wl,-z,origin"); - Some("-Wl,-rpath,$ORIGIN/../lib") + Some(format!("-Wl,-rpath,$ORIGIN/../{}", libdir)) } else { None }; |
