diff options
| author | Robin Kruppe <robin.kruppe@gmail.com> | 2017-03-05 16:11:11 +0100 |
|---|---|---|
| committer | Robin Kruppe <robin.kruppe@gmail.com> | 2017-03-09 15:07:42 +0100 |
| commit | 58ff4f67e3a1d099d3c4cb8ccb554ee9fd0a16cd (patch) | |
| tree | ac7f8e861aaf3a04b56922f8d94e6645cd5ee856 | |
| parent | 3087a1f39eaeac9d76c8b159dcc64de515bb2b83 (diff) | |
| download | rust-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.rs | 3 | ||||
| -rw-r--r-- | src/bootstrap/config.toml.example | 8 | ||||
| -rw-r--r-- | src/bootstrap/native.rs | 6 |
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 |
