diff --git a/src/compile.rs b/src/compile.rs index cc6a84b42..efea5c2b4 100644 --- a/src/compile.rs +++ b/src/compile.rs @@ -290,6 +290,7 @@ fn cargo_build_command( let mut build_command = if target.is_msvc() && target.cross_compiling() { #[cfg(feature = "xwin")] { + println!("🛠️ Using xwin for cross-compiling to {target_triple}"); let xwin_options = { use clap::Parser; @@ -320,6 +321,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()) { diff --git a/src/cross_compile.rs b/src/cross_compile.rs index 57428015b..3b62a7233 100644 --- a/src/cross_compile.rs +++ b/src/cross_compile.rs @@ -27,6 +27,21 @@ pub fn is_cross_compiling(target: &Target) -> Result { // 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);