From 966d3c72b561720446b827a3df436e6d10faafc3 Mon Sep 17 00:00:00 2001 From: StackOverflowExcept1on <109800286+StackOverflowExcept1on@users.noreply.github.com> Date: Sat, 16 Aug 2025 14:46:15 +0300 Subject: [PATCH 1/2] fix: add `-mcpu=mvp` for `wasm32v1-none` --- src/lib.rs | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 6c41d3e6e..009081757 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -2308,9 +2308,12 @@ impl Build { None }; - let clang_target = - target.llvm_target(&self.get_raw_target()?, version.as_deref()); + let rustc_target = self.get_raw_target()?; + let clang_target = target.llvm_target(&rustc_target, version.as_deref()); cmd.push_cc_arg(format!("--target={clang_target}").into()); + if rustc_target == "wasm32v1-none" { + cmd.push_cc_arg("-mcpu=mvp".into()); + } } } ToolFamily::Msvc { clang_cl } => { @@ -2335,13 +2338,13 @@ impl Build { // . cmd.push_cc_arg("-arch:SSE2".into()); } else { + let rustc_target = self.get_raw_target()?; cmd.push_cc_arg( - format!( - "--target={}", - target.llvm_target(&self.get_raw_target()?, None) - ) - .into(), + format!("--target={}", target.llvm_target(&rustc_target, None)).into(), ); + if rustc_target == "wasm32v1-none" { + cmd.push_cc_arg("-mcpu=mvp".into()); + } } } else if target.full_arch == "i586" { cmd.push_cc_arg("-arch:IA32".into()); From 22a0c295f743db8fadb47adcfba2fc1c3a1f23be Mon Sep 17 00:00:00 2001 From: StackOverflowExcept1on <109800286+StackOverflowExcept1on@users.noreply.github.com> Date: Mon, 18 Aug 2025 11:50:49 +0300 Subject: [PATCH 2/2] fix review --- src/lib.rs | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 009081757..51bc39d7f 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -2308,12 +2308,9 @@ impl Build { None }; - let rustc_target = self.get_raw_target()?; - let clang_target = target.llvm_target(&rustc_target, version.as_deref()); + let clang_target = + target.llvm_target(&self.get_raw_target()?, version.as_deref()); cmd.push_cc_arg(format!("--target={clang_target}").into()); - if rustc_target == "wasm32v1-none" { - cmd.push_cc_arg("-mcpu=mvp".into()); - } } } ToolFamily::Msvc { clang_cl } => { @@ -2338,13 +2335,13 @@ impl Build { // . cmd.push_cc_arg("-arch:SSE2".into()); } else { - let rustc_target = self.get_raw_target()?; cmd.push_cc_arg( - format!("--target={}", target.llvm_target(&rustc_target, None)).into(), + format!( + "--target={}", + target.llvm_target(&self.get_raw_target()?, None) + ) + .into(), ); - if rustc_target == "wasm32v1-none" { - cmd.push_cc_arg("-mcpu=mvp".into()); - } } } else if target.full_arch == "i586" { cmd.push_cc_arg("-arch:IA32".into()); @@ -2534,6 +2531,13 @@ impl Build { } } + if raw_target == "wasm32v1-none" { + // `wasm32v1-none` target only exists in `rustc`, so we need to change the compilation flags: + // https://doc.rust-lang.org/rustc/platform-support/wasm32v1-none.html + cmd.push_cc_arg("-mcpu=mvp".into()); + cmd.push_cc_arg("-mmutable-globals".into()); + } + if target.os == "solaris" || target.os == "illumos" { // On Solaris and illumos, multi-threaded C programs must be built with `_REENTRANT` // defined. This configures headers to define APIs appropriately for multi-threaded