* [Buildroot] [PATCH v2 0/2] package/dtui: fix build failure on targets without 64-bit atomics
@ 2026-08-31 15:49 Christopher Obbard via buildroot
2026-08-31 15:49 ` [Buildroot] [PATCH v2 1/2] package/rustc: add BR2_PACKAGE_HOST_RUSTC_TARGET_HAS_ATOMIC_64 Christopher Obbard via buildroot
2026-08-31 15:49 ` [Buildroot] [PATCH v2 2/2] package/dtui: require 64-bit atomic support Christopher Obbard via buildroot
0 siblings, 2 replies; 8+ messages in thread
From: Christopher Obbard via buildroot @ 2026-08-31 15:49 UTC (permalink / raw)
To: buildroot; +Cc: Christopher Obbard, Christopher Obbard
dtui fails to build on armv5te and 32-bit powerpc: it depends on
tui-textarea which imports std::sync::atomic::AtomicU64 without a
cfg(target_has_atomic = "64") guard. Rustc does not provide 64-bit
atomics on those targets. Upstream seems unmaintained and 0.7.0 is the
latest release, so the package has to be disabled there instead.
v1 open-coded BR2_ARM_CPU_ARMV5 and BR2_powerpc in package/dtui/Config.in.
Following the review feedback, patch 1 adds a hidden
BR2_PACKAGE_HOST_RUSTC_TARGET_HAS_ATOMIC_64 symbol to
package/rustc/Config.in.host and patch 2 makes dtui depend on it so the
constraint is expressed once and stays correct as rust gains or changes
targets.
Signed-off-by: Christopher Obbard <chris.obbard@oss.qualcomm.com>
---
Changes in v2:
- Add a hidden BR2_PACKAGE_HOST_RUSTC_TARGET_HAS_ATOMIC_64 symbol to
package/rustc/Config.in.host, instead of open-coding BR2_ARM_CPU_ARMV5
and BR2_powerpc in package/dtui/Config.in.
- dtui now depends on that symbol; no functional change from v1, the
symbol is defined as !BR2_ARM_CPU_ARMV5 && !BR2_powerpc.
- Link to v1: https://patch.msgid.link/20260829-wip-obbardc-package-dtui-fix-armv5-v1-1-1dfdc176385d@oss.qualcomm.com
To: buildroot@buildroot.org
Cc: Christopher Obbard <chris.obbard@oss.qualcomm.com>
---
Christopher Obbard (2):
package/rustc: add BR2_PACKAGE_HOST_RUSTC_TARGET_HAS_ATOMIC_64
package/dtui: require 64-bit atomic support
package/dtui/Config.in | 2 ++
package/rustc/Config.in.host | 16 ++++++++++++++++
2 files changed, 18 insertions(+)
---
base-commit: cb18f3a74a49a62119857ce1ab712ff4528a1d3d
change-id: 20260822-wip-obbardc-package-dtui-fix-armv5-832655f4860b
Best regards,
--
Cheers!
Christopher Obbard, MSc BEng (Hons) MIET
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply [flat|nested] 8+ messages in thread* [Buildroot] [PATCH v2 1/2] package/rustc: add BR2_PACKAGE_HOST_RUSTC_TARGET_HAS_ATOMIC_64 2026-08-31 15:49 [Buildroot] [PATCH v2 0/2] package/dtui: fix build failure on targets without 64-bit atomics Christopher Obbard via buildroot @ 2026-08-31 15:49 ` Christopher Obbard via buildroot 2026-09-02 21:24 ` Romain Naour via buildroot 2026-09-05 13:56 ` Thomas Petazzoni via buildroot 2026-08-31 15:49 ` [Buildroot] [PATCH v2 2/2] package/dtui: require 64-bit atomic support Christopher Obbard via buildroot 1 sibling, 2 replies; 8+ messages in thread From: Christopher Obbard via buildroot @ 2026-08-31 15:49 UTC (permalink / raw) To: buildroot; +Cc: Christopher Obbard, Christopher Obbard Rust does not provide 64-bit atomics on every target Buildroot can generate. rustc sets max_atomic_width = 32 for three of the 25 targets listed in RUST_TARGETS in utils/update-rust, so core::sync::atomic::AtomicU64 and AtomicI64 simply do not exist there: $ rustc --print cfg --target <target> | grep target_has_atomic armv5te-unknown-linux-gnueabi "16" "32" "8" "ptr" armv5te-unknown-linux-musleabi "16" "32" "8" "ptr" powerpc-unknown-linux-gnu "16" "32" "8" "ptr" Every other supported target, including armv6, armv7, aarch64, all the x86 variants, riscv64, s390x, sparc64 and both 64-bit powerpcs, has them, e.g.: arm-unknown-linux-gnueabi "16" "32" "64" "8" "ptr" armv7-unknown-linux-gnueabihf "16" "32" "64" "8" "ptr" A crate that uses 64-bit atomics without a cfg(target_has_atomic = "64") guard therefore fails to build on those three targets with: error[E0432]: unresolved import `std::sync::atomic::AtomicU64` | | atomic::{AtomicU64, AtomicU8, AtomicUsize, Ordering}, | ^^^^^^^^^ no `AtomicU64` in `sync::atomic` This has been hit at least twice already: by package/dust, worked around in commit 3abc3b97bad9 ("package/dust: bump to version 1.1.2") by moving to a release in which upstream had added the guard and by package/dtui, which has no such release available and had to open-code the affected architectures instead. It is likely to keep recurring: infra.basetest.BASIC_TOOLCHAIN_CONFIG builds with BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_ARMV5_EABI_GLIBC_STABLE, so every runtime test that does not override the toolchain compiles for armv5te, one of the three affected targets. That is exactly how the two failures above were found. Add a hidden symbol so packages can express this constraint once, rather than each open-coding BR2_ARM_CPU_ARMV5 and BR2_powerpc and needing to update whenever rust gains or changes a target. Note that armv5te and 32-bit powerpc are only supported by rust for glibc and musl, so the uclibc variants of those architectures are already excluded by BR2_PACKAGE_HOST_RUSTC_TARGET_ARCH_SUPPORTS. Signed-off-by: Christopher Obbard <chris.obbard@oss.qualcomm.com> --- package/rustc/Config.in.host | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/package/rustc/Config.in.host b/package/rustc/Config.in.host index 9cd912fc74..539926144b 100644 --- a/package/rustc/Config.in.host +++ b/package/rustc/Config.in.host @@ -112,6 +112,22 @@ config BR2_PACKAGE_HOST_RUSTC_TARGET_ARCH_SUPPORTS depends on BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_USES_MUSL depends on BR2_PACKAGE_HOST_RUSTC_ARCH_SUPPORTS +# Not all the targets above provide 64-bit atomics: rustc sets +# max_atomic_width = 32 for armv5te-unknown-linux-{gnu,musl}eabi and for +# powerpc-unknown-linux-gnu, so core::sync::atomic::{AtomicU64,AtomicI64} +# do not exist there. This can be checked with: +# rustc --print cfg --target <target> | grep target_has_atomic +# Target rust packages whose crates use 64-bit atomics unconditionally, +# i.e. without a cfg(target_has_atomic = "64") guard, should depend on +# this option. +config BR2_PACKAGE_HOST_RUSTC_TARGET_HAS_ATOMIC_64 + bool + # Excludes armv5te-unknown-linux-{gnu,musl}eabi and + # powerpc-unknown-linux-gnu. BR2_powerpc is 32-bit only: + # BR2_powerpc64 and BR2_powerpc64le are separate symbols, both + # selecting BR2_ARCH_IS_64, and are not affected. + default y if !BR2_ARM_CPU_ARMV5 && !BR2_powerpc + config BR2_PACKAGE_HOST_RUSTC_ARCH string default "armv5te" if BR2_ARM_CPU_ARMV5 -- 2.55.0 _______________________________________________ buildroot mailing list buildroot@buildroot.org https://lists.buildroot.org/mailman/listinfo/buildroot ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [Buildroot] [PATCH v2 1/2] package/rustc: add BR2_PACKAGE_HOST_RUSTC_TARGET_HAS_ATOMIC_64 2026-08-31 15:49 ` [Buildroot] [PATCH v2 1/2] package/rustc: add BR2_PACKAGE_HOST_RUSTC_TARGET_HAS_ATOMIC_64 Christopher Obbard via buildroot @ 2026-09-02 21:24 ` Romain Naour via buildroot 2026-09-02 21:31 ` Romain Naour via buildroot 2026-09-05 13:56 ` Thomas Petazzoni via buildroot 1 sibling, 1 reply; 8+ messages in thread From: Romain Naour via buildroot @ 2026-09-02 21:24 UTC (permalink / raw) To: Christopher Obbard, buildroot; +Cc: Christopher Obbard, El Mehdi YOUNES Hello Christopher, All, Le 31/08/2026 à 17:49, Christopher Obbard via buildroot a écrit : > Rust does not provide 64-bit atomics on every target Buildroot can > generate. rustc sets max_atomic_width = 32 for three of the 25 targets > listed in RUST_TARGETS in utils/update-rust, so > core::sync::atomic::AtomicU64 and AtomicI64 simply do not exist there: > > $ rustc --print cfg --target <target> | grep target_has_atomic > armv5te-unknown-linux-gnueabi "16" "32" "8" "ptr" > armv5te-unknown-linux-musleabi "16" "32" "8" "ptr" > powerpc-unknown-linux-gnu "16" "32" "8" "ptr" > > Every other supported target, including armv6, armv7, aarch64, all the > x86 variants, riscv64, s390x, sparc64 and both 64-bit powerpcs, has > them, e.g.: > > arm-unknown-linux-gnueabi "16" "32" "64" "8" "ptr" > armv7-unknown-linux-gnueabihf "16" "32" "64" "8" "ptr" > > A crate that uses 64-bit atomics without a cfg(target_has_atomic = "64") > guard therefore fails to build on those three targets with: > > error[E0432]: unresolved import `std::sync::atomic::AtomicU64` > | > | atomic::{AtomicU64, AtomicU8, AtomicUsize, Ordering}, > | ^^^^^^^^^ no `AtomicU64` in `sync::atomic` > > This has been hit at least twice already: by package/dust, worked around > in commit 3abc3b97bad9 ("package/dust: bump to version 1.1.2") by moving > to a release in which upstream had added the guard and by package/dtui, > which has no such release available and had to open-code the affected > architectures instead. The commit 3abc3b97bad9 ("package/dust: bump to version 1.1.2") was about the armv7 architecture but it seems to be a mistake since the toolchain used by default is indeed for armv5 (BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_ARMV5_EABI_GLIBC_STABLE). > > It is likely to keep recurring: infra.basetest.BASIC_TOOLCHAIN_CONFIG > builds with BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_ARMV5_EABI_GLIBC_STABLE, so > every runtime test that does not override the toolchain compiles for > armv5te, one of the three affected targets. That is exactly how the two > failures above were found. > > Add a hidden symbol so packages can express this constraint once, rather > than each open-coding BR2_ARM_CPU_ARMV5 and BR2_powerpc and needing to > update whenever rust gains or changes a target. > > Note that armv5te and 32-bit powerpc are only supported by rust for > glibc and musl, so the uclibc variants of those architectures are > already excluded by BR2_PACKAGE_HOST_RUSTC_TARGET_ARCH_SUPPORTS. > Very good commit log! Reviewed-by: Romain Naour <romain.naour@smile.fr> Best regards, Romain > Signed-off-by: Christopher Obbard <chris.obbard@oss.qualcomm.com> > --- > package/rustc/Config.in.host | 16 ++++++++++++++++ > 1 file changed, 16 insertions(+) > > diff --git a/package/rustc/Config.in.host b/package/rustc/Config.in.host > index 9cd912fc74..539926144b 100644 > --- a/package/rustc/Config.in.host > +++ b/package/rustc/Config.in.host > @@ -112,6 +112,22 @@ config BR2_PACKAGE_HOST_RUSTC_TARGET_ARCH_SUPPORTS > depends on BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_USES_MUSL > depends on BR2_PACKAGE_HOST_RUSTC_ARCH_SUPPORTS > > +# Not all the targets above provide 64-bit atomics: rustc sets > +# max_atomic_width = 32 for armv5te-unknown-linux-{gnu,musl}eabi and for > +# powerpc-unknown-linux-gnu, so core::sync::atomic::{AtomicU64,AtomicI64} > +# do not exist there. This can be checked with: > +# rustc --print cfg --target <target> | grep target_has_atomic > +# Target rust packages whose crates use 64-bit atomics unconditionally, > +# i.e. without a cfg(target_has_atomic = "64") guard, should depend on > +# this option. > +config BR2_PACKAGE_HOST_RUSTC_TARGET_HAS_ATOMIC_64 > + bool > + # Excludes armv5te-unknown-linux-{gnu,musl}eabi and > + # powerpc-unknown-linux-gnu. BR2_powerpc is 32-bit only: > + # BR2_powerpc64 and BR2_powerpc64le are separate symbols, both > + # selecting BR2_ARCH_IS_64, and are not affected. > + default y if !BR2_ARM_CPU_ARMV5 && !BR2_powerpc > + > config BR2_PACKAGE_HOST_RUSTC_ARCH > string > default "armv5te" if BR2_ARM_CPU_ARMV5 > _______________________________________________ buildroot mailing list buildroot@buildroot.org https://lists.buildroot.org/mailman/listinfo/buildroot ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Buildroot] [PATCH v2 1/2] package/rustc: add BR2_PACKAGE_HOST_RUSTC_TARGET_HAS_ATOMIC_64 2026-09-02 21:24 ` Romain Naour via buildroot @ 2026-09-02 21:31 ` Romain Naour via buildroot 0 siblings, 0 replies; 8+ messages in thread From: Romain Naour via buildroot @ 2026-09-02 21:31 UTC (permalink / raw) To: Christopher Obbard, buildroot; +Cc: Christopher Obbard, El Mehdi YOUNES Le 02/09/2026 à 23:24, Romain Naour a écrit : > Hello Christopher, All, > > Le 31/08/2026 à 17:49, Christopher Obbard via buildroot a écrit : >> Rust does not provide 64-bit atomics on every target Buildroot can >> generate. rustc sets max_atomic_width = 32 for three of the 25 targets >> listed in RUST_TARGETS in utils/update-rust, so >> core::sync::atomic::AtomicU64 and AtomicI64 simply do not exist there: >> >> $ rustc --print cfg --target <target> | grep target_has_atomic >> armv5te-unknown-linux-gnueabi "16" "32" "8" "ptr" >> armv5te-unknown-linux-musleabi "16" "32" "8" "ptr" >> powerpc-unknown-linux-gnu "16" "32" "8" "ptr" >> >> Every other supported target, including armv6, armv7, aarch64, all the >> x86 variants, riscv64, s390x, sparc64 and both 64-bit powerpcs, has >> them, e.g.: >> >> arm-unknown-linux-gnueabi "16" "32" "64" "8" "ptr" >> armv7-unknown-linux-gnueabihf "16" "32" "64" "8" "ptr" >> >> A crate that uses 64-bit atomics without a cfg(target_has_atomic = "64") >> guard therefore fails to build on those three targets with: >> >> error[E0432]: unresolved import `std::sync::atomic::AtomicU64` >> | >> | atomic::{AtomicU64, AtomicU8, AtomicUsize, Ordering}, >> | ^^^^^^^^^ no `AtomicU64` in `sync::atomic` >> >> This has been hit at least twice already: by package/dust, worked around >> in commit 3abc3b97bad9 ("package/dust: bump to version 1.1.2") by moving >> to a release in which upstream had added the guard and by package/dtui, >> which has no such release available and had to open-code the affected >> architectures instead. > > The commit 3abc3b97bad9 ("package/dust: bump to version 1.1.2") was about the > armv7 architecture but it seems to be a mistake since the toolchain used by > default is indeed for armv5 > (BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_ARMV5_EABI_GLIBC_STABLE). > >> >> It is likely to keep recurring: infra.basetest.BASIC_TOOLCHAIN_CONFIG >> builds with BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_ARMV5_EABI_GLIBC_STABLE, so >> every runtime test that does not override the toolchain compiles for >> armv5te, one of the three affected targets. That is exactly how the two >> failures above were found. >> >> Add a hidden symbol so packages can express this constraint once, rather >> than each open-coding BR2_ARM_CPU_ARMV5 and BR2_powerpc and needing to >> update whenever rust gains or changes a target. >> >> Note that armv5te and 32-bit powerpc are only supported by rust for >> glibc and musl, so the uclibc variants of those architectures are >> already excluded by BR2_PACKAGE_HOST_RUSTC_TARGET_ARCH_SUPPORTS. >> > > Very good commit log! > > Reviewed-by: Romain Naour <romain.naour@smile.fr> As Thomas noticed, the option should be: config BR2_PACKAGE_HOST_RUSTC_ARCH_HAS_ATOMIC_U64 Best regards, Romain > > Best regards, > Romain > > >> Signed-off-by: Christopher Obbard <chris.obbard@oss.qualcomm.com> >> --- >> package/rustc/Config.in.host | 16 ++++++++++++++++ >> 1 file changed, 16 insertions(+) >> >> diff --git a/package/rustc/Config.in.host b/package/rustc/Config.in.host >> index 9cd912fc74..539926144b 100644 >> --- a/package/rustc/Config.in.host >> +++ b/package/rustc/Config.in.host >> @@ -112,6 +112,22 @@ config BR2_PACKAGE_HOST_RUSTC_TARGET_ARCH_SUPPORTS >> depends on BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_USES_MUSL >> depends on BR2_PACKAGE_HOST_RUSTC_ARCH_SUPPORTS >> >> +# Not all the targets above provide 64-bit atomics: rustc sets >> +# max_atomic_width = 32 for armv5te-unknown-linux-{gnu,musl}eabi and for >> +# powerpc-unknown-linux-gnu, so core::sync::atomic::{AtomicU64,AtomicI64} >> +# do not exist there. This can be checked with: >> +# rustc --print cfg --target <target> | grep target_has_atomic >> +# Target rust packages whose crates use 64-bit atomics unconditionally, >> +# i.e. without a cfg(target_has_atomic = "64") guard, should depend on >> +# this option. >> +config BR2_PACKAGE_HOST_RUSTC_TARGET_HAS_ATOMIC_64 >> + bool >> + # Excludes armv5te-unknown-linux-{gnu,musl}eabi and >> + # powerpc-unknown-linux-gnu. BR2_powerpc is 32-bit only: >> + # BR2_powerpc64 and BR2_powerpc64le are separate symbols, both >> + # selecting BR2_ARCH_IS_64, and are not affected. >> + default y if !BR2_ARM_CPU_ARMV5 && !BR2_powerpc >> + >> config BR2_PACKAGE_HOST_RUSTC_ARCH >> string >> default "armv5te" if BR2_ARM_CPU_ARMV5 >> > _______________________________________________ buildroot mailing list buildroot@buildroot.org https://lists.buildroot.org/mailman/listinfo/buildroot ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Buildroot] [PATCH v2 1/2] package/rustc: add BR2_PACKAGE_HOST_RUSTC_TARGET_HAS_ATOMIC_64 2026-08-31 15:49 ` [Buildroot] [PATCH v2 1/2] package/rustc: add BR2_PACKAGE_HOST_RUSTC_TARGET_HAS_ATOMIC_64 Christopher Obbard via buildroot 2026-09-02 21:24 ` Romain Naour via buildroot @ 2026-09-05 13:56 ` Thomas Petazzoni via buildroot 1 sibling, 0 replies; 8+ messages in thread From: Thomas Petazzoni via buildroot @ 2026-09-05 13:56 UTC (permalink / raw) To: Christopher Obbard; +Cc: buildroot, Christopher Obbard On Mon, Aug 31, 2026 at 04:49:57PM +0100, Christopher Obbard via buildroot wrote: > Rust does not provide 64-bit atomics on every target Buildroot can > generate. rustc sets max_atomic_width = 32 for three of the 25 targets > listed in RUST_TARGETS in utils/update-rust, so > core::sync::atomic::AtomicU64 and AtomicI64 simply do not exist there: > > $ rustc --print cfg --target <target> | grep target_has_atomic > armv5te-unknown-linux-gnueabi "16" "32" "8" "ptr" > armv5te-unknown-linux-musleabi "16" "32" "8" "ptr" > powerpc-unknown-linux-gnu "16" "32" "8" "ptr" > > Every other supported target, including armv6, armv7, aarch64, all the > x86 variants, riscv64, s390x, sparc64 and both 64-bit powerpcs, has > them, e.g.: > > arm-unknown-linux-gnueabi "16" "32" "64" "8" "ptr" > armv7-unknown-linux-gnueabihf "16" "32" "64" "8" "ptr" > > A crate that uses 64-bit atomics without a cfg(target_has_atomic = "64") > guard therefore fails to build on those three targets with: > > error[E0432]: unresolved import `std::sync::atomic::AtomicU64` > | > | atomic::{AtomicU64, AtomicU8, AtomicUsize, Ordering}, > | ^^^^^^^^^ no `AtomicU64` in `sync::atomic` > > This has been hit at least twice already: by package/dust, worked around > in commit 3abc3b97bad9 ("package/dust: bump to version 1.1.2") by moving > to a release in which upstream had added the guard and by package/dtui, > which has no such release available and had to open-code the affected > architectures instead. > > It is likely to keep recurring: infra.basetest.BASIC_TOOLCHAIN_CONFIG > builds with BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_ARMV5_EABI_GLIBC_STABLE, so > every runtime test that does not override the toolchain compiles for > armv5te, one of the three affected targets. That is exactly how the two > failures above were found. > > Add a hidden symbol so packages can express this constraint once, rather > than each open-coding BR2_ARM_CPU_ARMV5 and BR2_powerpc and needing to > update whenever rust gains or changes a target. > > Note that armv5te and 32-bit powerpc are only supported by rust for > glibc and musl, so the uclibc variants of those architectures are > already excluded by BR2_PACKAGE_HOST_RUSTC_TARGET_ARCH_SUPPORTS. > > Signed-off-by: Christopher Obbard <chris.obbard@oss.qualcomm.com> Thanks, applied after renaming the option name, as suggested by Romain. Thomas -- Thomas Petazzoni, co-owner and CEO, Bootlin Embedded Linux and Kernel engineering and training https://bootlin.com _______________________________________________ buildroot mailing list buildroot@buildroot.org https://lists.buildroot.org/mailman/listinfo/buildroot ^ permalink raw reply [flat|nested] 8+ messages in thread
* [Buildroot] [PATCH v2 2/2] package/dtui: require 64-bit atomic support 2026-08-31 15:49 [Buildroot] [PATCH v2 0/2] package/dtui: fix build failure on targets without 64-bit atomics Christopher Obbard via buildroot 2026-08-31 15:49 ` [Buildroot] [PATCH v2 1/2] package/rustc: add BR2_PACKAGE_HOST_RUSTC_TARGET_HAS_ATOMIC_64 Christopher Obbard via buildroot @ 2026-08-31 15:49 ` Christopher Obbard via buildroot 2026-09-02 21:39 ` Romain Naour via buildroot 2026-09-05 13:58 ` Thomas Petazzoni via buildroot 1 sibling, 2 replies; 8+ messages in thread From: Christopher Obbard via buildroot @ 2026-08-31 15:49 UTC (permalink / raw) To: buildroot; +Cc: Christopher Obbard, Christopher Obbard dtui depends on tui-textarea which unconditionally imports AtomicU64 in src/widget.rs to pack a viewport rectangle into a single atomic word: use std::sync::atomic::{AtomicU64, Ordering}; pub struct Viewport(AtomicU64); As there is no cfg(target_has_atomic) guard in tui-textarea, its build fails on any target for which rustc does not provide 64-bit atomics with: Compiling tui-textarea v0.7.0 error[E0432]: unresolved import `std::sync::atomic::AtomicU64` --> .../dtui-3.0.0/VENDOR/tui-textarea/src/widget.rs:10:25 | 10 | use std::sync::atomic::{AtomicU64, Ordering}; | ^^^^^^^^^ no `AtomicU64` in `sync::atomic` | help: a similar name exists in the module | 10 - use std::sync::atomic::{AtomicU64, Ordering}; 10 + use std::sync::atomic::{AtomicU32, Ordering}; This has been reported to tui-textarea upstream, but unfortunately the project seems to be unmaintained (issue linked below). A sane workaround is to disable the package on targets which lack 64-bit atomic support, which is exactly what BR2_PACKAGE_HOST_RUSTC_TARGET_HAS_ATOMIC_64 describes: it is n for armv5te-unknown-linux-{gnu,musl}eabi and powerpc-unknown-linux-gnu, the only rust targets Buildroot can generate which lack 64-bit atomics, and y everywhere else. The same problem was hit by package/dust and worked around in commit 3abc3b97bad9 ("package/dust: bump to version 1.1.2") by bumping to a version in which upstream had added the missing guard. That is not an option here as tui-textarea 0.7.0 is the latest release. Note that a runtime test for dtui cannot use the default infra.basetest.BASIC_TOOLCHAIN_CONFIG, since that builds with BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_ARMV5_EABI_GLIBC_STABLE, where dtui is now disabled; such a test would need an armv7 or aarch64 toolchain instead. Build tested with utils/test-pkg against: - BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_ARMV5_EABI_GLIBC_STABLE - BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_ARMV5_EABI_MUSL_STABLE - BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_POWERPC_E500MC_GLIBC_STABLE all three fail with the above error before this change and are skipped after it, while armv7 (glibc and musl), aarch64, powerpc64le and x86-64 still select and build the package. Link: https://github.com/rhysd/tui-textarea/issues/66 Fixes: https://autobuild.buildroot.org/results/188f6442371500731453f75983590c922eab6d57 Fixes: https://autobuild.buildroot.org/results/e254db2654f18f1d2110eb8b1a32b43ad0f2a3d6 Signed-off-by: Christopher Obbard <chris.obbard@oss.qualcomm.com> --- package/dtui/Config.in | 2 ++ 1 file changed, 2 insertions(+) diff --git a/package/dtui/Config.in b/package/dtui/Config.in index 65d51df7d5..aee719a63f 100644 --- a/package/dtui/Config.in +++ b/package/dtui/Config.in @@ -3,6 +3,8 @@ config BR2_PACKAGE_DTUI depends on BR2_PACKAGE_HOST_RUSTC_TARGET_ARCH_SUPPORTS depends on BR2_TOOLCHAIN_HAS_THREADS # dbus depends on BR2_USE_MMU # dbus + # tui-textarea unconditionally uses AtomicU64 + depends on BR2_PACKAGE_HOST_RUSTC_TARGET_HAS_ATOMIC_64 select BR2_PACKAGE_DBUS # runtime select BR2_PACKAGE_HOST_RUSTC help -- 2.55.0 _______________________________________________ buildroot mailing list buildroot@buildroot.org https://lists.buildroot.org/mailman/listinfo/buildroot ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [Buildroot] [PATCH v2 2/2] package/dtui: require 64-bit atomic support 2026-08-31 15:49 ` [Buildroot] [PATCH v2 2/2] package/dtui: require 64-bit atomic support Christopher Obbard via buildroot @ 2026-09-02 21:39 ` Romain Naour via buildroot 2026-09-05 13:58 ` Thomas Petazzoni via buildroot 1 sibling, 0 replies; 8+ messages in thread From: Romain Naour via buildroot @ 2026-09-02 21:39 UTC (permalink / raw) To: Christopher Obbard, buildroot; +Cc: Christopher Obbard Hello Christopher, All, Le 31/08/2026 à 17:49, Christopher Obbard via buildroot a écrit : > dtui depends on tui-textarea which unconditionally imports AtomicU64 in > src/widget.rs to pack a viewport rectangle into a single atomic word: > > use std::sync::atomic::{AtomicU64, Ordering}; > pub struct Viewport(AtomicU64); > > As there is no cfg(target_has_atomic) guard in tui-textarea, its > build fails on any target for which rustc does not provide 64-bit > atomics with: > > Compiling tui-textarea v0.7.0 > error[E0432]: unresolved import `std::sync::atomic::AtomicU64` > --> .../dtui-3.0.0/VENDOR/tui-textarea/src/widget.rs:10:25 > | > 10 | use std::sync::atomic::{AtomicU64, Ordering}; > | ^^^^^^^^^ no `AtomicU64` in `sync::atomic` > | > help: a similar name exists in the module > | > 10 - use std::sync::atomic::{AtomicU64, Ordering}; > 10 + use std::sync::atomic::{AtomicU32, Ordering}; > > This has been reported to tui-textarea upstream, but unfortunately the > project seems to be unmaintained (issue linked below). A sane workaround > is to disable the package on targets which lack 64-bit atomic support, > which is exactly what BR2_PACKAGE_HOST_RUSTC_TARGET_HAS_ATOMIC_64 As discussed in the first patch: BR2_PACKAGE_HOST_RUSTC_ARCH_HAS_ATOMIC_U64 > describes: it is n for armv5te-unknown-linux-{gnu,musl}eabi and > powerpc-unknown-linux-gnu, the only rust targets Buildroot can generate > which lack 64-bit atomics, and y everywhere else. > > The same problem was hit by package/dust and worked around in commit > 3abc3b97bad9 ("package/dust: bump to version 1.1.2") by bumping to a > version in which upstream had added the missing guard. That is not an > option here as tui-textarea 0.7.0 is the latest release. > > Note that a runtime test for dtui cannot use the default > infra.basetest.BASIC_TOOLCHAIN_CONFIG, since that builds with > BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_ARMV5_EABI_GLIBC_STABLE, where dtui is now > disabled; such a test would need an armv7 or aarch64 toolchain instead. We have a few test case that are using an armv7 or aarch64 architecture. We actually plan to switch the Buildroot testsuite to the aarch64 architecture by default. A runtime test for dtui is welcome! > > Build tested with utils/test-pkg against: > - BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_ARMV5_EABI_GLIBC_STABLE > - BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_ARMV5_EABI_MUSL_STABLE > - BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_POWERPC_E500MC_GLIBC_STABLE > > all three fail with the above error before this change and are skipped > after it, while armv7 (glibc and musl), aarch64, powerpc64le and x86-64 > still select and build the package. > > Link: https://github.com/rhysd/tui-textarea/issues/66 > Fixes: https://autobuild.buildroot.org/results/188f6442371500731453f75983590c922eab6d57 > Fixes: https://autobuild.buildroot.org/results/e254db2654f18f1d2110eb8b1a32b43ad0f2a3d6 With BR2_PACKAGE_HOST_RUSTC_ARCH_HAS_ATOMIC_U64 updated: Reviewed-by: Romain Naour <romain.naour@smile.fr> Best regards, Romain > Signed-off-by: Christopher Obbard <chris.obbard@oss.qualcomm.com> > --- > package/dtui/Config.in | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/package/dtui/Config.in b/package/dtui/Config.in > index 65d51df7d5..aee719a63f 100644 > --- a/package/dtui/Config.in > +++ b/package/dtui/Config.in > @@ -3,6 +3,8 @@ config BR2_PACKAGE_DTUI > depends on BR2_PACKAGE_HOST_RUSTC_TARGET_ARCH_SUPPORTS > depends on BR2_TOOLCHAIN_HAS_THREADS # dbus > depends on BR2_USE_MMU # dbus > + # tui-textarea unconditionally uses AtomicU64 > + depends on BR2_PACKAGE_HOST_RUSTC_TARGET_HAS_ATOMIC_64 > select BR2_PACKAGE_DBUS # runtime > select BR2_PACKAGE_HOST_RUSTC > help > _______________________________________________ buildroot mailing list buildroot@buildroot.org https://lists.buildroot.org/mailman/listinfo/buildroot ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Buildroot] [PATCH v2 2/2] package/dtui: require 64-bit atomic support 2026-08-31 15:49 ` [Buildroot] [PATCH v2 2/2] package/dtui: require 64-bit atomic support Christopher Obbard via buildroot 2026-09-02 21:39 ` Romain Naour via buildroot @ 2026-09-05 13:58 ` Thomas Petazzoni via buildroot 1 sibling, 0 replies; 8+ messages in thread From: Thomas Petazzoni via buildroot @ 2026-09-05 13:58 UTC (permalink / raw) To: Christopher Obbard; +Cc: buildroot, Christopher Obbard Hello, On Mon, Aug 31, 2026 at 04:49:58PM +0100, Christopher Obbard via buildroot wrote: > dtui depends on tui-textarea which unconditionally imports AtomicU64 in > src/widget.rs to pack a viewport rectangle into a single atomic word: > > use std::sync::atomic::{AtomicU64, Ordering}; > pub struct Viewport(AtomicU64); > > As there is no cfg(target_has_atomic) guard in tui-textarea, its > build fails on any target for which rustc does not provide 64-bit > atomics with: > > Compiling tui-textarea v0.7.0 > error[E0432]: unresolved import `std::sync::atomic::AtomicU64` > --> .../dtui-3.0.0/VENDOR/tui-textarea/src/widget.rs:10:25 > | > 10 | use std::sync::atomic::{AtomicU64, Ordering}; > | ^^^^^^^^^ no `AtomicU64` in `sync::atomic` > | > help: a similar name exists in the module > | > 10 - use std::sync::atomic::{AtomicU64, Ordering}; > 10 + use std::sync::atomic::{AtomicU32, Ordering}; > > This has been reported to tui-textarea upstream, but unfortunately the > project seems to be unmaintained (issue linked below). A sane workaround > is to disable the package on targets which lack 64-bit atomic support, > which is exactly what BR2_PACKAGE_HOST_RUSTC_TARGET_HAS_ATOMIC_64 > describes: it is n for armv5te-unknown-linux-{gnu,musl}eabi and > powerpc-unknown-linux-gnu, the only rust targets Buildroot can generate > which lack 64-bit atomics, and y everywhere else. > > The same problem was hit by package/dust and worked around in commit > 3abc3b97bad9 ("package/dust: bump to version 1.1.2") by bumping to a > version in which upstream had added the missing guard. That is not an > option here as tui-textarea 0.7.0 is the latest release. > > Note that a runtime test for dtui cannot use the default > infra.basetest.BASIC_TOOLCHAIN_CONFIG, since that builds with > BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_ARMV5_EABI_GLIBC_STABLE, where dtui is now > disabled; such a test would need an armv7 or aarch64 toolchain instead. > > Build tested with utils/test-pkg against: > - BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_ARMV5_EABI_GLIBC_STABLE > - BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_ARMV5_EABI_MUSL_STABLE > - BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_POWERPC_E500MC_GLIBC_STABLE > > all three fail with the above error before this change and are skipped > after it, while armv7 (glibc and musl), aarch64, powerpc64le and x86-64 > still select and build the package. > > Link: https://github.com/rhysd/tui-textarea/issues/66 > Fixes: https://autobuild.buildroot.org/results/188f6442371500731453f75983590c922eab6d57 > Fixes: https://autobuild.buildroot.org/results/e254db2654f18f1d2110eb8b1a32b43ad0f2a3d6 > Signed-off-by: Christopher Obbard <chris.obbard@oss.qualcomm.com> Thanks, applied after: - Renaming the symbol - Adding the "depends on" also to the Config.in comment so that the comment doesn't appear on CPU architectures where dtui will anyway not be available Thanks a lot! Thomas -- Thomas Petazzoni, co-owner and CEO, Bootlin Embedded Linux and Kernel engineering and training https://bootlin.com _______________________________________________ buildroot mailing list buildroot@buildroot.org https://lists.buildroot.org/mailman/listinfo/buildroot ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2026-09-05 13:58 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2026-08-31 15:49 [Buildroot] [PATCH v2 0/2] package/dtui: fix build failure on targets without 64-bit atomics Christopher Obbard via buildroot 2026-08-31 15:49 ` [Buildroot] [PATCH v2 1/2] package/rustc: add BR2_PACKAGE_HOST_RUSTC_TARGET_HAS_ATOMIC_64 Christopher Obbard via buildroot 2026-09-02 21:24 ` Romain Naour via buildroot 2026-09-02 21:31 ` Romain Naour via buildroot 2026-09-05 13:56 ` Thomas Petazzoni via buildroot 2026-08-31 15:49 ` [Buildroot] [PATCH v2 2/2] package/dtui: require 64-bit atomic support Christopher Obbard via buildroot 2026-09-02 21:39 ` Romain Naour via buildroot 2026-09-05 13:58 ` Thomas Petazzoni via buildroot
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox