about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorAlex Crichton <alex@alexcrichton.com>2016-12-29 17:28:19 -0800
committerAlex Crichton <alex@alexcrichton.com>2016-12-29 17:28:19 -0800
commitebea2ea34faf85688daeee703b925d25e63024fb (patch)
tree8386d020cafd2ccac0e61c23ea8fc142821aaeac /src
parent334af886589f2854d9027d60fa79a62b6e5b4980 (diff)
parent0f8e931475b1f7864504f509b389d28e1ffbc93a (diff)
downloadrust-ebea2ea34faf85688daeee703b925d25e63024fb.tar.gz
rust-ebea2ea34faf85688daeee703b925d25e63024fb.zip
Merge branch 'rustbuild-llvm-targets' of https://github.com/xen0n/rust into rollup
Diffstat (limited to 'src')
-rw-r--r--src/bootstrap/config.rs3
-rw-r--r--src/bootstrap/config.toml.example11
-rw-r--r--src/bootstrap/native.rs9
3 files changed, 21 insertions, 2 deletions
diff --git a/src/bootstrap/config.rs b/src/bootstrap/config.rs
index 93fe39ab41b..9767afd73ca 100644
--- a/src/bootstrap/config.rs
+++ b/src/bootstrap/config.rs
@@ -55,6 +55,7 @@ pub struct Config {
     pub llvm_version_check: bool,
     pub llvm_static_stdcpp: bool,
     pub llvm_link_shared: bool,
+    pub llvm_targets: Option<String>,
 
     // rust codegen options
     pub rust_optimize: bool,
@@ -154,6 +155,7 @@ struct Llvm {
     release_debuginfo: Option<bool>,
     version_check: Option<bool>,
     static_libstdcpp: Option<bool>,
+    targets: Option<String>,
 }
 
 #[derive(RustcDecodable)]
@@ -288,6 +290,7 @@ impl Config {
             set(&mut config.llvm_release_debuginfo, llvm.release_debuginfo);
             set(&mut config.llvm_version_check, llvm.version_check);
             set(&mut config.llvm_static_stdcpp, llvm.static_libstdcpp);
+            config.llvm_targets = llvm.targets.clone();
         }
 
         if let Some(ref rust) = toml.rust {
diff --git a/src/bootstrap/config.toml.example b/src/bootstrap/config.toml.example
index 7c8d3870e92..b476478fdd1 100644
--- a/src/bootstrap/config.toml.example
+++ b/src/bootstrap/config.toml.example
@@ -42,6 +42,17 @@
 # example.
 #ninja = false
 
+# LLVM targets to build support for.
+# Note: this is NOT related to Rust compilation targets. However, as Rust is
+# dependent on LLVM for code generation, turning targets off here WILL lead to
+# the resulting rustc being unable to compile for the disabled architectures.
+# Also worth pointing out is that, in case support for new targets are added to
+# LLVM, enabling them here doesn't mean Rust is automatically gaining said
+# support. You'll need to write a target specification at least, and most
+# likely, teach rustc about the C ABI of the target. Get in touch with the
+# Rust team and file an issue if you need assistance in porting!
+#targets = "X86;ARM;AArch64;Mips;PowerPC;SystemZ;JSBackend;MSP430;Sparc"
+
 # =============================================================================
 # General build configuration options
 # =============================================================================
diff --git a/src/bootstrap/native.rs b/src/bootstrap/native.rs
index 80f27a5ab67..4b6fef8edc1 100644
--- a/src/bootstrap/native.rs
+++ b/src/bootstrap/native.rs
@@ -75,13 +75,18 @@ pub fn llvm(build: &Build, target: &str) {
         (true, true) => "RelWithDebInfo",
     };
 
+    // NOTE: remember to also update `config.toml.example` when changing the defaults!
+    let llvm_targets = match build.config.llvm_targets {
+        Some(ref s) => s,
+        None => "X86;ARM;AArch64;Mips;PowerPC;SystemZ;JSBackend;MSP430;Sparc;NVPTX",
+    };
+
     cfg.target(target)
        .host(&build.config.build)
        .out_dir(&dst)
        .profile(profile)
        .define("LLVM_ENABLE_ASSERTIONS", assertions)
-       .define("LLVM_TARGETS_TO_BUILD",
-               "X86;ARM;AArch64;Mips;PowerPC;SystemZ;JSBackend;MSP430;Sparc;NVPTX")
+       .define("LLVM_TARGETS_TO_BUILD", llvm_targets)
        .define("LLVM_INCLUDE_EXAMPLES", "OFF")
        .define("LLVM_INCLUDE_TESTS", "OFF")
        .define("LLVM_INCLUDE_DOCS", "OFF")