From 282749749da38aa746e403ce8f2cf1ed50f49845 Mon Sep 17 00:00:00 2001 From: Michal Rostecki Date: Tue, 11 Nov 2025 14:19:40 +0100 Subject: [PATCH] dev-lang/rust: Require clang when building WASM sysroot MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit GCC does not support WASM. Require clang to build C code for WASM target and make sure it's actually used. [mgorny: added strip-unsupported-flags too] Bug: https://bugs.gentoo.org/965346 Signed-off-by: Michal Rostecki Part-of: https://github.com/gentoo/gentoo/pull/44594 Closes: https://github.com/gentoo/gentoo/pull/44594 Signed-off-by: Michał Górny --- dev-lang/rust/rust-1.92.0_p1-r1.ebuild | 17 ++++++++++++++++- dev-lang/rust/rust-9999.ebuild | 17 ++++++++++++++++- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/dev-lang/rust/rust-1.92.0_p1-r1.ebuild b/dev-lang/rust/rust-1.92.0_p1-r1.ebuild index f5073db6688b3..6086b58e2f2fa 100644 --- a/dev-lang/rust/rust-1.92.0_p1-r1.ebuild +++ b/dev-lang/rust/rust-1.92.0_p1-r1.ebuild @@ -125,6 +125,7 @@ BDEPEND=" sys-devel/mold ) ) ) + rust_sysroots_wasm? ( llvm-core/clang ) !system-llvm? ( >=dev-build/cmake-3.13.4 app-alternatives/ninja @@ -587,9 +588,23 @@ src_configure() { done if use rust_sysroots_wasm; then wasm_target="wasm32-unknown-unknown" - export CFLAGS_${wasm_target//-/_}="$(filter-flags '-mcpu*' '-march*' '-mtune*'; echo "$CFLAGS")" + if tc-is-clang; then + local wasm_cc=$(tc-getCC) + local wasm_cxx=$(tc-getCXX) + else + local wasm_cc=${CHOST}-clang + local wasm_cxx=${CHOST}-clang++ + fi + export CFLAGS_${wasm_target//-/_}="$( + CC="${wasm_cc} --target=wasm32-unknown-unknown" + filter-flags '-mcpu*' '-march*' '-mtune*' + strip-unsupported-flags + echo "${CFLAGS}" + )" cat <<- _EOF_ >> "${S}"/bootstrap.toml [target.wasm32-unknown-unknown] + cc = "${wasm_cc}" + cxx = "${wasm_cxx}" linker = "$(usex system-llvm lld rust-lld)" # wasm target does not have profiler_builtins https://bugs.gentoo.org/848483 profiler = false diff --git a/dev-lang/rust/rust-9999.ebuild b/dev-lang/rust/rust-9999.ebuild index f5073db6688b3..6086b58e2f2fa 100644 --- a/dev-lang/rust/rust-9999.ebuild +++ b/dev-lang/rust/rust-9999.ebuild @@ -125,6 +125,7 @@ BDEPEND=" sys-devel/mold ) ) ) + rust_sysroots_wasm? ( llvm-core/clang ) !system-llvm? ( >=dev-build/cmake-3.13.4 app-alternatives/ninja @@ -587,9 +588,23 @@ src_configure() { done if use rust_sysroots_wasm; then wasm_target="wasm32-unknown-unknown" - export CFLAGS_${wasm_target//-/_}="$(filter-flags '-mcpu*' '-march*' '-mtune*'; echo "$CFLAGS")" + if tc-is-clang; then + local wasm_cc=$(tc-getCC) + local wasm_cxx=$(tc-getCXX) + else + local wasm_cc=${CHOST}-clang + local wasm_cxx=${CHOST}-clang++ + fi + export CFLAGS_${wasm_target//-/_}="$( + CC="${wasm_cc} --target=wasm32-unknown-unknown" + filter-flags '-mcpu*' '-march*' '-mtune*' + strip-unsupported-flags + echo "${CFLAGS}" + )" cat <<- _EOF_ >> "${S}"/bootstrap.toml [target.wasm32-unknown-unknown] + cc = "${wasm_cc}" + cxx = "${wasm_cxx}" linker = "$(usex system-llvm lld rust-lld)" # wasm target does not have profiler_builtins https://bugs.gentoo.org/848483 profiler = false