From 8cecd4291e9b191dde854e5ccaca63b6dadab3f1 Mon Sep 17 00:00:00 2001 From: Gyeongjae Choi Date: Thu, 12 Feb 2026 23:19:03 +0900 Subject: [PATCH 1/2] Stop adding link-native-libraries flag by default in Emscripten platform --- src/compile.rs | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/compile.rs b/src/compile.rs index 71b7d41e6..c45572515 100644 --- a/src/compile.rs +++ b/src/compile.rs @@ -245,16 +245,6 @@ fn cargo_build_command( cargo_rustc.args.extend(mac_args); } } else if target.is_emscripten() { - // Allow user to override these default flags - if !rustflags - .flags - .iter() - .any(|f| f.contains("link-native-libraries")) - { - debug!("Setting `-Z link-native-libraries=no` for Emscripten"); - rustflags.push("-Z"); - rustflags.push("link-native-libraries=no"); - } let mut emscripten_args = Vec::new(); // Allow user to override these default settings if !cargo_rustc From 2456832464cdd9ac6858a0fcde0ee5e499b9176a Mon Sep 17 00:00:00 2001 From: Gyeongjae Choi Date: Fri, 13 Feb 2026 01:11:21 +0900 Subject: [PATCH 2/2] Only set link-native-libraries flag before rust 1.93.0 --- src/compile.rs | 17 ++++++++++++++++- src/target/mod.rs | 1 + 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/compile.rs b/src/compile.rs index c45572515..47557b875 100644 --- a/src/compile.rs +++ b/src/compile.rs @@ -1,6 +1,6 @@ #[cfg(feature = "zig")] use crate::PlatformTag; -use crate::target::RUST_1_64_0; +use crate::target::{RUST_1_64_0, RUST_1_93_0}; use crate::{BridgeModel, BuildContext, PythonInterpreter, Target}; use anyhow::{Context, Result, anyhow, bail}; use cargo_metadata::CrateType; @@ -245,6 +245,21 @@ fn cargo_build_command( cargo_rustc.args.extend(mac_args); } } else if target.is_emscripten() { + // The -Z link-native-libraries=no flag is needed for older Rust versions + // where Emscripten builds fail without it due to the behavior that it links + // libc automatically. + // From Rust 1.93.0, it is possible to build Emscripten with stable toolchain + // and this flag can be and should be removed. + if target.rustc_version.semver < RUST_1_93_0 + && !rustflags + .flags + .iter() + .any(|f| f.contains("link-native-libraries")) + { + debug!("Setting `-Z link-native-libraries=no` for Emscripten (rust < 1.93.0)"); + rustflags.push("-Z"); + rustflags.push("link-native-libraries=no"); + } let mut emscripten_args = Vec::new(); // Allow user to override these default settings if !cargo_rustc diff --git a/src/target/mod.rs b/src/target/mod.rs index 8838d84a5..d15a58ec9 100644 --- a/src/target/mod.rs +++ b/src/target/mod.rs @@ -23,6 +23,7 @@ mod pypi_tags; pub use pypi_tags::{is_arch_supported_by_pypi, validate_wheel_filename_for_pypi}; pub(crate) const RUST_1_64_0: semver::Version = semver::Version::new(1, 64, 0); +pub(crate) const RUST_1_93_0: semver::Version = semver::Version::new(1, 93, 0); /// All supported operating system #[derive(Debug, Clone, Copy, Eq, PartialEq, Hash, Deserialize)]