* [Buildroot] [PATCH 1/1] package/uftrace: new package @ 2020-10-26 23:14 Giacomo Longo 2020-10-27 9:36 ` Thomas Petazzoni 0 siblings, 1 reply; 9+ messages in thread From: Giacomo Longo @ 2020-10-26 23:14 UTC (permalink / raw) To: buildroot ^ permalink raw reply [flat|nested] 9+ messages in thread
* [Buildroot] [PATCH 1/1] package/uftrace: new package 2020-10-26 23:14 [Buildroot] [PATCH 1/1] package/uftrace: new package Giacomo Longo @ 2020-10-27 9:36 ` Thomas Petazzoni 2020-10-27 15:14 ` [Buildroot] [PATCH v2 " Giacomo Longo 2020-10-27 15:14 ` [Buildroot] [PATCH " Giacomo Longo 0 siblings, 2 replies; 9+ messages in thread From: Thomas Petazzoni @ 2020-10-27 9:36 UTC (permalink / raw) To: buildroot Hello Giacomo, Thanks for your contribution! See below for a number of comments and suggestions. On Tue, 27 Oct 2020 00:14:14 +0100 Giacomo Longo <gabibbo97@gmail.com> wrote: > From 57e136108b4ff900f3b7972f1f1c19a59ef9cf12 Mon Sep 17 00:00:00 2001 > From: Giacomo Longo <gabibbo97@gmail.com> > Date: Mon, 26 Oct 2020 23:11:41 +0100 > Subject: [PATCH 1/1] package/uftrace: new package > > Hello, first time trying to package something for BuildRoot and > sending a patch via email. Your patch should be sent using "git send-email". You can find at https://git-send-email.io/ instructions on how to set up git send-email. > The package is a tracing utility similar to ltrace and strace that > allows profiling of programs and their library calls. > > I have performed a run of ./utils/check-package package/uftrace/* with > the following result: > > > 78 lines processed > > 0 warnings generated > > I have performed a run of ./utils/test-pkg -d ../test-pkg -c > ../uftrace.config -p uftrace -a > > > 45 builds, 36 skipped, 0 build failed, 0 legal-info failed Very good work! > The only architectures supported upstream are aarch64, arm and x86_64/i386. > I could not build the program without glibc so it's marked as > requiring a glibc toolchain. What specific issues have you encountered with other C libraries ? > I am looking for some pointers on how to upstream my modification and > feedback on the patch in its current state. Read on for more comments :) > Signed-off-by: Giacomo Longo <gabibbo97@gmail.com> > --- > package/Config.in | 1 + > package/uftrace/Config.in | 41 ++++++++++++++++++++++++++++++++++++ > package/uftrace/uftrace.hash | 3 +++ > package/uftrace/uftrace.mk | 34 ++++++++++++++++++++++++++++++ > 4 files changed, 79 insertions(+) Could you add an entry to the DEVELOPERS file for this package ? > diff --git a/package/uftrace/Config.in b/package/uftrace/Config.in > new file mode 100644 > index 0000000000..4912d1d8cc > --- /dev/null > +++ b/package/uftrace/Config.in > @@ -0,0 +1,41 @@ > +config BR2_PACKAGE_UFTRACE_ARCH_SUPPORTS > + bool > + default y if BR2_aarch64 > + default y if BR2_arm > + default y if BR2_i386 > + default y if BR2_x86_64 > + > +config BR2_PACKAGE_UFTRACE > + bool "uftrace" > + depends on BR2_TOOLCHAIN_USES_GLIBC > + depends on BR2_PACKAGE_UFTRACE_ARCH_SUPPORTS > + depends on !BR2_STATIC_LIBS > + select BR2_PACKAGE_ELFUTILS When you "select" something, you must replicate its depends on. So here you must replicate: depends on BR2_USE_WCHAR depends on BR2_TOOLCHAIN_HAS_THREADS > + select BR2_PACKAGE_UTIL_LINUX You just need util-linux, and none of its sub-options ? This is quite odd, very often packages need libuuid, or libmount, etc. > + select BR2_INSTALL_LIBSTDCPP You cannot select this: it must be a "depends on". > + help > + Tool to trace and analyze execution of a program. > + > + https://uftrace.github.io/slide > + > +comment "uftrace needs a glibc toolchain w/ C++, dynamic library" > + depends on !BR2_TOOLCHAIN_USES_GLIBC || BR2_STATIC_LIBS || > !BR2_INSTALL_LIBSTDCPP You need to move this comment either before the BR2_PACKAGE_UFTRACE option, or at the end of file. Due to how kconfig works, if you have this comment between the BR2_PACKAGE_UFTRACE option and its sub-options, the sub-options will not properly be "indented" in menuconfig. Also, you need to add a: depends on BR2_PACKAGE_UFTRACE_ARCH_SUPPORTS so that the comment doesn't appear on architectures where uftrace is anyway not available. > +if BR2_PACKAGE_UFTRACE > + > +config BR2_PACKAGE_UFTRACE_LUAJIT > + bool "luajit scripting support" > + default n default n is the default, so it's not needed. > + select BR2_PACKAGE_LUAJIT When you select, you need to replicate the "depends on" of the options you're selecting. > + help > + Enable luajit scripting support > + > +config BR2_PACKAGE_UFTRACE_TUI > + bool "TUI support" > + default n Not needed. > + depends on BR2_USE_WCHAR ncurses doesn't depend on wchar, unless you need BR2_PACKAGE_NCURSES_WCHAR of course. > + select BR2_PACKAGE_NCURSES > + help > + Enable TUI support Perhaps those two sub-options are not really needed, and you could simply enable luajit and ncurses support in the .mk file if the appropriate packages are enabled, like this: ifeq ($(BR2_PACKAGE_LUAJIT),y) ... enable luajit support ... else ... disable luajit support ... endif > diff --git a/package/uftrace/uftrace.mk b/package/uftrace/uftrace.mk > new file mode 100644 > index 0000000000..4c60962151 > --- /dev/null > +++ b/package/uftrace/uftrace.mk > @@ -0,0 +1,34 @@ > +################################################################################ > +# > +# uftrace > +# > +################################################################################ > + > +UFTRACE_VERSION = v0.9.4 > +UFTRACE_SITE = $(call github,namhyung,uftrace,$(UFTRACE_VERSION)) > +UFTRACE_LICENSE = GPL-2.0+ > +UFTRACE_LICENSE_FILES = COPYING > +UFTRACE_DEPENDENCIES = elfutils You are selecting util-linux in the Config.in file, but you don't have any build dependency on it. Since you have tested with test-pkg, it seems like indeed util-linux is not a build dependency. Is it a runtime dependency ? If so, for what tool ? > + > +ifeq ($(BR2_PACKAGE_UFTRACE_LUAJIT),y) > +UFTRACE_DEPENDENCIES += luajit There is no explicit ./configure option to enable/disable luajit support ? > +endif > + > +ifeq ($(BR2_PACKAGE_UFTRACE_TUI),y) > +UFTRACE_DEPENDENCIES += ncurses Same question here. > +endif > + > +ifeq ($(BR2_aarch64),y) > +UFTRACE_CONF_OPTS = --arch=aarch64 > +else ifeq ($(BR2_arm),y) > +UFTRACE_CONF_OPTS = --arch=arm > +else ifeq ($(BR2_i386),y) > +UFTRACE_CONF_OPTS = --arch=x86 > +else ifeq ($(BR2_x86_64),y) > +UFTRACE_CONF_OPTS = --arch=x86_64 > +endif > + > +UFTRACE_CONF_OPTS += --without-libpython > +UFTRACE_CONF_OPTS += --without-capstone We generally prefer to have the unconditional options like this before the conditional ones, and written this way: UFTRACE_CONF_OPTS = \ --without-libpython \ --without-capstone Could you rework your patch to address those comments, and send a new iteration, preferably with git send-email ? Thanks! Thomas -- Thomas Petazzoni, CTO, Bootlin Embedded Linux and Kernel engineering https://bootlin.com ^ permalink raw reply [flat|nested] 9+ messages in thread
* [Buildroot] [PATCH v2 1/1] package/uftrace: new package 2020-10-27 9:36 ` Thomas Petazzoni @ 2020-10-27 15:14 ` Giacomo Longo 2020-11-03 20:31 ` Thomas Petazzoni 2020-10-27 15:14 ` [Buildroot] [PATCH " Giacomo Longo 1 sibling, 1 reply; 9+ messages in thread From: Giacomo Longo @ 2020-10-27 15:14 UTC (permalink / raw) To: buildroot First of all, thanks Thomas for your kind words and helping me finding my way around (this mail is my first git-send-patch). I have tried to incorporate the feedback inside this second version of the patch. Here's a list of the changes I've made: I added myself to the DEVELOPERS file. I decided to remove the configuration options concerning TUI and luajit, replacing them with an if inside the makefile. These are not core functionalities and probably are not worth of an extra configuration flag. I removed the dependency on UTIL_LINUX that was not needed. I have converted BR2_INSTALL_LIBSTDCPP from "selects" to "depends on". The flags BR2_USE_WCHAR, BR2_TOOLCHAIN_HAS_THREADS coming from the selection of BR2_PACKAGE_ELFUTILS have been included as depends on. Comment has been moved to the end of the file, and a dependency on the correct architecture has been added. The makefile has been shuffled around: - Standard configuration options are now at the top - Architecture configuration follows - Optional feature flags are at the bottom Concerning the uClibc and musl incompatibility, build fails on non-glibc with this error: uftrace-v0.9.4/cmds/record.c:2078:19: error: ?ADDR_NO_RANDOMIZE? undeclared (first use in this function) if (personality(ADDR_NO_RANDOMIZE) < 0) I have been able to find the symbol in musl at https://git.musl-libc.org/cgit/musl/tree/include/sys/personality.h but apparently it does not work. The patch as it is passes ./utils/test-pkg with 45 builds, 36 skipped, 0 build failed, 0 legal-info failed and ./utils/check-package package/uftrace/* with 62 lines processed and 0 warnings generated. I have been able to test the package by assembling and running buildroot on QEMU system arm emulation (target arch Cortex A7). Thanks again for your understanding, have a nice day. ^ permalink raw reply [flat|nested] 9+ messages in thread
* [Buildroot] [PATCH v2 1/1] package/uftrace: new package 2020-10-27 15:14 ` [Buildroot] [PATCH v2 " Giacomo Longo @ 2020-11-03 20:31 ` Thomas Petazzoni 0 siblings, 0 replies; 9+ messages in thread From: Thomas Petazzoni @ 2020-11-03 20:31 UTC (permalink / raw) To: buildroot Hello Giaocomo, On Tue, 27 Oct 2020 16:14:07 +0100 Giacomo Longo <gabibbo97@gmail.com> wrote: > First of all, thanks Thomas for your kind words and helping me finding > my way around (this mail is my first git-send-patch). > > I have tried to incorporate the feedback inside this second version of > the patch. Thanks for your new iteration. I will reply directly on the patch itself for additional comments. Best regards, Thomas -- Thomas Petazzoni, CTO, Bootlin Embedded Linux and Kernel engineering https://bootlin.com ^ permalink raw reply [flat|nested] 9+ messages in thread
* [Buildroot] [PATCH 1/1] package/uftrace: new package 2020-10-27 9:36 ` Thomas Petazzoni 2020-10-27 15:14 ` [Buildroot] [PATCH v2 " Giacomo Longo @ 2020-10-27 15:14 ` Giacomo Longo 2020-11-03 20:39 ` Thomas Petazzoni 1 sibling, 1 reply; 9+ messages in thread From: Giacomo Longo @ 2020-10-27 15:14 UTC (permalink / raw) To: buildroot Signed-off-by: Giacomo Longo <gabibbo97@gmail.com> --- DEVELOPERS | 3 +++ package/Config.in | 1 + package/uftrace/Config.in | 24 ++++++++++++++++++++++++ package/uftrace/uftrace.hash | 3 +++ package/uftrace/uftrace.mk | 35 +++++++++++++++++++++++++++++++++++ 5 files changed, 66 insertions(+) create mode 100644 package/uftrace/Config.in create mode 100644 package/uftrace/uftrace.hash create mode 100644 package/uftrace/uftrace.mk diff --git a/DEVELOPERS b/DEVELOPERS index ceb9cc9160..1c63e693b3 100644 --- a/DEVELOPERS +++ b/DEVELOPERS @@ -980,6 +980,9 @@ N: Gerome Burlats <gerome.burlats@smile.fr> F: board/qemu/ F: configs/qemu_* +N: Giacomo Longo <gabibbo97@gmail.com> +F: package/uftrace/ + N: Gilles Talis <gilles.talis@gmail.com> F: board/freescale/imx8mmevk/ F: configs/freescale_imx8mmevk_defconfig diff --git a/package/Config.in b/package/Config.in index ee05467479..b9c51dc3f1 100644 --- a/package/Config.in +++ b/package/Config.in @@ -140,6 +140,7 @@ menu "Debugging, profiling and benchmark" source "package/trace-cmd/Config.in" source "package/trinity/Config.in" source "package/uclibc-ng-test/Config.in" + source "package/uftrace/Config.in" source "package/valgrind/Config.in" source "package/vmtouch/Config.in" source "package/whetstone/Config.in" diff --git a/package/uftrace/Config.in b/package/uftrace/Config.in new file mode 100644 index 0000000000..4349a5778e --- /dev/null +++ b/package/uftrace/Config.in @@ -0,0 +1,24 @@ +config BR2_PACKAGE_UFTRACE_ARCH_SUPPORTS + bool + default y if BR2_aarch64 + default y if BR2_arm + default y if BR2_i386 + default y if BR2_x86_64 + +config BR2_PACKAGE_UFTRACE + bool "uftrace" + depends on BR2_TOOLCHAIN_USES_GLIBC + depends on BR2_PACKAGE_UFTRACE_ARCH_SUPPORTS + depends on BR2_INSTALL_LIBSTDCPP + depends on !BR2_STATIC_LIBS + depends on BR2_USE_WCHAR # elfutils + depends on BR2_TOOLCHAIN_HAS_THREADS # elfutils + select BR2_PACKAGE_ELFUTILS + help + Tool to trace and analyze execution of a program. + + https://uftrace.github.io/slide + +comment "uftrace needs a glibc toolchain w/ C++, dynamic library, threads, wchar" + depends on BR2_PACKAGE_UFTRACE_ARCH_SUPPORTS + depends on !BR2_TOOLCHAIN_USES_GLIBC || !BR2_INSTALL_LIBSTDCPP || BR2_STATIC_LIBS || !BR2_TOOLCHAIN_HAS_THREADS || !BR2_USE_WCHAR diff --git a/package/uftrace/uftrace.hash b/package/uftrace/uftrace.hash new file mode 100644 index 0000000000..8f38e7431d --- /dev/null +++ b/package/uftrace/uftrace.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha512 f73ad4461051b9c61668161e077897d118ac556d234ff204e32bf14ecdc2c0df148da30ea5d5054641e79ea20b29261d6f637908f5047f5669207ef244865358 uftrace-v0.9.4.tar.gz +sha512 aee80b1f9f7f4a8a00dcf6e6ce6c41988dcaedc4de19d9d04460cbfb05d99829ffe8f9d038468eabbfba4d65b38e8dbef5ecf5eb8a1b891d9839cda6c48ee957 COPYING diff --git a/package/uftrace/uftrace.mk b/package/uftrace/uftrace.mk new file mode 100644 index 0000000000..bce98888de --- /dev/null +++ b/package/uftrace/uftrace.mk @@ -0,0 +1,35 @@ +################################################################################ +# +# uftrace +# +################################################################################ + +UFTRACE_VERSION = v0.9.4 +UFTRACE_SITE = $(call github,namhyung,uftrace,$(UFTRACE_VERSION)) +UFTRACE_LICENSE = GPL-2.0+ +UFTRACE_LICENSE_FILES = COPYING +UFTRACE_DEPENDENCIES = elfutils + +UFTRACE_CONF_OPTS = \ + --without-capstone \ + --without-libpython + +ifeq ($(BR2_aarch64),y) +UFTRACE_CONF_OPTS += --arch=aarch64 +else ifeq ($(BR2_arm),y) +UFTRACE_CONF_OPTS += --arch=arm +else ifeq ($(BR2_i386),y) +UFTRACE_CONF_OPTS += --arch=i386 +else ifeq ($(BR2_x86_64),y) +UFTRACE_CONF_OPTS += --arch=x86_64 +endif + +ifeq ($(BR2_PACKAGE_LUAJIT),n) +UFTRACE_CONF_OPTS += --without-libluajit +endif + +ifeq ($(BR2_PACKAGE_NCURSES_WCHAR),n) +UFTRACE_CONF_OPTS += --without-libncurses +endif + +$(eval $(autotools-package)) -- 2.28.0 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* [Buildroot] [PATCH 1/1] package/uftrace: new package 2020-10-27 15:14 ` [Buildroot] [PATCH " Giacomo Longo @ 2020-11-03 20:39 ` Thomas Petazzoni 2020-11-05 12:19 ` [Buildroot] [PATCH v3 " Giacomo Longo 0 siblings, 1 reply; 9+ messages in thread From: Thomas Petazzoni @ 2020-11-03 20:39 UTC (permalink / raw) To: buildroot Hello, On Tue, 27 Oct 2020 16:14:08 +0100 Giacomo Longo <gabibbo97@gmail.com> wrote: > diff --git a/package/uftrace/Config.in b/package/uftrace/Config.in > new file mode 100644 > index 0000000000..4349a5778e > --- /dev/null > +++ b/package/uftrace/Config.in > @@ -0,0 +1,24 @@ > +config BR2_PACKAGE_UFTRACE_ARCH_SUPPORTS > + bool > + default y if BR2_aarch64 > + default y if BR2_arm > + default y if BR2_i386 > + default y if BR2_x86_64 > + > +config BR2_PACKAGE_UFTRACE > + bool "uftrace" > + depends on BR2_TOOLCHAIN_USES_GLIBC In fact the reason why you can only use glibc is two-fold: * You select elfutils, and elfutils does not build on musl. * uftrace uses ADDR_NO_RANDOMIZE, which isn't supported in uClibc So it would be good to write something like this: # elfutils not available for musl, uClibc-ng does not # provide ADDR_NO_RANDOMIZE, so only glibc is supported depends on BR2_TOOLCHAIN_USES_GLIBC > +comment "uftrace needs a glibc toolchain w/ C++, dynamic library, threads, wchar" > + depends on BR2_PACKAGE_UFTRACE_ARCH_SUPPORTS > + depends on !BR2_TOOLCHAIN_USES_GLIBC || !BR2_INSTALL_LIBSTDCPP || BR2_STATIC_LIBS || !BR2_TOOLCHAIN_HAS_THREADS || !BR2_USE_WCHAR Could you cut this line at ~80 characters, using a backslash ? See other packages. > diff --git a/package/uftrace/uftrace.hash b/package/uftrace/uftrace.hash > new file mode 100644 > index 0000000000..8f38e7431d > --- /dev/null > +++ b/package/uftrace/uftrace.hash > @@ -0,0 +1,3 @@ > +# Locally computed: > +sha512 f73ad4461051b9c61668161e077897d118ac556d234ff204e32bf14ecdc2c0df148da30ea5d5054641e79ea20b29261d6f637908f5047f5669207ef244865358 uftrace-v0.9.4.tar.gz > +sha512 aee80b1f9f7f4a8a00dcf6e6ce6c41988dcaedc4de19d9d04460cbfb05d99829ffe8f9d038468eabbfba4d65b38e8dbef5ecf5eb8a1b891d9839cda6c48ee957 COPYING Could you use sha256 hashes instead ? > +UFTRACE_VERSION = v0.9.4 > +UFTRACE_SITE = $(call github,namhyung,uftrace,$(UFTRACE_VERSION)) Please don't encode the "v" in the version field. So please do: UFTRACE_VERSION = 0.9.4 UFTRACE_SITE = $(call github,namhyung,uftrace,v$(UFTRACE_VERSION)) Indeed, this will allow UFTRACE_VERSION to be used to check if new uftrace releases are available, using release-monitoring.org. > +UFTRACE_LICENSE = GPL-2.0+ > +UFTRACE_LICENSE_FILES = COPYING > +UFTRACE_DEPENDENCIES = elfutils > + > +UFTRACE_CONF_OPTS = \ > + --without-capstone \ > + --without-libpython > + > +ifeq ($(BR2_aarch64),y) > +UFTRACE_CONF_OPTS += --arch=aarch64 > +else ifeq ($(BR2_arm),y) > +UFTRACE_CONF_OPTS += --arch=arm > +else ifeq ($(BR2_i386),y) > +UFTRACE_CONF_OPTS += --arch=i386 > +else ifeq ($(BR2_x86_64),y) > +UFTRACE_CONF_OPTS += --arch=x86_64 > +endif > + > +ifeq ($(BR2_PACKAGE_LUAJIT),n) BR2_PACKAGE_LUAJIT is never going to be "n", so this condition will never be true. Also, if luajit *is* there, you want luajit to be compiled before uftrace. So you want something like this: # No --with-<option> available ifeq ($(BR2_PACKAGE_LUAJIT),y) UFTRACE_DEPENDENCIES += luajit else UFTRACE_CONF_OPTS += --without-libluajit endif > +ifeq ($(BR2_PACKAGE_NCURSES_WCHAR),n) > +UFTRACE_CONF_OPTS += --without-libncurses > +endif Same comment as above. > +$(eval $(autotools-package)) This is not an autotools-based package: it uses a hand-written configure script, not one that is generated by autoconf. For example, this explains why it doesn't support --with-<foo>, but only --without-<foo>. So, please use the generic-package infrastructure in this sort of cases. Using autotools-package should really only be done for packages that do use autoconf. Could you adjust your package according to this ? Thanks a lot! Thomas -- Thomas Petazzoni, CTO, Bootlin Embedded Linux and Kernel engineering https://bootlin.com ^ permalink raw reply [flat|nested] 9+ messages in thread
* [Buildroot] [PATCH v3 1/1] package/uftrace: new package 2020-11-03 20:39 ` Thomas Petazzoni @ 2020-11-05 12:19 ` Giacomo Longo 0 siblings, 0 replies; 9+ messages in thread From: Giacomo Longo @ 2020-11-05 12:19 UTC (permalink / raw) To: buildroot Signed-off-by: Giacomo Longo <gabibbo97@gmail.com> --- Hopefully this message will end into the email (formatted as per BR docs 21.5.5). Following the helpful feedback from Thomas Petazzoni, I have improved upon my v2 patchset and included the changelogs below for reference. I have checked the patch as following: $ ./utils/check-package ./package/uftrace/* 85 lines processed 0 warnings generated $ ./utils/test-pkg -d ../test-pkg -c ../uftrace.config -p uftrace -a ... (omitted for brevity) 45 builds, 36 skipped, 0 build failed, 0 legal-info failed The package has also been tested with a virtualized ARMv7 rootfs. Changes v2 -> v3: - added explainatation on why glibc is required - splitted long lines in Config.in - hashes are now calculated with sha256 instead of sha512 - package now leverages generic-package instead of autotools - the prefix is now /usr instead of /usr/local to be more in line with other packages - definitions of the build commands are placed near the bottom of the makefile - added comments above the configuration options to explain why a check is needed Changes v1 -> v2: - added myself to DEVELOPERS - removed configuration options that now are used in the makefile - removed dependency on UTIL_LINUX that was not needed - BR2_INSTALL_LIBSTDCPP is now "depends on" instead of "selects" - comment in Config.in is now at the end of the file - comment now will be shown only in the correct architecture - makefile has been sorted: - common configuration is at the top - architecture configuration is in the middle - feature flags are at the bottom Changes v1: - initial proposal --- DEVELOPERS | 3 ++ package/Config.in | 1 + package/uftrace/Config.in | 28 +++++++++++++++++++ package/uftrace/uftrace.hash | 3 ++ package/uftrace/uftrace.mk | 54 ++++++++++++++++++++++++++++++++++++ 5 files changed, 89 insertions(+) create mode 100644 package/uftrace/Config.in create mode 100644 package/uftrace/uftrace.hash create mode 100644 package/uftrace/uftrace.mk diff --git a/DEVELOPERS b/DEVELOPERS index 43cc1b55ae..021be57a75 100644 --- a/DEVELOPERS +++ b/DEVELOPERS @@ -980,6 +980,9 @@ N: Gerome Burlats <gerome.burlats@smile.fr> F: board/qemu/ F: configs/qemu_* +N: Giacomo Longo <gabibbo97@gmail.com> +F: package/uftrace/ + N: Gilles Talis <gilles.talis@gmail.com> F: board/freescale/imx8mmevk/ F: configs/freescale_imx8mmevk_defconfig diff --git a/package/Config.in b/package/Config.in index 016a99ed1a..cbe6a30fd0 100644 --- a/package/Config.in +++ b/package/Config.in @@ -140,6 +140,7 @@ menu "Debugging, profiling and benchmark" source "package/trace-cmd/Config.in" source "package/trinity/Config.in" source "package/uclibc-ng-test/Config.in" + source "package/uftrace/Config.in" source "package/valgrind/Config.in" source "package/vmtouch/Config.in" source "package/whetstone/Config.in" diff --git a/package/uftrace/Config.in b/package/uftrace/Config.in new file mode 100644 index 0000000000..1a9a974d6e --- /dev/null +++ b/package/uftrace/Config.in @@ -0,0 +1,28 @@ +config BR2_PACKAGE_UFTRACE_ARCH_SUPPORTS + bool + default y if BR2_aarch64 + default y if BR2_arm + default y if BR2_i386 + default y if BR2_x86_64 + +config BR2_PACKAGE_UFTRACE + bool "uftrace" + # elfutils is not available on musl + # uClibc-ng does not support the ADDR_NO_RANDOMIZE personality + # so only glibc is supported + depends on BR2_TOOLCHAIN_USES_GLIBC + depends on BR2_PACKAGE_UFTRACE_ARCH_SUPPORTS + depends on BR2_INSTALL_LIBSTDCPP + depends on !BR2_STATIC_LIBS + depends on BR2_USE_WCHAR # elfutils + depends on BR2_TOOLCHAIN_HAS_THREADS # elfutils + select BR2_PACKAGE_ELFUTILS + help + Tool to trace and analyze execution of a program. + + https://uftrace.github.io/slide + +comment "uftrace needs a glibc toolchain w/ C++, dynamic library, threads, wchar" + depends on BR2_PACKAGE_UFTRACE_ARCH_SUPPORTS + depends on !BR2_TOOLCHAIN_USES_GLIBC || !BR2_INSTALL_LIBSTDCPP || \ + BR2_STATIC_LIBS || !BR2_TOOLCHAIN_HAS_THREADS || !BR2_USE_WCHAR diff --git a/package/uftrace/uftrace.hash b/package/uftrace/uftrace.hash new file mode 100644 index 0000000000..ccf79ddeb7 --- /dev/null +++ b/package/uftrace/uftrace.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 418d30c959d3b6d0dcafd55e588a5d414a9984b30f2522a5af004a268824a5a2 uftrace-0.9.4.tar.gz +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING diff --git a/package/uftrace/uftrace.mk b/package/uftrace/uftrace.mk new file mode 100644 index 0000000000..266be2e65b --- /dev/null +++ b/package/uftrace/uftrace.mk @@ -0,0 +1,54 @@ +################################################################################ +# +# uftrace +# +################################################################################ + +UFTRACE_VERSION = 0.9.4 +UFTRACE_SITE = $(call github,namhyung,uftrace,v$(UFTRACE_VERSION)) +UFTRACE_LICENSE = GPL-2.0+ +UFTRACE_LICENSE_FILES = COPYING +UFTRACE_DEPENDENCIES = elfutils + +UFTRACE_CONF_OPTS = \ + --without-capstone \ + --without-libpython + +ifeq ($(BR2_aarch64),y) +UFTRACE_CONF_OPTS += --arch=aarch64 +else ifeq ($(BR2_arm),y) +UFTRACE_CONF_OPTS += --arch=arm +else ifeq ($(BR2_i386),y) +UFTRACE_CONF_OPTS += --arch=i386 +else ifeq ($(BR2_x86_64),y) +UFTRACE_CONF_OPTS += --arch=x86_64 +endif + +# No --with-luajit option available +ifeq ($(BR2_PACKAGE_LUAJIT),y) +UFTRACE_DEPENDENCIES += luajit +else +UFTRACE_CONF_OPTS += --without-libluajit +endif + +# No --with-ncurses option available +ifeq ($(BR2_PACKAGE_NCURSES_WCHAR),y) +UFTRACE_DEPENDENCIES += ncurses +else +UFTRACE_CONF_OPTS += --without-libncurses +endif + +define UFTRACE_CONFIGURE_CMDS + (cd $(@D) && ./configure --cross-compile=$(TARGET_CROSS) \ + --prefix=$(TARGET_DIR)/usr $(UFTRACE_CONF_OPTS)) +endef + +define UFTRACE_BUILD_CMDS + $(MAKE) -C $(@D) +endef + +define UFTRACE_INSTALL_TARGET_CMDS + $(MAKE) -C $(@D) install +endef + +$(eval $(generic-package)) -- 2.28.0 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* [Buildroot] [PATCH v2 1/1] package/uftrace: new package @ 2021-04-08 19:46 Asaf Kahlon 2021-04-22 20:51 ` Thomas Petazzoni 0 siblings, 1 reply; 9+ messages in thread From: Asaf Kahlon @ 2021-04-08 19:46 UTC (permalink / raw) To: buildroot The uftrace tool is to trace and analyze execution of a program written in C/C++. This package contains a ./configure script to check for possible extentions. This script is called directly from the Makefile, so we don't need to call it explicitly. Signed-off-by: Asaf Kahlon <asafka7@gmail.com> --- v1->v2: * amend commit message * use github macro * add _ARCH_SUPPORT * more minor refactors Signed-off-by: Asaf Kahlon <asafka7@gmail.com> --- DEVELOPERS | 1 + package/Config.in | 1 + package/uftrace/Config.in | 19 +++++++++++++++++++ package/uftrace/uftrace.hash | 3 +++ package/uftrace/uftrace.mk | 26 ++++++++++++++++++++++++++ 5 files changed, 50 insertions(+) create mode 100644 package/uftrace/Config.in create mode 100644 package/uftrace/uftrace.hash create mode 100644 package/uftrace/uftrace.mk diff --git a/DEVELOPERS b/DEVELOPERS index 7699c471d3..f8187dfb4d 100644 --- a/DEVELOPERS +++ b/DEVELOPERS @@ -240,6 +240,7 @@ F: package/python* F: package/snmpclitools/ F: package/spdlog/ F: package/uftp/ +F: package/uftrace/ F: package/uvw/ F: package/zeromq/ diff --git a/package/Config.in b/package/Config.in index 1269bc7b51..cd5cd17576 100644 --- a/package/Config.in +++ b/package/Config.in @@ -144,6 +144,7 @@ menu "Debugging, profiling and benchmark" source "package/trace-cmd/Config.in" source "package/trinity/Config.in" source "package/uclibc-ng-test/Config.in" + source "package/uftrace/Config.in" source "package/valgrind/Config.in" source "package/vmtouch/Config.in" source "package/whetstone/Config.in" diff --git a/package/uftrace/Config.in b/package/uftrace/Config.in new file mode 100644 index 0000000000..2a969445f2 --- /dev/null +++ b/package/uftrace/Config.in @@ -0,0 +1,19 @@ +config BR2_PACKAGE_UFTRACE_ARCH_SUPPORTS + bool + default y if BR2_arm + default y if BR2_aarch64 + default y if BR2_i386 + default y if BR2_x86_64 + +config BR2_PACKAGE_UFTRACE + bool "uftrace" + depends on BR2_PACKAGE_UFTRACE_ARCH_SUPPORTS + help + The uftrace tool is to trace and analyze execution of a + program written in C/C++. It was heavily inspired by the + ftrace framework of the Linux kernel (especially function + graph tracer) and supports userspace programs. + It supports various kind of commands and filters to help + analysis of the program execution and performance. + + https://github.com/namhyung/uftrace diff --git a/package/uftrace/uftrace.hash b/package/uftrace/uftrace.hash new file mode 100644 index 0000000000..fb1e116be6 --- /dev/null +++ b/package/uftrace/uftrace.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 418d30c959d3b6d0dcafd55e588a5d414a9984b30f2522a5af004a268824a5a2 uftrace-0.9.4.tar.gz +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING diff --git a/package/uftrace/uftrace.mk b/package/uftrace/uftrace.mk new file mode 100644 index 0000000000..20425a9c48 --- /dev/null +++ b/package/uftrace/uftrace.mk @@ -0,0 +1,26 @@ +################################################################################ +# +# uftrace +# +################################################################################ + +UFTRACE_VERSION = 0.9.4 +UFTRACE_SITE = $(call github,namhyung,uftrace,v$(UFTRACE_VERSION)) +UFTRACE_LICENSE = GPL-2.0 +UFTRACE_LICENSE_FILES = COPYING + +# uftrace always compiles a small test program to check if elfutils exists, so +# there's no special flag for it, we just need to make sure it's installed. +ifeq ($(BR2_PACKAGE_ELFUTILS),y) +UFTRACE_DEPENDENCIES += elfutils +endif + +define UFTRACE_BUILD_CMDS + $(TARGET_CONFIGURE_OPTS) ARCH=$(BR2_ARCH) $(MAKE) -C $(@D) +endef + +define UFTRACE_INSTALL_TARGET_CMDS + $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) DESTDIR=$(TARGET_DIR) install +endef + +$(eval $(generic-package)) -- 2.30.0 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* [Buildroot] [PATCH v2 1/1] package/uftrace: new package 2021-04-08 19:46 [Buildroot] [PATCH v2 " Asaf Kahlon @ 2021-04-22 20:51 ` Thomas Petazzoni 0 siblings, 0 replies; 9+ messages in thread From: Thomas Petazzoni @ 2021-04-22 20:51 UTC (permalink / raw) To: buildroot Hello Asaf, On Thu, 8 Apr 2021 22:46:31 +0300 Asaf Kahlon <asafka7@gmail.com> wrote: > diff --git a/package/uftrace/uftrace.mk b/package/uftrace/uftrace.mk > new file mode 100644 > index 0000000000..20425a9c48 > --- /dev/null > +++ b/package/uftrace/uftrace.mk > @@ -0,0 +1,26 @@ > +################################################################################ > +# > +# uftrace > +# > +################################################################################ > + > +UFTRACE_VERSION = 0.9.4 > +UFTRACE_SITE = $(call github,namhyung,uftrace,v$(UFTRACE_VERSION)) > +UFTRACE_LICENSE = GPL-2.0 > +UFTRACE_LICENSE_FILES = COPYING > + > +# uftrace always compiles a small test program to check if elfutils exists, so > +# there's no special flag for it, we just need to make sure it's installed. > +ifeq ($(BR2_PACKAGE_ELFUTILS),y) > +UFTRACE_DEPENDENCIES += elfutils > +endif > + > +define UFTRACE_BUILD_CMDS > + $(TARGET_CONFIGURE_OPTS) ARCH=$(BR2_ARCH) $(MAKE) -C $(@D) > +endef Why don't you use the configure script? It is not autotools-based, but the official build instructions suggest to use it: $ ./configure $ make $ sudo make install The configure script allows to explicit disable unused feature, using --without-<foo> options. Could you have a look at this? Also, the manual says that on ARM, only ARM >= v6 is supported. So this probably means that: config BR2_PACKAGE_UFTRACE_ARCH_SUPPORTS bool default y if BR2_arm should instead be: default y if BR2_ARM_CPU_ARMV6 || BR2_ARM_CPU_ARMV7A Thanks a lot! Thomas -- Thomas Petazzoni, co-owner and CEO, Bootlin Embedded Linux and Kernel engineering https://bootlin.com ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2021-04-22 20:51 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2020-10-26 23:14 [Buildroot] [PATCH 1/1] package/uftrace: new package Giacomo Longo 2020-10-27 9:36 ` Thomas Petazzoni 2020-10-27 15:14 ` [Buildroot] [PATCH v2 " Giacomo Longo 2020-11-03 20:31 ` Thomas Petazzoni 2020-10-27 15:14 ` [Buildroot] [PATCH " Giacomo Longo 2020-11-03 20:39 ` Thomas Petazzoni 2020-11-05 12:19 ` [Buildroot] [PATCH v3 " Giacomo Longo -- strict thread matches above, loose matches on Subject: below -- 2021-04-08 19:46 [Buildroot] [PATCH v2 " Asaf Kahlon 2021-04-22 20:51 ` Thomas Petazzoni
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox