about summary refs log tree commit diff
diff options
context:
space:
mode:
authorpweyck <pweyck@users.noreply.github.com>2016-11-06 11:45:21 +0100
committerpweyck <pweyck@users.noreply.github.com>2016-11-06 16:33:34 +0100
commitbcfbbd864561a9aa64b9e5908a62eaa2123c5764 (patch)
treee658d615f4d144c412ad732b0b03593256c184eb
parent161f2623bd078017dfc9a06bd3417b36f6a58de9 (diff)
downloadrust-bcfbbd864561a9aa64b9e5908a62eaa2123c5764.tar.gz
rust-bcfbbd864561a9aa64b9e5908a62eaa2123c5764.zip
Force static linking of LLVM
Run llvm-config with "--link-static" if available, to force static linking of LLVM.
This option was added in LLVM 3.8.

Fixes #36854
See also: #36996
-rw-r--r--src/librustc_llvm/build.rs13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/librustc_llvm/build.rs b/src/librustc_llvm/build.rs
index 35140d5ab4a..4d3a4d09dce 100644
--- a/src/librustc_llvm/build.rs
+++ b/src/librustc_llvm/build.rs
@@ -128,6 +128,19 @@ fn main() {
     // of llvm-config, not the target that we're attempting to link.
     let mut cmd = Command::new(&llvm_config);
     cmd.arg("--libs");
+
+    // Force static linking with "--link-static" if available.
+    let mut version_cmd = Command::new(&llvm_config);
+    version_cmd.arg("--version");
+    let version_output = output(&mut version_cmd);
+    let mut parts = version_output.split('.');
+    if let (Some(major), Some(minor)) = (parts.next().and_then(|s| s.parse::<u32>().ok()),
+                                         parts.next().and_then(|s| s.parse::<u32>().ok())) {
+        if major > 3 || (major == 3 && minor >= 8) {
+            cmd.arg("--link-static");
+        }
+    }
+
     if !is_crossed {
         cmd.arg("--system-libs");
     }