gui-wm/niri: fix 32bit build

- pipewire (update to fixed v0.10.0)
- smithay (fix atomics and time)
- niri (fix atomics)

Closes: https://bugs.gentoo.org/979547
Signed-off-by: Pepper Gray <hello@peppergray.xyz>
Part-of: https://github.com/gentoo/guru/pull/516
Closes: https://github.com/gentoo/guru/pull/516
Signed-off-by: David Roman <stkw0@disroot.org>
This commit is contained in:
Pepper Gray authored and David Roman committed 2026-09-08 16:32:49 +02:00
1 parent bdc1c636bc
commit 4aad7bceb6
6 files changed
+383

No files matched your search

+5
View File
@@ -1,2 +1,7 @@
DIST libspa-0.10.0.crate 65520 BLAKE2B 64efa391867506395b605e39154dc9e7b5b19ef46c2fe216bba07e7c8e799a69db9b1696f45c45120044db4b56a50cc901f28f3ed0590e2bc58d17591a400121 SHA512 f48ef83c7c8147dffc8a7dcc49c63a82e7697586d2f84590149cc0544792b9e801891cee343e7a550f3b6550a0d93dd0b276c71e0a0816032a43228bdabbe8e1
DIST libspa-sys-0.10.0.crate 9409 BLAKE2B 3f67f8493e039308f4ef299f66b353ad9844f118c5202d932a4d32e6fb5a35ccc1d4abea408d85e7bbab5fa38d0d2b3f2644063dc69c7a8b6091f527ca12e4a0 SHA512 7521dbae387f1bedb754ee58babe649f1dae8aba2dffccdb4511de49363be2ab0917c4910b4edc44f06e9aadcbb6716393d3a2991ca11423715694001ccfffe6
DIST niri-26.04-vendored-dependencies.tar.xz 40263284 BLAKE2B 1697516cb3bcc7da314b510e7c3bf816a6d959c2ef2a5f5f883450128f95533ec4c5ec4638442a0c21816dce900af0669db2ad98736951dde3b036c4d2abba61 SHA512 73bdef95320b416b8f51b4dd0dc50c4e48a8724481312ffaf2f8248ef52e66b6d6699cc6b07b849f330c3954c5d3f41248917d31624c15b9d30fe274dad38d35
DIST niri-26.04.tar.gz 967630 BLAKE2B 65fc4df85ab40c1a7a82900a9812c542a8a00467a0f1742f2dede50c0e323bd8957149e91b181a6c71ad077735f6a4db53451bbad0deb768f7d4840ebe798a20 SHA512 ae30446fbf529155907726cf2cba7402bcfc5be2032370d66f9f980efb257f29353b47d495f1218b81ac32c643f15bbb74834dc35882849a4479021b4b9fa97f
DIST pipewire-0.10.0.crate 67352 BLAKE2B b071114c8240751604a00efb3cc1f28f15271e8645440ba93c4395d43784a030a2ddfc12f12028b027f696fb24029aaf45dc25f0693ca8d21dbda805b1dee262 SHA512 f1a56b9a6c222d94ba5bf9e366754b420ad9a3786e558534caf7318c7fb25f5d4c92b04b8537232aa706ae5c9aa7ce510a33a00269c81398ba08f7c36e761b14
DIST pipewire-sys-0.10.0.crate 6401 BLAKE2B 2ccea0f9668af04d56a08ce9e0302583b8edd09a5e002a00a713ab20f902634bff673bc6a8e581b1db6ec881c38e214e0bcb4adf4569bb699e36c74e63a16bd2 SHA512 0055b0d1c82823991bdf7884adc23073b6e61b60c0dac622c1092d67f138fd12579f879e078c944f7f7bbe8af9baa5b8853f051e34dd84c9ad894407f6a81631
DIST portable-atomic-1.14.0.crate 200703 BLAKE2B 2aafdf454dd417cf7a3ff7ff72cca1bb1274918b8b15a0b1ebd4feadc4bafd87544938c26e001e1bb417aafa641521dba40a36ec50db59d03bbdc04d855635f0 SHA512 4c306fb2767b1689be65e57552260c2367f37808d0a32affafa21fddacd330c7735b0c3c8fe456fac10c4088ca5e8ede980b6d6da2171fadb682b925ff9a2c63
@@ -0,0 +1,24 @@
# https://bugs.gentoo.org/979547
# https://github.com/niri-wm/niri/pull/4332
index 49a75e3e..f27f81d5 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -82,6 +82,7 @@ pango = { version = "0.21.5", features = ["v1_44"] }
pangocairo = "0.21.5"
pipewire = { version = "0.10.0", optional = true, features = ["v0_3_33"] }
png = "0.18.1"
+portable-atomic = "1"
profiling = "1.0.17"
sd-notify = "0.5.0"
serde.workspace = true
diff --git a/src/utils/id.rs b/src/utils/id.rs
index c21511e6..04edf599 100644
--- a/src/utils/id.rs
+++ b/src/utils/id.rs
@@ -1,4 +1,5 @@
-use std::sync::atomic::{AtomicU64, Ordering};
+use std::sync::atomic::Ordering;
+use portable_atomic::AtomicU64;
/// Counter that returns unique IDs.
pub struct IdCounter {
@@ -0,0 +1,158 @@
From ef5b7379dc444d33b01a7faec2bd6592d3188357 Mon Sep 17 00:00:00 2001
From: Sertonix <sertonix@posteo.net>
Date: Tue, 7 Jul 2026 23:37:51 +0200
Subject: [PATCH] Upgrade pipewire to 0.10.0
Fixes a few issues when compiling on 32-bit systems
---
Cargo.lock | 47 ++++++++---------------------------
Cargo.toml | 2 +-
src/screencasting/pw_utils.rs | 3 ++-
3 files changed, 14 insertions(+), 38 deletions(-)
diff --git a/Cargo.lock b/Cargo.lock
index 83f4539e94..b77d70dfb7 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -576,7 +576,7 @@ dependencies = [
"async-task",
"bitflags 2.11.1",
"futures-io",
- "nix 0.31.2",
+ "nix",
"polling",
"rustix 1.1.4",
"slab",
@@ -775,15 +775,6 @@ dependencies = [
"windows-sys 0.61.2",
]
-[[package]]
-name = "convert_case"
-version = "0.8.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "baaaa0ecca5b51987b9423ccdc971514dd8b0bb7b4060b983d3664dad3f1f89f"
-dependencies = [
- "unicode-segmentation",
-]
-
[[package]]
name = "cookie-factory"
version = "0.3.3"
@@ -2056,26 +2047,25 @@ dependencies = [
[[package]]
name = "libspa"
-version = "0.9.2"
+version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b6b8cfa2a7656627b4c92c6b9ef929433acd673d5ab3708cda1b18478ac00df4"
+checksum = "2909f3be29d674e7f10604aff18d1bbe1bb03c4cd61c8a8ba19c0b1d162f7d4e"
dependencies = [
"bitflags 2.11.1",
"cc",
- "convert_case",
"cookie-factory",
"libc",
"libspa-sys",
- "nix 0.30.1",
"nom 8.0.0",
+ "rustix 1.1.4",
"system-deps",
]
[[package]]
name = "libspa-sys"
-version = "0.9.2"
+version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "901049455d2eb6decf9058235d745237952f4804bc584c5fcb41412e6adcc6e0"
+checksum = "69ad52764fca54818486f3cf75afec844d1f1a1568c24dcee25d41b1ab007dda"
dependencies = [
"bindgen",
"cc",
@@ -2340,18 +2330,6 @@ dependencies = [
"tracing-subscriber",
]
-[[package]]
-name = "nix"
-version = "0.30.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6"
-dependencies = [
- "bitflags 2.11.1",
- "cfg-if",
- "cfg_aliases",
- "libc",
-]
-
[[package]]
name = "nix"
version = "0.31.2"
@@ -2832,26 +2810,23 @@ dependencies = [
[[package]]
name = "pipewire"
-version = "0.9.2"
+version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9688b89abf11d756499f7c6190711d6dbe5a3acdb30c8fbf001d6596d06a8d44"
+checksum = "8585aba8a52ad74ccc633b8e293c1dc4277976bd5d510b925533f34fd6685f38"
dependencies = [
- "anyhow",
"bitflags 2.11.1",
"libc",
"libspa",
"libspa-sys",
- "nix 0.30.1",
- "once_cell",
"pipewire-sys",
- "thiserror 2.0.18",
+ "rustix 1.1.4",
]
[[package]]
name = "pipewire-sys"
-version = "0.9.2"
+version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cb028afee0d6ca17020b090e3b8fa2d7de23305aef975c7e5192a5050246ea36"
+checksum = "f2089f245b548723e60325773c27f586b7a2372c79ea941b246cd0d654706adc"
dependencies = [
"bindgen",
"libspa-sys",
diff --git a/Cargo.toml b/Cargo.toml
index 8e343be3b0..49a75e3e8e 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -80,7 +80,7 @@ niri-ipc = { version = "26.4.0", path = "niri-ipc", features = ["clap"] }
ordered-float = "5.3.0"
pango = { version = "0.21.5", features = ["v1_44"] }
pangocairo = "0.21.5"
-pipewire = { version = "0.9.2", optional = true, features = ["v0_3_33"] }
+pipewire = { version = "0.10.0", optional = true, features = ["v0_3_33"] }
png = "0.18.1"
profiling = "1.0.17"
sd-notify = "0.5.0"
diff --git a/src/screencasting/pw_utils.rs b/src/screencasting/pw_utils.rs
index cd6908dd1f..76522926e9 100644
--- a/src/screencasting/pw_utils.rs
+++ b/src/screencasting/pw_utils.rs
@@ -14,6 +14,7 @@ use calloop::timer::{TimeoutAction, Timer};
use calloop::RegistrationToken;
use pipewire::context::ContextRc;
use pipewire::core::{CoreRc, PW_ID_CORE};
+use pipewire::loop_::Timeout;
use pipewire::main_loop::MainLoopRc;
use pipewire::properties::PropertiesBox;
use pipewire::spa::buffer::DataType;
@@ -260,7 +261,7 @@ impl PipeWire {
let token = event_loop
.insert_source(generic, move |_, wrapper, _| {
let _span = tracy_client::span!("pipewire iteration");
- wrapper.0.loop_().iterate(Duration::ZERO);
+ wrapper.0.loop_().iterate(Timeout::None);
Ok(PostAction::Continue)
})
.unwrap();
@@ -0,0 +1,156 @@
# https://bugs.gentoo.org/979547
# https://github.com/Smithay/smithay/pull/2103
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -218,7 +218,7 @@
[dependencies]
appendlist = "1.4"
-atomic_float = "1.1.0"
+portable-atomic = { version = "1", features = ["float"] }
bitflags = "2.2.1"
calloop = "0.14.0"
cgmath = "0.18.0"
diff '--color=auto' -ru a/src/backend/x11/window_inner.rs b/src/backend/x11/window_inner.rs
--- a/src/backend/x11/window_inner.rs
+++ b/src/backend/x11/window_inner.rs
@@ -15,9 +15,9 @@
use drm_fourcc::DrmFourcc;
use std::sync::{
Arc, Mutex, Weak,
- atomic::{AtomicU32, AtomicU64},
mpsc::Sender,
};
+use portable_atomic::{AtomicU32, AtomicU64};
use x11rb::{
connection::Connection,
protocol::{
diff '--color=auto' -ru a/src/wayland/compositor/mod.rs b/src/wayland/compositor/mod.rs
--- a/src/wayland/compositor/mod.rs
+++ b/src/wayland/compositor/mod.rs
@@ -124,7 +124,7 @@
use crate::utils::Transform;
pub use crate::utils::hook::HookId;
use crate::utils::{Buffer, Logical, Point, Rectangle, user_data::UserDataMap};
-use atomic_float::AtomicF64;
+use portable_atomic::AtomicF64;
use wayland_server::backend::GlobalId;
use wayland_server::protocol::wl_compositor::WlCompositor;
use wayland_server::protocol::wl_subcompositor::WlSubcompositor;
diff '--color=auto' -ru a/src/wayland/output/handlers.rs b/src/wayland/output/handlers.rs
--- a/src/wayland/output/handlers.rs
+++ b/src/wayland/output/handlers.rs
@@ -1,6 +1,6 @@
use std::sync::{Arc, atomic::Ordering};
-use atomic_float::AtomicF64;
+use portable_atomic::AtomicF64;
use tracing::{trace, warn, warn_span};
use wayland_protocols::xdg::xdg_output::zv1::server::{
zxdg_output_manager_v1::{self, ZxdgOutputManagerV1},
diff '--color=auto' -ru a/src/wayland/output/mod.rs b/src/wayland/output/mod.rs
--- a/src/wayland/output/mod.rs
+++ b/src/wayland/output/mod.rs
@@ -82,7 +82,7 @@
utils::iter::new_locked_obj_iter,
};
-use atomic_float::AtomicF64;
+use portable_atomic::AtomicF64;
use tracing::info;
use wayland_protocols::xdg::xdg_output::zv1::server::zxdg_output_manager_v1::ZxdgOutputManagerV1;
use wayland_server::{
diff '--color=auto' -ru a/src/wayland/pointer_gestures.rs b/src/wayland/pointer_gestures.rs
--- a/src/wayland/pointer_gestures.rs
+++ b/src/wayland/pointer_gestures.rs
@@ -98,7 +98,7 @@
use std::sync::{Arc, Mutex, atomic::Ordering};
-use atomic_float::AtomicF64;
+use portable_atomic::AtomicF64;
use wayland_protocols::wp::pointer_gestures::zv1::server::{
zwp_pointer_gesture_hold_v1::{self, ZwpPointerGestureHoldV1},
zwp_pointer_gesture_pinch_v1::{self, ZwpPointerGesturePinchV1},
diff '--color=auto' -ru a/src/wayland/relative_pointer.rs b/src/wayland/relative_pointer.rs
--- a/src/wayland/relative_pointer.rs
+++ b/src/wayland/relative_pointer.rs
@@ -86,7 +86,7 @@
use std::sync::{Arc, Mutex, atomic::Ordering};
-use atomic_float::AtomicF64;
+use portable_atomic::AtomicF64;
use wayland_protocols::wp::relative_pointer::zv1::server::{
zwp_relative_pointer_manager_v1::{self, ZwpRelativePointerManagerV1},
zwp_relative_pointer_v1::{self, ZwpRelativePointerV1},
diff '--color=auto' -ru a/src/wayland/seat/pointer.rs b/src/wayland/seat/pointer.rs
--- a/src/wayland/seat/pointer.rs
+++ b/src/wayland/seat/pointer.rs
@@ -1,6 +1,6 @@
use std::sync::{Arc, Mutex, atomic::Ordering};
-use atomic_float::AtomicF64;
+use portable_atomic::AtomicF64;
use wayland_server::{
Client, Dispatch, DisplayHandle, Resource, Weak,
backend::{ClientId, ObjectId},
diff '--color=auto' -ru a/src/wayland/seat/touch.rs b/src/wayland/seat/touch.rs
--- a/src/wayland/seat/touch.rs
+++ b/src/wayland/seat/touch.rs
@@ -1,6 +1,6 @@
use std::sync::{Arc, atomic::Ordering};
-use atomic_float::AtomicF64;
+use portable_atomic::AtomicF64;
use wayland_server::{
Dispatch, DisplayHandle, Resource,
backend::ClientId,
diff '--color=auto' -ru a/src/wayland/tablet_manager/tablet_tool.rs b/src/wayland/tablet_manager/tablet_tool.rs
--- a/src/wayland/tablet_manager/tablet_tool.rs
+++ b/src/wayland/tablet_manager/tablet_tool.rs
@@ -7,7 +7,7 @@
use crate::utils::{Client as ClientCoords, Logical, Point};
use crate::wayland::compositor::CompositorHandler;
use crate::wayland::seat::CURSOR_IMAGE_ROLE;
-use atomic_float::AtomicF64;
+use portable_atomic::AtomicF64;
use wayland_protocols::wp::tablet::zv2::server::{
zwp_tablet_seat_v2::ZwpTabletSeatV2,
zwp_tablet_tool_v2::{self, ZwpTabletToolV2},
diff '--color=auto' -ru a/src/xwayland/xwm/dnd.rs b/src/xwayland/xwm/dnd.rs
--- a/src/xwayland/xwm/dnd.rs
+++ b/src/xwayland/xwm/dnd.rs
@@ -10,7 +10,7 @@
},
};
-use atomic_float::AtomicF64;
+use portable_atomic::AtomicF64;
use calloop::LoopHandle;
use rustix::fs::OFlags;
use smallvec::SmallVec;
diff '--color=auto' -ru a/src/xwayland/xwm/mod.rs b/src/xwayland/xwm/mod.rs
--- a/src/xwayland/xwm/mod.rs
+++ b/src/xwayland/xwm/mod.rs
@@ -135,7 +135,7 @@
xwayland_shell::{self, XWaylandShellHandler},
},
};
-use atomic_float::AtomicF64;
+use portable_atomic::AtomicF64;
use calloop::{Interest, LoopHandle, Mode, PostAction, generic::Generic};
use rustix::fs::OFlags;
use std::{
diff '--color=auto' -ru a/src/xwayland/xwm/surface.rs b/src/xwayland/xwm/surface.rs
--- a/src/xwayland/xwm/surface.rs
+++ b/src/xwayland/xwm/surface.rs
@@ -22,7 +22,7 @@
utils::Point,
};
-use atomic_float::AtomicF64;
+use portable_atomic::AtomicF64;
use encoding_rs::WINDOWS_1252;
use std::{
borrow::Cow,
@@ -0,0 +1,23 @@
From 5cf22d6b8994c12389cca60b8873812695121205 Mon Sep 17 00:00:00 2001
From: Erin <erin@erindesu.cz>
Date: Sat, 29 Nov 2025 14:39:06 +0100
Subject: [PATCH] fix: 32-bit time
Closes: #2102
---
src/utils/clock.rs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/utils/clock.rs b/src/utils/clock.rs
index 46be5e2923af..19be8f8cf398 100644
--- a/src/utils/clock.rs
+++ b/src/utils/clock.rs
@@ -216,7 +216,7 @@ where
fn add(self, rhs: T) -> Self::Output {
let rhs = rhs.into();
let tv_nsec = (self.tp.tv_nsec + rhs.tp.tv_nsec) % NANOS_PER_SEC;
- let tv_sec = (self.tp.tv_sec + rhs.tp.tv_sec) + ((self.tp.tv_nsec + rhs.tp.tv_nsec) / NANOS_PER_SEC);
+ let tv_sec = (self.tp.tv_sec + rhs.tp.tv_sec) + i64::from((self.tp.tv_nsec + rhs.tp.tv_nsec) / NANOS_PER_SEC);
Self::from(Timespec { tv_sec, tv_nsec })
}
}
+17
View File
@@ -4,6 +4,11 @@
EAPI=8
CRATES="
libspa@0.10.0
libspa-sys@0.10.0
pipewire@0.10.0
pipewire-sys@0.10.0
portable-atomic@1.14.0
"
LLVM_COMPAT=( {19..22} )
@@ -65,6 +70,10 @@ BDEPEND="
screencast? ( $(llvm_gen_dep 'llvm-core/clang:${LLVM_SLOT}') )
"
PATCHES=(
"${FILESDIR}"/${PN}-26.04-vendor_pipwire-0.10.0.patch # bug #979547 (backport #ef5b737)
"${FILESDIR}"/${PN}-26.04-32bit-atomic.patch # bug #979547
)
ECARGO_VENDOR="${WORKDIR}/vendor"
QA_FLAGS_IGNORED="usr/bin/niri"
@@ -94,6 +103,14 @@ src_prepare() {
use dbus && cmd="dbus-run-session $cmd"
sed -i "s/niri-session/$cmd/" resources/niri.desktop || die
fi
# bug #979547
pushd "${ECARGO_VENDOR}/smithay" >/dev/null || die
eapply "${FILESDIR}/${PN}-26.04_vendor_smithay-0.7.0_32bit-time.patch"
eapply "${FILESDIR}/${PN}-26.04_vendor_smithay-0.7.0_32bit-atomic64.patch"
echo '{"files":{},"package":null}' > .cargo-checksum.json
popd >/dev/null || die
default
}