Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Warn about incompatible targets for musllinux #1701

Merged
merged 1 commit into from
Jul 26, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 5 additions & 3 deletions src/build_options.rs
Original file line number Diff line number Diff line change
Expand Up @@ -591,7 +591,7 @@ impl BuildOptions {
x.compatibility()
})
.or(if use_zig {
if target.is_musl_target() {
if target.is_musl_libc() {
// Zig bundles musl 1.2
Some(PlatformTag::Musllinux { x: 1, y: 2 })
} else {
Expand All @@ -601,7 +601,7 @@ impl BuildOptions {
}
} else {
// Defaults to musllinux_1_2 for musl target if it's not bin bindings
if target.is_musl_target() && !bridge.is_bin() {
if target.is_musl_libc() && !bridge.is_bin() {
Some(PlatformTag::Musllinux { x: 1, y: 2 })
} else {
None
Expand All @@ -619,6 +619,8 @@ impl BuildOptions {
for platform_tag in &platform_tags {
if !platform_tag.is_supported() {
eprintln!("⚠️ Warning: {platform_tag} is unsupported by the Rust compiler.");
} else if platform_tag.is_musllinux() && !target.is_musl_libc() {
eprintln!("⚠️ Warning: {target} is not compatible with {platform_tag}.");
}
}

Expand Down Expand Up @@ -686,7 +688,7 @@ fn validate_bridge_type(
match bridge {
BridgeModel::Bin(None) => {
// Only support two different kind of platform tags when compiling to musl target without any binding crates
if platform_tags.iter().any(|tag| tag.is_musllinux()) && !target.is_musl_target() {
if platform_tags.iter().any(|tag| tag.is_musllinux()) && !target.is_musl_libc() {
bail!(
"Cannot mix musllinux and manylinux platform tags when compiling to {}",
target.target_triple()
Expand Down
4 changes: 2 additions & 2 deletions src/compile.rs
Original file line number Diff line number Diff line change
Expand Up @@ -197,7 +197,7 @@ fn compile_target(
// https://github.com/rust-lang/rust/issues/59302#issue-422994250
// We must only do this for libraries as it breaks binaries
// For some reason this value is ignored when passed as rustc argument
if context.target.is_musl_target()
if context.target.is_musl_libc()
&& !rustflags
.flags
.iter()
Expand Down Expand Up @@ -300,7 +300,7 @@ fn compile_target(
}
} else {
build.enable_zig_ar = true;
let zig_triple = if target.is_linux() && !target.is_musl_target() {
let zig_triple = if target.is_linux() && !target.is_musl_libc() {
match context.platform_tag.iter().find(|tag| tag.is_manylinux()) {
Some(PlatformTag::Manylinux { x, y }) => {
format!("{target_triple}.{x}.{y}")
Expand Down
8 changes: 7 additions & 1 deletion src/target.rs
Original file line number Diff line number Diff line change
Expand Up @@ -190,6 +190,12 @@ pub struct Target {
pub(crate) user_specified: bool,
}

impl fmt::Display for Target {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "{}", self.triple)
}
}

impl Target {
/// Uses the given target triple or tries the guess the current target by using the one used
/// for compilation
Expand Down Expand Up @@ -502,7 +508,7 @@ impl Target {

/// Returns true if the current platform's target env is Musl
#[inline]
pub fn is_musl_target(&self) -> bool {
pub fn is_musl_libc(&self) -> bool {
matches!(
self.env,
Environment::Musl
Expand Down
2 changes: 1 addition & 1 deletion tests/common/integration.rs
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ pub fn test_integration(
for ((filename, supported_version), python_interpreter) in wheels.iter().zip(interpreter) {
if test_zig
&& build_context.target.is_linux()
&& !build_context.target.is_musl_target()
&& !build_context.target.is_musl_libc()
&& build_context.target.get_minimum_manylinux_tag() != PlatformTag::Linux
{
let rustc_ver = rustc_version::version()?;
Expand Down