about summary refs log tree commit diff
path: root/src/bootstrap
diff options
context:
space:
mode:
authorJorge Aparicio <japaricious@gmail.com>2016-09-06 01:04:41 -0500
committerJorge Aparicio <japaricious@gmail.com>2016-09-06 01:04:41 -0500
commit8df4a768a7e98a594bd7a2d70a7bdcec14bc0518 (patch)
treeada8ec7fd7b5b5a1e555e513bd3badc586efbfc9 /src/bootstrap
parente77d86c142ae668038dd43594d04022cbd6bf4d8 (diff)
downloadrust-8df4a768a7e98a594bd7a2d70a7bdcec14bc0518.tar.gz
rust-8df4a768a7e98a594bd7a2d70a7bdcec14bc0518.zip
rustbuild: per target musl-root
config.toml now accepts a target.$TARGET.musl-root key that lets you
override the "build" musl-root value, which is set via the --musl-root
flag or via the build.musl-root key.

With this change, it's now possible to compile std for several musl
targets at once. Here's are the sample commands to do such thing:

```
$ configure \
    --enable-rustbuild \
    --target=x86_64-unknown-linux-musl,arm-unknown-linux-musleabi \
    --musl-root=/musl/x86_64-unknown-linux-musl/

$ edit config.toml && tail config.toml
[target.arm-unknown-linux-musleabi]
musl-root = "/x-tools/arm-unknown-linux-musleabi/arm-unknown-linux-musleabi/sysroot/usr"

$ make
```
Diffstat (limited to 'src/bootstrap')
-rw-r--r--src/bootstrap/compile.rs5
-rw-r--r--src/bootstrap/config.rs2
-rw-r--r--src/bootstrap/sanity.rs10
3 files changed, 11 insertions, 6 deletions
diff --git a/src/bootstrap/compile.rs b/src/bootstrap/compile.rs
index 302ac68460c..e14317b23b4 100644
--- a/src/bootstrap/compile.rs
+++ b/src/bootstrap/compile.rs
@@ -59,8 +59,9 @@ pub fn std<'a>(build: &'a Build, target: &str, compiler: &Compiler<'a>) {
             cargo.env("JEMALLOC_OVERRIDE", jemalloc);
         }
     }
-    if let Some(ref p) = build.config.musl_root {
-        if target.contains("musl") {
+    if target.contains("musl") {
+        if let Some(p) = build.config.target_config[target].musl_root.as_ref()
+            .or(build.config.musl_root.as_ref()) {
             cargo.env("MUSL_ROOT", p);
         }
     }
diff --git a/src/bootstrap/config.rs b/src/bootstrap/config.rs
index 682a6f74126..4a158b42187 100644
--- a/src/bootstrap/config.rs
+++ b/src/bootstrap/config.rs
@@ -76,6 +76,7 @@ pub struct Config {
 
     // misc
     pub channel: String,
+    // Fallback musl-root for all targets
     pub musl_root: Option<PathBuf>,
     pub prefix: Option<String>,
     pub codegen_tests: bool,
@@ -89,6 +90,7 @@ pub struct Target {
     pub cc: Option<PathBuf>,
     pub cxx: Option<PathBuf>,
     pub ndk: Option<PathBuf>,
+    pub musl_root: Option<PathBuf>,
 }
 
 /// Structure of the `config.toml` file that configuration is read from.
diff --git a/src/bootstrap/sanity.rs b/src/bootstrap/sanity.rs
index c0d303c0ea9..f1d7f869a96 100644
--- a/src/bootstrap/sanity.rs
+++ b/src/bootstrap/sanity.rs
@@ -111,8 +111,9 @@ pub fn check(build: &mut Build) {
 
         // Make sure musl-root is valid if specified
         if target.contains("musl") && !target.contains("mips") {
-            match build.config.musl_root {
-                Some(ref root) => {
+            match build.config.target_config[target].musl_root.as_ref()
+                .or(build.config.musl_root.as_ref()) {
+                Some(root) => {
                     if fs::metadata(root.join("lib/libc.a")).is_err() {
                         panic!("couldn't find libc.a in musl dir: {}",
                                root.join("lib").display());
@@ -123,8 +124,9 @@ pub fn check(build: &mut Build) {
                     }
                 }
                 None => {
-                    panic!("when targeting MUSL the build.musl-root option \
-                            must be specified in config.toml")
+                    panic!("when targeting MUSL either the build.musl-root \
+                            option or the target.$TARGET.musl-root one must \
+                            be specified in config.toml")
                 }
             }
         }