From 8df4a768a7e98a594bd7a2d70a7bdcec14bc0518 Mon Sep 17 00:00:00 2001 From: Jorge Aparicio Date: Tue, 6 Sep 2016 01:04:41 -0500 Subject: [PATCH] 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 ``` --- src/bootstrap/compile.rs | 5 +++-- src/bootstrap/config.rs | 2 ++ src/bootstrap/sanity.rs | 10 ++++++---- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/bootstrap/compile.rs b/src/bootstrap/compile.rs index 302ac68460c69..e14317b23b4d1 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 682a6f74126a8..4a158b42187f6 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, pub prefix: Option, pub codegen_tests: bool, @@ -89,6 +90,7 @@ pub struct Target { pub cc: Option, pub cxx: Option, pub ndk: Option, + pub musl_root: Option, } /// Structure of the `config.toml` file that configuration is read from. diff --git a/src/bootstrap/sanity.rs b/src/bootstrap/sanity.rs index c0d303c0ea9ae..f1d7f869a9657 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") } } }