[Buildroot] [v7, 0/2] package/uutils-coreutils: new package
Alexander Shirokov
shirokovalexs at gmail.com
Sun Oct 26 13:09:49 UTC 2025
Hello Everyone,
This patch series delivers uutils-coreutils, a reimplementation of the
GNU coreutils in Rust. uutils-coreutils are designed to be a drop-in
replacement for GNU coreutils.
They are already included in some Linux distributions. For example, the
uutils-coreutils package in Arch Linux or the rust-coreutils package
in Ubuntu. Sure, in real life there is still room for improvement, but
overall, the utilities work quite smoothly for most typical use cases.
On one hand, they look good enough to try in Buildroot and make
available on a wide range of embedded devices. On the other hand,
adding the utilities could help gain valuable experience, feedback, and
improvements. That’s why these patches are here.
Configuration
=============
For now, I have configured all defaults to allow both uutils-coreutils
and BusyBox to coexist. uutils attempts to avoid overwriting anything
implicitly. Adding these utilities alongside the existing ones allows to
run them on new platforms, collect statistics, measurements and
experience.
Changing the defaults allows to rewrite existing utilities (the list of
utilities is provided over configuration, too). This approach usually
useful for debugging. For example, to make sure that existing scripts
are OK with the new utilities.
Tests
=====
To make sure that uutils and the package are fine, I used two common
approaches: the native Buildroot tools and manual execution on images
prepared by Buildroot.
The Buildroot tools:
- ./support/testing/run-tests with test cases: TestRust,TestRustBin,
TestRustVendoring
- ./utils/test-pkg. See "test-pkg details"
- ./utils/check-package
I ran uutils-coreutils on the following platforms:
- Raspberry PI3 (based on raspberrypi3_defconfig)
- Orange PI Zero W2 (based on orangepi_zero2w_defconfig)
- Qemu aarch64 (based on qemu_aarch64_virt_defconfig)
Changelog
=========
v6->v7: 2025-10-26
- uutils-coreutils version 0.3.0
v5->v6: 2025-08-12
- Added configuration parameter to specify a list of utilities to build
- Added comments
v4->v5: 2025-05-27
- uutils-coreutils version 0.1.0
v3->v4: 2025-04-02
- Picked up work from Sebastian Weyer <sebastian.weyer at smile.fr>
- uutils-coreutils version 0.0.30
- Added a flag to enable or disable the multicall binary
- Removed usage of GNUMakefile. Now the build relies entirely on Cargo
- Added changes according to comments and feedback
v2->v3: 2023-03-17
- Minor style issues
v1->v2: 2023-03-17
- Switched to cargo-package from generic-package
- Format/style fixes
v1: 2023-03-14
- Initial version
test-pkg details
=================
./utils/test-pkg -p uutils-coreutils -c uutils-coreutils.config --all
arm-aarch64 [ 1/35]: OK
bootlin-aarch64-glibc [ 2/35]: OK
bootlin-arcle-hs38-uclibc [ 3/35]: SKIPPED
bootlin-armv5-uclibc [ 4/35]: SKIPPED
bootlin-armv7-glibc [ 5/35]: OK
bootlin-armv7-musl [ 6/35]: OK
bootlin-armv7m-uclibc [ 7/35]: SKIPPED
bootlin-m68k-5208-uclibc [ 8/35]: SKIPPED
bootlin-m68k-68040-uclibc [ 9/35]: SKIPPED
bootlin-microblazeel-uclibc [10/35]: SKIPPED
bootlin-mipsel-uclibc [11/35]: SKIPPED
bootlin-mipsel32r6-glibc [12/35]: SKIPPED
bootlin-openrisc-uclibc [13/35]: SKIPPED
bootlin-powerpc-e500mc-uclibc [14/35]: SKIPPED
bootlin-powerpc64le-power8-glibc [15/35]: OK
bootlin-riscv32-glibc [16/35]: SKIPPED
bootlin-riscv64-glibc [17/35]: SKIPPED
bootlin-riscv64-musl [18/35]: SKIPPED
bootlin-s390x-z13-glibc [19/35]: OK
bootlin-sh4-uclibc [20/35]: SKIPPED
bootlin-sparc-uclibc [21/35]: SKIPPED
bootlin-sparc64-glibc [22/35]: OK
bootlin-x86-64-glibc [23/35]: OK
bootlin-x86-64-musl [24/35]: OK
bootlin-x86-64-uclibc [25/35]: SKIPPED
bootlin-x86-i686-musl [26/35]: OK
bootlin-xtensa-uclibc [27/35]: SKIPPED
br-arm-basic [28/35]: SKIPPED
br-arm-full-nothread [29/35]: SKIPPED
br-arm-full-static [30/35]: SKIPPED
br-i386-pentium4-full [31/35]: SKIPPED
br-mips64-n64-full [32/35]: SKIPPED
br-mips64r6-el-hf-glibc [33/35]: SKIPPED
br-powerpc-603e-basic-cpp [34/35]: SKIPPED
br-powerpc64-power7-glibc [35/35]: OK
35 builds, 24 skipped, 0 build failed, 0 legal-info failed, 0 show-info failed
Where uutils-coreutils.config contains two options:
BR2_PACKAGE_UUTILS_COREUTILS=y
BR2_PACKAGE_HOST_RUSTC=y
Feedback, comments, and suggestions are welcome.
Thank you
Alexander Shirokov (2):
package/uutils-coreutils: new package
package/uutils-coreutils: new tests
DEVELOPERS | 1 +
package/Config.in | 1 +
package/busybox/busybox.mk | 1 +
package/coreutils/Config.in | 1 +
package/uutils-coreutils/Config.in | 48 +++++++
.../uutils-coreutils/uutils-coreutils.hash | 3 +
package/uutils-coreutils/uutils-coreutils.mk | 123 ++++++++++++++++++
support/testing/tests/package/test_rust.py | 9 ++
8 files changed, 187 insertions(+)
create mode 100644 package/uutils-coreutils/Config.in
create mode 100644 package/uutils-coreutils/uutils-coreutils.hash
create mode 100644 package/uutils-coreutils/uutils-coreutils.mk
--
2.51.1
More information about the buildroot
mailing list