about summary refs log tree commit diff
diff options
context:
space:
mode:
authorRobin Kruppe <robin.kruppe@gmail.com>2017-03-05 16:11:11 +0100
committerRobin Kruppe <robin.kruppe@gmail.com>2017-03-09 15:07:42 +0100
commit58ff4f67e3a1d099d3c4cb8ccb554ee9fd0a16cd (patch)
treeac7f8e861aaf3a04b56922f8d94e6645cd5ee856
parent3087a1f39eaeac9d76c8b159dcc64de515bb2b83 (diff)
downloadrust-58ff4f67e3a1d099d3c4cb8ccb554ee9fd0a16cd.tar.gz
rust-58ff4f67e3a1d099d3c4cb8ccb554ee9fd0a16cd.zip
rustbuild: expose LLVM_PARALLEL_LINK_JOBS
This allows limiting the number of linker jobs to avoid swapping when
linking LLVM with debug info.
-rw-r--r--src/bootstrap/config.rs3
-rw-r--r--src/bootstrap/config.toml.example8
-rw-r--r--src/bootstrap/native.rs6
3 files changed, 17 insertions, 0 deletions
diff --git a/src/bootstrap/config.rs b/src/bootstrap/config.rs
index 438ce6103d6..87c35e0502c 100644
--- a/src/bootstrap/config.rs
+++ b/src/bootstrap/config.rs
@@ -59,6 +59,7 @@ pub struct Config {
     pub llvm_static_stdcpp: bool,
     pub llvm_link_shared: bool,
     pub llvm_targets: Option<String>,
+    pub llvm_link_jobs: Option<u32>,
 
     // rust codegen options
     pub rust_optimize: bool,
@@ -179,6 +180,7 @@ struct Llvm {
     version_check: Option<bool>,
     static_libstdcpp: Option<bool>,
     targets: Option<String>,
+    link_jobs: Option<u32>,
 }
 
 #[derive(RustcDecodable, Default, Clone)]
@@ -333,6 +335,7 @@ impl Config {
             set(&mut config.llvm_version_check, llvm.version_check);
             set(&mut config.llvm_static_stdcpp, llvm.static_libstdcpp);
             config.llvm_targets = llvm.targets.clone();
+            config.llvm_link_jobs = llvm.link_jobs;
         }
 
         if let Some(ref rust) = toml.rust {
diff --git a/src/bootstrap/config.toml.example b/src/bootstrap/config.toml.example
index 30763e38a33..776bd729119 100644
--- a/src/bootstrap/config.toml.example
+++ b/src/bootstrap/config.toml.example
@@ -53,6 +53,14 @@
 # Rust team and file an issue if you need assistance in porting!
 #targets = "X86;ARM;AArch64;Mips;PowerPC;SystemZ;JSBackend;MSP430;Sparc;NVPTX"
 
+# Cap the number of parallel linker invocations when compiling LLVM.
+# This can be useful when building LLVM with debug info, which significantly
+# increases the size of binaries and consequently the memory required by
+# each linker process.
+# If absent or 0, linker invocations are treated like any other job and
+# controlled by rustbuild's -j parameter.
+#link-jobs = 0
+
 # =============================================================================
 # General build configuration options
 # =============================================================================
diff --git a/src/bootstrap/native.rs b/src/bootstrap/native.rs
index 483f45fdd62..c13235b9c76 100644
--- a/src/bootstrap/native.rs
+++ b/src/bootstrap/native.rs
@@ -115,6 +115,12 @@ pub fn llvm(build: &Build, target: &str) {
         cfg.define("LLVM_BUILD_32_BITS", "ON");
     }
 
+    if let Some(num_linkers) = build.config.llvm_link_jobs {
+        if num_linkers > 0 {
+            cfg.define("LLVM_PARALLEL_LINK_JOBS", num_linkers.to_string());
+        }
+    }
+
     // http://llvm.org/docs/HowToCrossCompileLLVM.html
     if target != build.config.build {
         // FIXME: if the llvm root for the build triple is overridden then we