commit:     f30ded34c4c08befbbfed980f64c67230a366f83
Author:     Michal Rostecki <vadorovsky <AT> protonmail <DOT> com>
AuthorDate: Sat Sep 13 07:48:13 2025 +0000
Commit:     Matt Jolly <kangie <AT> gentoo <DOT> org>
CommitDate: Fri Oct 10 10:29:36 2025 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=f30ded34

dev-lang/rust: Add `RUST_SYSROOTS` as `USE_EXPAND` variable

Add a new `USE_EXPAND` variable called `RUST_SYSROOTS` which allows to
specify additional Rust sysroots to build. Rust sysroot is a directory
which contains the prebuilt standard libraries (in form of `*.rlib`
files) and utility binaries (e.g. `rust-objcopy`).

This variable is limited to bare metal targets. Sysroot for targets not
falling into that category contain a local copy of compiler runtime,
libc and unwinder, so crossdev is a better fit for them.

In this change, the only `RUST_SYSROOT` option is `wasm`, which enables
build of a sysroot for `wasm32-unknown-unknown` target and replaces the
former `wasm` USE flag.

Signed-off-by: Michal Rostecki <vadorovsky <AT> protonmail.com>
Signed-off-by: Matt Jolly <kangie <AT> gentoo.org>

 dev-lang/rust/rust-9999.ebuild   | 26 ++++++++++++++++++--------
 profiles/base/make.defaults      |  2 +-
 profiles/desc/rust_sysroots.desc |  5 +++++
 3 files changed, 24 insertions(+), 9 deletions(-)

diff --git a/dev-lang/rust/rust-9999.ebuild b/dev-lang/rust/rust-9999.ebuild
index b1aa0b11704c..a4cb917d4933 100644
--- a/dev-lang/rust/rust-9999.ebuild
+++ b/dev-lang/rust/rust-9999.ebuild
@@ -62,10 +62,15 @@ for _x in "${_ALL_RUST_EXPERIMENTAL_TARGETS[@]}"; do
        ALL_RUST_EXPERIMENTAL_TARGETS["llvm_targets_${_x}"]=0
 done
 
+# Bare metal targets which can be built on the host system and have no
+# dependency on compiler runtime, libc and unwinder.
+ALL_RUST_SYSROOTS=( bpf wasm )
+ALL_RUST_SYSROOTS=( "${ALL_RUST_SYSROOTS[@]/#/rust_sysroots_}" )
+
 LICENSE="|| ( MIT Apache-2.0 ) BSD BSD-1 BSD-2 BSD-4"
 SLOT="${PV%%_*}" # Beta releases get to share the same SLOT as the eventual 
stable
 
-IUSE="big-endian clippy cpu_flags_x86_sse2 debug dist doc llvm-libunwind lto 
rustfmt rust-analyzer rust-src +system-llvm test wasm ${ALL_LLVM_TARGETS[*]}"
+IUSE="big-endian clippy cpu_flags_x86_sse2 debug dist doc llvm-libunwind lto 
rustfmt rust-analyzer rust-src system-llvm test ${ALL_LLVM_TARGETS[*]} 
${ALL_RUST_SYSROOTS[*]}"
 
 if [[ ${PV} = *9999* ]]; then
        # These USE flags require nightly rust
@@ -80,7 +85,7 @@ for _x in "${ALL_LLVM_TARGETS[@]}"; do
                ALL_RUST_EXPERIMENTAL_TARGETS["${_x}"]=1
        fi
 done
-LLVM_DEPEND+=( "       wasm? ( $(llvm_gen_dep 'llvm-core/lld:${LLVM_SLOT}') )" 
)
+LLVM_DEPEND+=( "       rust_sysroots_wasm? ( $(llvm_gen_dep 
'llvm-core/lld:${LLVM_SLOT}') )" )
 LLVM_DEPEND+=( "       $(llvm_gen_dep 'llvm-core/llvm:${LLVM_SLOT}')" )
 
 # dev-libs/oniguruma is used for documentation
@@ -132,7 +137,8 @@ RDEPEND="${DEPEND}
 REQUIRED_USE="|| ( ${ALL_LLVM_TARGETS[*]} )
        rust-analyzer? ( rust-src )
        test? ( ${ALL_LLVM_TARGETS[*]} )
-       wasm? ( llvm_targets_WebAssembly )
+       rust_sysroots_bpf? ( llvm_targets_BPF )
+       rust_sysroots_wasm? ( llvm_targets_WebAssembly )
        x86? ( cpu_flags_x86_sse2 )
 "
 
@@ -194,7 +200,8 @@ pre_build_checks() {
                        M=$(( $(usex ${ltarget} 256 0) + ${M} ))
                done
        fi
-       M=$(( $(usex wasm 256 0) + ${M} ))
+       M=$(( $(usex rust_sysroots_bpf 256 0) + ${M} ))
+       M=$(( $(usex rust_sysroots_wasm 256 0) + ${M} ))
        M=$(( $(usex debug 2 1) * ${M} ))
        eshopts_push -s extglob
        if is-flagq '-g?(gdb)?([1-9])'; then
@@ -355,7 +362,10 @@ src_configure() {
        for v in $(multilib_get_enabled_abi_pairs); do
                rust_targets+=",\"$(rust_abi $(get_abi_CHOST ${v##*.}))\""
        done
-       if use wasm; then
+       if use rust_sysroots_bpf; then
+               rust_targets+=",\"bpfeb-unknown-none\",\"bpfel-unknown-none\""
+       fi
+       if use rust_sysroots_wasm; then
                rust_targets+=",\"wasm32-unknown-unknown\""
                if use system-llvm; then
                        # un-hardcode rust-lld linker for this target
@@ -505,14 +515,14 @@ src_configure() {
                omit-git-hash = false
                dist-src = false
                remap-debuginfo = true
-               lld = $(usex system-llvm false $(toml_usex wasm))
+               lld = $(usex system-llvm false $(toml_usex rust_sysroots_wasm))
                $(if use lto && tc-is-clang && ! tc-ld-is-mold; then
                        echo "use-lld = true"
                fi)
                # only deny warnings if doc+wasm are NOT requested, documenting 
stage0 wasm std fails without it
                # https://github.com/rust-lang/rust/issues/74976
                # https://github.com/rust-lang/rust/issues/76526
-               deny-warnings = $(usex wasm $(usex doc false true) true)
+               deny-warnings = $(usex rust_sysroots_wasm $(usex doc false 
true) true)
                backtrace-on-ice = true
                jemalloc = false
                # See https://github.com/rust-lang/rust/issues/121124
@@ -552,7 +562,7 @@ src_configure() {
                        _EOF_
                fi
        done
-       if use wasm; then
+       if use rust_sysroots_wasm; then
                wasm_target="wasm32-unknown-unknown"
                export CFLAGS_${wasm_target//-/_}="$(filter-flags '-mcpu*' 
'-march*' '-mtune*'; echo "$CFLAGS")"
                cat <<- _EOF_ >> "${S}"/bootstrap.toml

diff --git a/profiles/base/make.defaults b/profiles/base/make.defaults
index 3dc31380bf2b..8f203780d731 100644
--- a/profiles/base/make.defaults
+++ b/profiles/base/make.defaults
@@ -12,7 +12,7 @@ USE_EXPAND_VALUES_KERNEL="Darwin linux SunOS"
 
 # Env vars to expand into USE vars.  Modifying this requires prior
 # discussion on [email protected].
-USE_EXPAND="ABI_MIPS ABI_S390 ABI_X86 ADA_TARGET ALSA_CARDS AMDGPU_TARGETS 
APACHE2_MODULES APACHE2_MPMS CALLIGRA_FEATURES CAMERAS COLLECTD_PLUGINS 
CPU_FLAGS_ARM CPU_FLAGS_PPC CPU_FLAGS_X86 CURL_SSL CURL_QUIC ELIBC FFTOOLS 
GPSD_PROTOCOLS GRUB_PLATFORMS GUILE_SINGLE_TARGET GUILE_TARGETS INPUT_DEVICES 
KERNEL L10N LCD_DEVICES LIBREOFFICE_EXTENSIONS LLVM_SLOT LLVM_TARGETS 
LUA_SINGLE_TARGET LUA_TARGETS NGINX_MODULES_HTTP NGINX_MODULES_MAIL 
NGINX_MODULES_STREAM OFFICE_IMPLEMENTATION OPENMPI_FABRICS 
OPENMPI_OFED_FEATURES OPENMPI_RM PERL_FEATURES PHP_TARGETS POSTGRES_TARGETS 
PYTHON_SINGLE_TARGET PYTHON_TARGETS QEMU_SOFTMMU_TARGETS QEMU_USER_TARGETS 
RUBY_TARGETS SANE_BACKENDS UWSGI_PLUGINS VIDEO_CARDS VOICEMAIL_STORAGE 
XTABLES_ADDONS"
+USE_EXPAND="ABI_MIPS ABI_S390 ABI_X86 ADA_TARGET ALSA_CARDS AMDGPU_TARGETS 
APACHE2_MODULES APACHE2_MPMS CALLIGRA_FEATURES CAMERAS COLLECTD_PLUGINS 
CPU_FLAGS_ARM CPU_FLAGS_PPC CPU_FLAGS_X86 CURL_SSL CURL_QUIC ELIBC FFTOOLS 
GPSD_PROTOCOLS GRUB_PLATFORMS GUILE_SINGLE_TARGET GUILE_TARGETS INPUT_DEVICES 
KERNEL L10N LCD_DEVICES LIBREOFFICE_EXTENSIONS LLVM_SLOT LLVM_TARGETS 
LUA_SINGLE_TARGET LUA_TARGETS NGINX_MODULES_HTTP NGINX_MODULES_MAIL 
NGINX_MODULES_STREAM OFFICE_IMPLEMENTATION OPENMPI_FABRICS 
OPENMPI_OFED_FEATURES OPENMPI_RM PERL_FEATURES PHP_TARGETS POSTGRES_TARGETS 
PYTHON_SINGLE_TARGET PYTHON_TARGETS RUST_SYSROOTS QEMU_SOFTMMU_TARGETS 
QEMU_USER_TARGETS RUBY_TARGETS SANE_BACKENDS RUST_SYSROOTS UWSGI_PLUGINS 
VIDEO_CARDS VOICEMAIL_STORAGE XTABLES_ADDONS"
 
 # USE_EXPAND variables whose contents are not shown in package manager
 # output. Changes need discussion on gentoo-dev.

diff --git a/profiles/desc/rust_sysroots.desc b/profiles/desc/rust_sysroots.desc
new file mode 100644
index 000000000000..fe9fcdacf5fc
--- /dev/null
+++ b/profiles/desc/rust_sysroots.desc
@@ -0,0 +1,5 @@
+# Copyright 2025 Gentoo Authors.
+# Distributed under the terms of the GNU General Public License v2
+
+bpf - Berkeley Packet Filter target
+wasm - WebAssembly target

Reply via email to