Skip to content

Commit

Permalink
Do not use xwin to compile on Windows when MSVC compiler can build …
Browse files Browse the repository at this point in the history
…for the target (#2353)
  • Loading branch information
messense authored Dec 1, 2024
1 parent 5708c78 commit b78b6bd
Show file tree
Hide file tree
Showing 5 changed files with 24 additions and 4 deletions.
4 changes: 2 additions & 2 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ clap_complete_command = { version = "0.6.1", optional = true }

# cross compile
cargo-zigbuild = { version = "0.19.5", default-features = false, optional = true }
cargo-xwin = { version = "0.17.4", default-features = false, optional = true }
cargo-xwin = { version = "0.17.5", default-features = false, optional = true }

# log
tracing = "0.1.36"
Expand Down
1 change: 1 addition & 0 deletions guide/src/environment-variables.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,5 +34,6 @@ See [environment variables Cargo reads](https://doc.rust-lang.org/cargo/referenc
* `SOURCE_DATE_EPOCH`: The time to use for the timestamp in the wheel metadata
* `MATURIN_EMSCRIPTEN_VERSION`: The version of emscripten to use for emscripten builds
* `MATURIN_NO_MISSING_BUILD_BACKEND_WARNING`: Suppress missing build backend warning
* `MATURIN_USE_XWIN`: Set to `1` to force to use `xwin` for cross compiling even on Windows that supports native compilation
* `TARGET_SYSROOT`: The sysroot to use for auditwheel wheel when cross compiling
* `ARCHFLAGS`: Flags to control the architecture of the build on macOS, for example you can use `ARCHFLAGS="-arch x86_64 -arch arm64"` to build universal2 wheels
6 changes: 5 additions & 1 deletion src/compile.rs
Original file line number Diff line number Diff line change
Expand Up @@ -287,9 +287,12 @@ fn cargo_build_command(
.extend(["-C".to_string(), "strip=symbols".to_string()]);
}

let mut build_command = if target.is_msvc() && target.cross_compiling() {
let mut build_command = if target.is_msvc()
&& (target.cross_compiling() || env::var("MATURIN_USE_XWIN").ok().as_deref() == Some("1"))
{
#[cfg(feature = "xwin")]
{
println!("🛠️ Using xwin for cross-compiling to {target_triple}");
let xwin_options = {
use clap::Parser;

Expand Down Expand Up @@ -320,6 +323,7 @@ fn cargo_build_command(
build.target = vec![target_triple.to_string()];
}
} else {
println!("🛠️ Using zig for cross-compiling to {target_triple}");
build.enable_zig_ar = true;
let zig_triple = if target.is_linux() && !target.is_musl_libc() {
match context.platform_tag.iter().find(|tag| tag.is_manylinux()) {
Expand Down
15 changes: 15 additions & 0 deletions src/cross_compile.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,21 @@ pub fn is_cross_compiling(target: &Target) -> Result<bool> {
// Not cross-compiling to compile for 32-bit Python from windows 64-bit
return Ok(false);
}
if (target_triple == "aarch64-pc-windows-msvc" && host == "x86_64-pc-windows-msvc")
|| (target_triple == "x86_64-pc-windows-msvc" && host == "aarch64-pc-windows-msvc")
{
// Not cross-compiling if the Windows MSVC compiler can compile to the target
let native_compile = cc::Build::new()
.opt_level(0)
.host(host)
.target(target_triple)
.cargo_metadata(false)
.cargo_warnings(false)
.cargo_output(false)
.try_get_compiler()
.is_ok();
return Ok(!native_compile);
}
if target_triple.ends_with("windows-gnu") && host.ends_with("windows-msvc") {
// Not cross-compiling to compile for Windows GNU from Windows MSVC host
return Ok(false);
Expand Down

0 comments on commit b78b6bd

Please sign in to comment.