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