mirror of
https://github.com/rust-lang/rust.git
synced 2025-02-17 01:13:11 +00:00
Auto merge of #36292 - japaric:musl-root, r=alexcrichton
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 ``` r? @alexcrichton With this we should be able to start producing releases of std for arm musl targets
This commit is contained in:
commit
a7b2232d20
@ -59,8 +59,8 @@ pub fn std<'a>(build: &'a Build, target: &str, compiler: &Compiler<'a>) {
|
|||||||
cargo.env("JEMALLOC_OVERRIDE", jemalloc);
|
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.musl_root(target) {
|
||||||
cargo.env("MUSL_ROOT", p);
|
cargo.env("MUSL_ROOT", p);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -76,6 +76,7 @@ pub struct Config {
|
|||||||
|
|
||||||
// misc
|
// misc
|
||||||
pub channel: String,
|
pub channel: String,
|
||||||
|
// Fallback musl-root for all targets
|
||||||
pub musl_root: Option<PathBuf>,
|
pub musl_root: Option<PathBuf>,
|
||||||
pub prefix: Option<String>,
|
pub prefix: Option<String>,
|
||||||
pub codegen_tests: bool,
|
pub codegen_tests: bool,
|
||||||
@ -89,6 +90,7 @@ pub struct Target {
|
|||||||
pub cc: Option<PathBuf>,
|
pub cc: Option<PathBuf>,
|
||||||
pub cxx: Option<PathBuf>,
|
pub cxx: Option<PathBuf>,
|
||||||
pub ndk: Option<PathBuf>,
|
pub ndk: Option<PathBuf>,
|
||||||
|
pub musl_root: Option<PathBuf>,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Structure of the `config.toml` file that configuration is read from.
|
/// Structure of the `config.toml` file that configuration is read from.
|
||||||
|
@ -118,10 +118,6 @@
|
|||||||
# nightly features
|
# nightly features
|
||||||
#channel = "dev"
|
#channel = "dev"
|
||||||
|
|
||||||
# The root location of the MUSL installation directory. The library directory
|
|
||||||
# will also need to contain libunwind.a for an unwinding implementation.
|
|
||||||
#musl-root = "..."
|
|
||||||
|
|
||||||
# By default the `rustc` executable is built with `-Wl,-rpath` flags on Unix
|
# By default the `rustc` executable is built with `-Wl,-rpath` flags on Unix
|
||||||
# platforms to ensure that the compiler is usable by default from the build
|
# platforms to ensure that the compiler is usable by default from the build
|
||||||
# directory (as it links to a number of dynamic libraries). This may not be
|
# directory (as it links to a number of dynamic libraries). This may not be
|
||||||
@ -167,3 +163,9 @@
|
|||||||
# the NDK for the target lives. This is used to find the C compiler to link and
|
# the NDK for the target lives. This is used to find the C compiler to link and
|
||||||
# build native code.
|
# build native code.
|
||||||
#android-ndk = "/path/to/ndk"
|
#android-ndk = "/path/to/ndk"
|
||||||
|
|
||||||
|
# The root location of the MUSL installation directory. The library directory
|
||||||
|
# will also need to contain libunwind.a for an unwinding implementation. Note
|
||||||
|
# that this option only makes sense for MUSL targets that produce statically
|
||||||
|
# linked binaries
|
||||||
|
#musl-root = "..."
|
||||||
|
@ -977,6 +977,13 @@ impl Build {
|
|||||||
}
|
}
|
||||||
return base
|
return base
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Returns the "musl root" for this `target`, if defined
|
||||||
|
fn musl_root(&self, target: &str) -> Option<&Path> {
|
||||||
|
self.config.target_config[target].musl_root.as_ref()
|
||||||
|
.or(self.config.musl_root.as_ref())
|
||||||
|
.map(|p| &**p)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> Compiler<'a> {
|
impl<'a> Compiler<'a> {
|
||||||
|
@ -111,8 +111,8 @@ pub fn check(build: &mut Build) {
|
|||||||
|
|
||||||
// Make sure musl-root is valid if specified
|
// Make sure musl-root is valid if specified
|
||||||
if target.contains("musl") && !target.contains("mips") {
|
if target.contains("musl") && !target.contains("mips") {
|
||||||
match build.config.musl_root {
|
match build.musl_root(target) {
|
||||||
Some(ref root) => {
|
Some(root) => {
|
||||||
if fs::metadata(root.join("lib/libc.a")).is_err() {
|
if fs::metadata(root.join("lib/libc.a")).is_err() {
|
||||||
panic!("couldn't find libc.a in musl dir: {}",
|
panic!("couldn't find libc.a in musl dir: {}",
|
||||||
root.join("lib").display());
|
root.join("lib").display());
|
||||||
@ -123,8 +123,9 @@ pub fn check(build: &mut Build) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
None => {
|
None => {
|
||||||
panic!("when targeting MUSL the build.musl-root option \
|
panic!("when targeting MUSL either the build.musl-root \
|
||||||
must be specified in config.toml")
|
option or the target.$TARGET.musl-root one must \
|
||||||
|
be specified in config.toml")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user