[Buildroot] [git commit branch/next] package/heaptrack: new package
From: Julien Olivain via buildroot <hidden>
Date: 2026-08-24 21:36:10
Subsystem:
the rest · Maintainer:
Linus Torvalds
commit: https://gitlab.com/buildroot.org/buildroot/-/commit/3d6c68d625cf80cc9a9cf4ce1058248fcfc413a7 branch: https://gitlab.com/buildroot.org/buildroot/-/tree/next Add heaptrack, a memory allocation tracer toolkit. This implementation builds all the command line components, not the heaptrack_gui graphical visualization program. Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com> Signed-off-by: Julien Olivain <redacted> --- DEVELOPERS | 2 ++ package/Config.in | 1 + package/heaptrack/Config.in | 39 +++++++++++++++++++++++ package/heaptrack/heaptrack.hash | 10 ++++++ package/heaptrack/heaptrack.mk | 26 +++++++++++++++ support/testing/tests/package/test_heaptrack.py | 42 +++++++++++++++++++++++++ 6 files changed, 120 insertions(+)
diff --git a/DEVELOPERS b/DEVELOPERS
index 98c9ee55d3..3a288afb1a 100644
--- a/DEVELOPERS
+++ b/DEVELOPERS@@ -2192,6 +2192,7 @@ F: configs/zynq_zc706_defconfig F: configs/zynqmp_zcu106_defconfig F: package/agentpp/ F: package/exim/ +F: package/heaptrack/ F: package/libpjsip/ F: package/linux-tools/linux-tool-usbtools.mk.in F: package/qpid-proton/
@@ -2200,6 +2201,7 @@ F: package/snmppp/ F: package/stm32flash/ F: package/unzip/ F: support/legal-info/ +F: support/testing/tests/package/test_heaptrack.py N: Lucas De Marchi <lucas.de.marchi@gmail.com> F: package/fswebcam/
diff --git a/package/Config.in b/package/Config.in
index 6058800682..307f7ce86a 100644
--- a/package/Config.in
+++ b/package/Config.in@@ -106,6 +106,7 @@ menu "Debugging, profiling and benchmark" source "package/fwts/Config.in" source "package/gdb/Config.in" source "package/google-breakpad/Config.in" + source "package/heaptrack/Config.in" source "package/hyperfine/Config.in" source "package/iozone/Config.in" source "package/k3conf/Config.in"
diff --git a/package/heaptrack/Config.in b/package/heaptrack/Config.in
new file mode 100644
index 0000000000..a7ef6f0970
--- /dev/null
+++ b/package/heaptrack/Config.in@@ -0,0 +1,39 @@ +config BR2_PACKAGE_HEAPTRACK + bool "heaptrack" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_THREADS # boost, libunwind, elfutils + depends on BR2_USE_WCHAR # boost, elfutils + depends on BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS # boost-filesystem + depends on BR2_PACKAGE_LIBUNWIND_ARCH_SUPPORTS # libunwind + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_8 # C++17 filesystem + depends on !BR2_STATIC_LIBS # libunwind, elfutils + depends on !BR2_TOOLCHAIN_USES_UCLIBC # no dlmopen() support + select BR2_PACKAGE_BOOST + select BR2_PACKAGE_BOOST_IOSTREAMS + select BR2_PACKAGE_BOOST_PROGRAM_OPTIONS + # For heaptrack_print + select BR2_PACKAGE_BOOST_FILESYSTEM + select BR2_PACKAGE_ELFUTILS + select BR2_PACKAGE_LIBUNWIND + select BR2_PACKAGE_ZLIB + help + Heaptrack traces all memory allocations and annotates these + events with stack traces. Dedicated analysis tools then allow + you to interpret the heap memory profile to find hotspots, + memory leaks, allocation hotspots and temporary allocations. + + Zstandard offers better (de)compression performance compared + with gzip/zlib, making heaptrack faster and datafiles smaller, + so enabling BR2_PACKAGE_ZSTD is recommended. + + https://apps.kde.org/heaptrack/ + +comment "heaptrack needs a glibc or musl toolchain w/ C++, threads, wchar, gcc >= 8, dynamic library" + depends on BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS + depends on BR2_PACKAGE_LIBUNWIND_ARCH_SUPPORTS + depends on !BR2_INSTALL_LIBSTDCPP \ + || !BR2_TOOLCHAIN_HAS_THREADS \ + || !BR2_USE_WCHAR \ + || !BR2_TOOLCHAIN_GCC_AT_LEAST_8 \ + || BR2_STATIC_LIBS \ + || BR2_TOOLCHAIN_USES_UCLIBC
diff --git a/package/heaptrack/heaptrack.hash b/package/heaptrack/heaptrack.hash
new file mode 100644
index 0000000000..6ad9619f23
--- /dev/null
+++ b/package/heaptrack/heaptrack.hash@@ -0,0 +1,10 @@ +# Locally calculated +sha256 e69de2209ab0e16c8e26c1b60feeb852b3a88e46a4f16588c08254e1bd81a183 heaptrack-3e6cce3d210a6672fe6f92de0bed567c49b7a9c5-git4.tar.gz + +sha256 fa6f36630bb1e0c571d34b2bbdf188d08495c9dbf58f28cac112f303fc1f58fb LICENSES/LGPL-2.1-only.txt +sha256 aaf135472f81c5b4a0dca9367e5bb5e9750032b5bebe5442b36e4c0a47430df3 LICENSES/GPL-2.0-or-later.txt +sha256 6aee5c3d7c55f3d8ff45b1245b8427efaf0a59e9c52d7139c79bff7056e9a611 LICENSES/LGPL-2.1-or-later.txt +sha256 84c6ef3ea9e3254a54d0acf5d3e0c61ae011b8fef7dd6940591cf060e6380a8f LICENSES/BSL-1.0.txt +sha256 b85dcd3e453d05982552c52b5fc9e0bdd6d23c6f8e844b984a88af32570b0cc0 LICENSES/MIT.txt +sha256 074e6e32c86a4c0ef8b3ed25b721ca23aca83df277cd88106ef7177c354615ff LICENSES/Apache-2.0.txt +sha256 42639b2e5507163d35069be166e37a784f48a5f17e3577c16eb48fab215247cd LICENSES/BSD-3-Clause.txt
diff --git a/package/heaptrack/heaptrack.mk b/package/heaptrack/heaptrack.mk
new file mode 100644
index 0000000000..6ae49ba1a8
--- /dev/null
+++ b/package/heaptrack/heaptrack.mk@@ -0,0 +1,26 @@ +################################################################################ +# +# heaptrack +# +################################################################################ + +HEAPTRACK_SITE_METHOD = git +HEAPTRACK_SITE = https://invent.kde.org/sdk/heaptrack.git +HEAPTRACK_VERSION = 3e6cce3d210a6672fe6f92de0bed567c49b7a9c5 +HEAPTRACK_LICENSE = LGPL-2.1-or-later, GPL-2.0-or-later (heaptrack_interpret) +HEAPTRACK_LICENSE_FILES = \ + LICENSES/LGPL-2.1-only.txt \ + LICENSES/GPL-2.0-or-later.txt \ + LICENSES/LGPL-2.1-or-later.txt \ + LICENSES/BSL-1.0.txt \ + LICENSES/MIT.txt \ + LICENSES/Apache-2.0.txt \ + LICENSES/BSD-3-Clause.txt +HEAPTRACK_DEPENDENCIES = host-pkgconf boost elfutils libunwind zlib +HEAPTRACK_CONF_OPTS = -DHEAPTRACK_BUILD_GUI=OFF -DHEAPTRACK_BUILD_PRINT=ON + +ifeq ($(BR2_PACKAGE_ZSTD),y) +HEAPTRACK_DEPENDENCIES += zstd +endif + +$(eval $(cmake-package))
diff --git a/support/testing/tests/package/test_heaptrack.py b/support/testing/tests/package/test_heaptrack.py
new file mode 100644
index 0000000000..be353f8918
--- /dev/null
+++ b/support/testing/tests/package/test_heaptrack.py@@ -0,0 +1,42 @@ +import os + +import infra.basetest + + +class TestHeaptrack(infra.basetest.BRTest): + # infra.basetest.BASIC_TOOLCHAIN_CONFIG cannot be used as it does + # not include BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS + # needed by heaptrack. + config = \ + """ + BR2_aarch64=y + BR2_TOOLCHAIN_EXTERNAL=y + BR2_TARGET_GENERIC_GETTY_PORT="ttyAMA0" + BR2_LINUX_KERNEL=y + BR2_LINUX_KERNEL_CUSTOM_VERSION=y + BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.18.42" + BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y + BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/qemu/aarch64-virt/linux.config" + BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + BR2_PACKAGE_HEAPTRACK=y + # BR2_TARGET_ROOTFS_TAR is not set + BR2_TARGET_ROOTFS_CPIO=y + """ + + def test_run(self): + cpio_file = os.path.join(self.builddir, "images", "rootfs.cpio") + kern = os.path.join(self.builddir, "images", "Image") + self.emulator.boot(arch="aarch64", + kernel=kern, + kernel_cmdline=["console=ttyAMA0"], + options=["-M", "virt", + "-cpu", "cortex-a57", + "-m", "256M", + "-initrd", cpio_file]) + + self.emulator.login() + + self.assertRunOk("/usr/bin/heaptrack --version") + self.assertRunOk("/usr/bin/heaptrack /bin/busybox") + self.assertRunOk("/usr/bin/heaptrack -o /tmp/ls.heaptrack ls -al /") + self.assertRunOk("/usr/bin/heaptrack_print --file /tmp/ls.heaptrack.gz")
_______________________________________________ buildroot mailing list buildroot@buildroot.org https://lists.buildroot.org/mailman/listinfo/buildroot