about summary refs log tree commit diff
path: root/src/bootstrap
diff options
context:
space:
mode:
authorWang Qilin <qilin.wang@huawei.com>2023-05-05 17:18:42 +0800
committerWang Qilin <qilin.wang@huawei.com>2023-05-05 17:46:10 +0800
commit23e443a5faab17059be8b9035bfa6f608cff1530 (patch)
tree34c3ec3a3f9f30f861f01f0aa8eedaf011415047 /src/bootstrap
parentf5559e338256f17ada6d82b429acc2dbd8facc9c (diff)
support enable rpath in each target independently
Diffstat (limited to 'src/bootstrap')
-rw-r--r--src/bootstrap/builder.rs2
-rw-r--r--src/bootstrap/config.rs7
2 files changed, 8 insertions, 1 deletions
diff --git a/src/bootstrap/builder.rs b/src/bootstrap/builder.rs
index 0d2d512b4b2..b8e50342f92 100644
--- a/src/bootstrap/builder.rs
+++ b/src/bootstrap/builder.rs
@@ -1610,7 +1610,7 @@ impl<'a> Builder<'a> {
         // argument manually via `-C link-args=-Wl,-rpath,...`. Plus isn't it
         // 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.rust_rpath && util::use_host_linker(target) {
+        if self.config.rpath_enabled(target) && util::use_host_linker(target) {
             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
diff --git a/src/bootstrap/config.rs b/src/bootstrap/config.rs
index ca6dcaf4957..7a1d3e6dc48 100644
--- a/src/bootstrap/config.rs
+++ b/src/bootstrap/config.rs
@@ -455,6 +455,7 @@ pub struct Target {
     pub ndk: Option<PathBuf>,
     pub sanitizers: Option<bool>,
     pub profiler: Option<bool>,
+    pub rpath: Option<bool>,
     pub crt_static: Option<bool>,
     pub musl_root: Option<PathBuf>,
     pub musl_libdir: Option<PathBuf>,
@@ -800,6 +801,7 @@ define_config! {
         android_ndk: Option<String> = "android-ndk",
         sanitizers: Option<bool> = "sanitizers",
         profiler: Option<bool> = "profiler",
+        rpath: Option<bool> = "rpath",
         crt_static: Option<bool> = "crt-static",
         musl_root: Option<String> = "musl-root",
         musl_libdir: Option<String> = "musl-libdir",
@@ -1301,6 +1303,7 @@ impl Config {
                 target.qemu_rootfs = cfg.qemu_rootfs.map(PathBuf::from);
                 target.sanitizers = cfg.sanitizers;
                 target.profiler = cfg.profiler;
+                target.rpath = cfg.rpath;
 
                 config.target_config.insert(TargetSelection::from_user(&triple), target);
             }
@@ -1610,6 +1613,10 @@ impl Config {
         self.target_config.values().any(|t| t.profiler == Some(true)) || self.profiler
     }
 
+    pub fn rpath_enabled(&self, target: TargetSelection) -> bool {
+        self.target_config.get(&target).map(|t| t.rpath).flatten().unwrap_or(self.rust_rpath)
+    }
+
     pub fn llvm_enabled(&self) -> bool {
         self.rust_codegen_backends.contains(&INTERNER.intern_str("llvm"))
     }