* [Buildroot] [PATCH v2] package/heaptrack: new package
@ 2026-08-05 16:08 Luca Ceresoli via buildroot
2026-08-05 18:55 ` Thomas Petazzoni via buildroot
0 siblings, 1 reply; 3+ messages in thread
From: Luca Ceresoli via buildroot @ 2026-08-05 16:08 UTC (permalink / raw)
To: buildroot; +Cc: Alexis Lothoré, Thomas Petazzoni, Luca Ceresoli
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>
---
Changes in v2:
- Various improvements suggested by Thomas
- Link to v1: https://patch.msgid.link/20260731-heaptrack-v1-1-c558715cb4c3@bootlin.com
---
Changes in v2:
- removed unnecessary depends on BR2_LINUX_KERNEL
- added missing recursive 'depends on'
- sort alphabetically the 'select' lines
- completed 'depends on' list for comment line
- Add "Locally calculated" for the hash
- Add hashes of license files
- Use single tab for indentation
- Add test case
- Link to v1: https://lore.kernel.org/all/20260731-heaptrack-v1-1-c558715cb4c3@bootlin.com/
---
DEVELOPERS | 2 ++
package/Config.in | 1 +
package/heaptrack/Config.in | 37 +++++++++++++++++++++++
package/heaptrack/heaptrack.hash | 10 +++++++
package/heaptrack/heaptrack.mk | 26 ++++++++++++++++
support/testing/tests/package/test_heaptrack.py | 40 +++++++++++++++++++++++++
6 files changed, 116 insertions(+)
diff --git a/DEVELOPERS b/DEVELOPERS
index 56dd9f3943d1..bef37f884b27 100644
--- a/DEVELOPERS
+++ b/DEVELOPERS
@@ -2189,6 +2189,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/
@@ -2197,6 +2198,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 2e845f98db43..f9b2ed615bf3 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 000000000000..12e33ff2c219
--- /dev/null
+++ b/package/heaptrack/Config.in
@@ -0,0 +1,37 @@
+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_4_9 # libunwind
+ depends on !BR2_STATIC_LIBS # libunwind, elfutils
+ 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 toolchain w/ C++, threads, wchar, gcc >= 4.9, 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_4_9 \
+ || BR2_STATIC_LIBS
diff --git a/package/heaptrack/heaptrack.hash b/package/heaptrack/heaptrack.hash
new file mode 100644
index 000000000000..6ad9619f23b9
--- /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 000000000000..f9b4639b3aed
--- /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 linux boost libunwind zlib elfutils
+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 000000000000..de3d5441efa4
--- /dev/null
+++ b/support/testing/tests/package/test_heaptrack.py
@@ -0,0 +1,40 @@
+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")
---
base-commit: d54756753d5328474465d6d2102b151f94bc8e7e
change-id: 20260731-heaptrack-cd4f6f8fcec8
Best regards,
--
Luca Ceresoli, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply related [flat|nested] 3+ messages in thread* Re: [Buildroot] [PATCH v2] package/heaptrack: new package
2026-08-05 16:08 [Buildroot] [PATCH v2] package/heaptrack: new package Luca Ceresoli via buildroot
@ 2026-08-05 18:55 ` Thomas Petazzoni via buildroot
2026-08-06 7:03 ` Luca Ceresoli via buildroot
0 siblings, 1 reply; 3+ messages in thread
From: Thomas Petazzoni via buildroot @ 2026-08-05 18:55 UTC (permalink / raw)
To: Luca Ceresoli; +Cc: buildroot, Alexis Lothoré
Hello,
Thanks for this v2. I noticed one incorrect thing (but I didn't do a
very thorough review).
On Wed, Aug 05, 2026 at 06:08:47PM +0200, Luca Ceresoli wrote:
> +HEAPTRACK_DEPENDENCIES = host-pkgconf linux boost libunwind zlib elfutils
^^^^^ linux should not be part of the dependencies
Thanks!
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] 3+ messages in thread* Re: [Buildroot] [PATCH v2] package/heaptrack: new package
2026-08-05 18:55 ` Thomas Petazzoni via buildroot
@ 2026-08-06 7:03 ` Luca Ceresoli via buildroot
0 siblings, 0 replies; 3+ messages in thread
From: Luca Ceresoli via buildroot @ 2026-08-06 7:03 UTC (permalink / raw)
To: Thomas Petazzoni, Luca Ceresoli; +Cc: buildroot, Alexis Lothoré
Hi,
On Wed Aug 5, 2026 at 8:55 PM CEST, Thomas Petazzoni wrote:
> Hello,
>
> Thanks for this v2. I noticed one incorrect thing (but I didn't do a
> very thorough review).
>
> On Wed, Aug 05, 2026 at 06:08:47PM +0200, Luca Ceresoli wrote:
>> +HEAPTRACK_DEPENDENCIES = host-pkgconf linux boost libunwind zlib elfutils
> ^^^^^ linux should not be part of the dependencies
Ouch! I removed the BR2_LINUX_KERNEL depends, but forgot about removing
this one.
I queued a fix for v3.
Thanks.
Luca
--
Luca Ceresoli, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-08-06 7:03 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-05 16:08 [Buildroot] [PATCH v2] package/heaptrack: new package Luca Ceresoli via buildroot
2026-08-05 18:55 ` Thomas Petazzoni via buildroot
2026-08-06 7:03 ` Luca Ceresoli via buildroot
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.