mirror of
https://github.com/rust-lang/rust.git
synced 2025-09-28 13:46:03 +00:00

I missed this target when I changed all the other tier 3 targets. Only realized that this one was still statically linked when I looked at the list of targets in the test later. Signed-off-by: Jens Reidel <adrian@travitia.xyz>
68 lines
2.1 KiB
Rust
68 lines
2.1 KiB
Rust
use run_make_support::{rustc, serde_json};
|
|
|
|
// Please do NOT add more targets to this list!
|
|
// Per https://github.com/rust-lang/compiler-team/issues/422,
|
|
// we should be trying to move these targets to dynamically link
|
|
// musl libc by default.
|
|
//@ needs-llvm-components: aarch64 arm powerpc x86
|
|
static LEGACY_STATIC_LINKING_TARGETS: &[&'static str] = &[
|
|
"aarch64-unknown-linux-musl",
|
|
"arm-unknown-linux-musleabi",
|
|
"arm-unknown-linux-musleabihf",
|
|
"armv5te-unknown-linux-musleabi",
|
|
"armv7-unknown-linux-musleabi",
|
|
"armv7-unknown-linux-musleabihf",
|
|
"i586-unknown-linux-musl",
|
|
"i686-unknown-linux-musl",
|
|
"powerpc64le-unknown-linux-musl",
|
|
"x86_64-unknown-linux-musl",
|
|
];
|
|
|
|
fn main() {
|
|
let targets = rustc().print("target-list").run().stdout_utf8();
|
|
|
|
for target in targets.lines() {
|
|
let abi = target.split('-').last().unwrap();
|
|
|
|
if !abi.starts_with("musl") {
|
|
continue;
|
|
}
|
|
|
|
let target_spec_json = rustc()
|
|
.print("target-spec-json")
|
|
.target(target)
|
|
.arg("-Zunstable-options")
|
|
.run()
|
|
.stdout_utf8();
|
|
|
|
let target_spec: serde_json::Value =
|
|
serde_json::from_str(&target_spec_json).expect("failed to parse target-spec-json");
|
|
|
|
let target_families = &target_spec["target-family"];
|
|
// WebAssembly doesn't support dynamic linking yet; all musl targets
|
|
// need to be statically linked.
|
|
if target_families
|
|
.as_array()
|
|
.expect("target-family wasn't an array")
|
|
.iter()
|
|
.filter_map(|x| x.as_str())
|
|
.any(|family| family == "wasm")
|
|
{
|
|
continue;
|
|
}
|
|
|
|
let default = &target_spec["crt-static-default"];
|
|
// If the value is `null`, then the default to dynamically link from
|
|
// musl_base was not overridden.
|
|
if default.is_null() {
|
|
continue;
|
|
}
|
|
|
|
if default.as_bool().expect("wasn't a boolean")
|
|
&& !LEGACY_STATIC_LINKING_TARGETS.contains(&target)
|
|
{
|
|
panic!("{target} statically links musl libc when it should dynamically link it");
|
|
}
|
|
}
|
|
}
|