From: Romain Naour Date: Tue, 14 Jul 2015 17:35:14 +0000 (+0200) Subject: package/perf: migrate perf to use the new linux-tools infrastructure X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=1326e7618571e1a27247e3aa4ef61dcd69f87c3e;p=buildroot.git package/perf: migrate perf to use the new linux-tools infrastructure Remove the perf package and add legacy handling. [Thomas: - improve the Config.in.legacy help text - improve the comment explaining why we pass O= when building perf] Signed-off-by: Romain Naour Reviewed-by: "Yann E. MORIN" Signed-off-by: Thomas Petazzoni --- diff --git a/Config.in.legacy b/Config.in.legacy index 0a8d0a6f13..4afeb83481 100644 --- a/Config.in.legacy +++ b/Config.in.legacy @@ -107,6 +107,15 @@ endif ############################################################################### comment "Legacy options removed in 2015.08" +config BR2_PACKAGE_PERF + bool "perf option has been renamed" + select BR2_LEGACY + select BR2_LINUX_KERNEL_TOOL_PERF + help + The perf package has been moved as a Linux tools package, + and the option to enable it is now + BR2_LINUX_KERNEL_TOOL_PERF. + config BR2_BINUTILS_VERSION_2_22 bool "binutils 2.22 removed" select BR2_LEGACY diff --git a/linux/Config.tools.in b/linux/Config.tools.in index 008e68c5f4..24ef8cd743 100644 --- a/linux/Config.tools.in +++ b/linux/Config.tools.in @@ -8,4 +8,22 @@ config BR2_LINUX_KERNEL_TOOL_CPUPOWER cpupower is a collection of tools to examine and tune power saving related features of your processor. +config BR2_LINUX_KERNEL_TOOL_PERF + bool "perf" + help + perf (sometimes "Perf Events" or perf tools, originally + "Performance Counters for Linux") - is a performance + analyzing tool in Linux, available from kernel version + 2.6.31. User-space controlling utility, called 'perf' has + git-like interface with subcommands. It is capable of + statistical profiling of entire system (both kernel and user + code), single CPU or severals threads. + + This will build and install the userspace 'perf' + command. It is up to the user to ensure that the kernel + configuration has all the suitable options enabled to allow a + proper operation of 'perf'. + + https://perf.wiki.kernel.org/ + endmenu diff --git a/linux/linux-tool-perf.mk b/linux/linux-tool-perf.mk new file mode 100644 index 0000000000..0bd0ed1a13 --- /dev/null +++ b/linux/linux-tool-perf.mk @@ -0,0 +1,87 @@ +################################################################################ +# +# perf +# +################################################################################ + +LINUX_TOOLS += perf + +PERF_DEPENDENCIES = host-flex host-bison + +ifeq ($(KERNEL_ARCH),x86_64) +PERF_ARCH=x86 +else +PERF_ARCH=$(KERNEL_ARCH) +endif + +PERF_MAKE_FLAGS = \ + $(LINUX_MAKE_FLAGS) \ + ARCH=$(PERF_ARCH) \ + NO_LIBAUDIT=1 \ + NO_NEWT=1 \ + NO_GTK2=1 \ + NO_LIBPERL=1 \ + NO_LIBPYTHON=1 \ + DESTDIR=$(TARGET_DIR) \ + prefix=/usr \ + WERROR=0 \ + ASCIIDOC= + +# The call to backtrace() function fails for ARC, because for some +# reason the unwinder from libgcc returns early. Thus the usage of +# backtrace() should be disabled in perf explicitly: at build time +# backtrace() appears to be available, but it fails at runtime: the +# backtrace will contain only several functions from the top of stack, +# instead of the complete backtrace. +ifeq ($(BR2_arc),y) +PERF_MAKE_FLAGS += NO_BACKTRACE=1 +endif + +ifeq ($(BR2_PACKAGE_SLANG),y) +PERF_DEPENDENCIES += slang +endif + +ifeq ($(BR2_PACKAGE_LIBUNWIND),y) +PERF_DEPENDENCIES += libunwind +endif + +ifeq ($(BR2_PACKAGE_NUMACTL),y) +PERF_DEPENDENCIES += numactl +endif + +ifeq ($(BR2_PACKAGE_ELFUTILS),y) +PERF_DEPENDENCIES += elfutils +else +PERF_MAKE_FLAGS += NO_LIBELF=1 NO_DWARF=1 +endif + +# O must be redefined here to overwrite the one used by Buildroot for +# out of tree build. We build perf in $(@D)/tools/perf/ and not just +# $(@D) so that it isn't built in the root directory of the kernel +# sources. +define PERF_BUILD_CMDS + $(Q)if test ! -f $(@D)/tools/perf/Makefile ; then \ + echo "Your kernel version is too old and does not have the perf tool." ; \ + echo "At least kernel 2.6.31 must be used." ; \ + exit 1 ; \ + fi + $(Q)if test "$(BR2_PACKAGE_ELFUTILS)" = "" ; then \ + if ! grep -q NO_LIBELF $(@D)/tools/perf/Makefile* ; then \ + if ! test -r $(@D)/tools/perf/config/Makefile ; then \ + echo "The perf tool in your kernel cannot be built without libelf." ; \ + echo "Either upgrade your kernel to >= 3.7, or enable the elfutils package." ; \ + exit 1 ; \ + fi \ + fi \ + fi + $(TARGET_MAKE_ENV) $(MAKE1) $(PERF_MAKE_FLAGS) \ + -C $(@D)/tools/perf O=$(@D)/tools/perf/ +endef + +# After installation, we remove the Perl and Python scripts from the +# target. +define PERF_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE1) $(PERF_MAKE_FLAGS) \ + -C $(@D)/tools/perf O=$(@D)/tools/perf/ install + $(RM) -rf $(TARGET_DIR)/usr/libexec/perf-core/scripts/ +endef diff --git a/package/Config.in b/package/Config.in index 5beb45016f..86a53c8231 100644 --- a/package/Config.in +++ b/package/Config.in @@ -89,7 +89,6 @@ endif source "package/netperf/Config.in" source "package/oprofile/Config.in" source "package/pax-utils/Config.in" - source "package/perf/Config.in" source "package/pv/Config.in" source "package/racehound/Config.in" source "package/ramsmp/Config.in" diff --git a/package/perf/Config.in b/package/perf/Config.in deleted file mode 100644 index 05c9870cc1..0000000000 --- a/package/perf/Config.in +++ /dev/null @@ -1,21 +0,0 @@ -config BR2_PACKAGE_PERF - bool "perf" - depends on BR2_LINUX_KERNEL - help - perf (sometimes "Perf Events" or perf tools, originally - "Performance Counters for Linux") - is a performance - analyzing tool in Linux, available from kernel version - 2.6.31. User-space controlling utility, called 'perf' has - git-like interface with subcommands. It is capable of - statistical profiling of entire system (both kernel and user - code), single CPU or severals threads. - - This package builds and install the userspace 'perf' - command. It is up to the user to ensure that the kernel - configuration has all the suitable options enabled to allow a - proper operation of 'perf'. - - https://perf.wiki.kernel.org/ - -comment "perf needs a Linux kernel to be built" - depends on !BR2_LINUX_KERNEL diff --git a/package/perf/perf.mk b/package/perf/perf.mk deleted file mode 100644 index 2bdd555a41..0000000000 --- a/package/perf/perf.mk +++ /dev/null @@ -1,87 +0,0 @@ -################################################################################ -# -# perf -# -################################################################################ - -# Source taken from the Linux kernel tree -PERF_SOURCE = -PERF_VERSION = $(call qstrip,$(BR2_LINUX_KERNEL_VERSION)) - -PERF_DEPENDENCIES = linux host-flex host-bison - -ifeq ($(KERNEL_ARCH),x86_64) -PERF_ARCH=x86 -else -PERF_ARCH=$(KERNEL_ARCH) -endif - -PERF_MAKE_FLAGS = \ - $(LINUX_MAKE_FLAGS) \ - ARCH=$(PERF_ARCH) \ - NO_LIBAUDIT=1 \ - NO_NEWT=1 \ - NO_GTK2=1 \ - NO_LIBPERL=1 \ - NO_LIBPYTHON=1 \ - DESTDIR=$(TARGET_DIR) \ - prefix=/usr \ - WERROR=0 \ - ASCIIDOC= - -# The call to backtrace() function fails for ARC, because for some -# reason the unwinder from libgcc returns early. Thus the usage of -# backtrace() should be disabled in perf explicitly: at build time -# backtrace() appears to be available, but it fails at runtime: the -# backtrace will contain only several functions from the top of stack, -# instead of the complete backtrace. -ifeq ($(BR2_arc),y) -PERF_MAKE_FLAGS += NO_BACKTRACE=1 -endif - -ifeq ($(BR2_PACKAGE_SLANG),y) -PERF_DEPENDENCIES += slang -endif - -ifeq ($(BR2_PACKAGE_LIBUNWIND),y) -PERF_DEPENDENCIES += libunwind -endif - -ifeq ($(BR2_PACKAGE_NUMACTL),y) -PERF_DEPENDENCIES += numactl -endif - -ifeq ($(BR2_PACKAGE_ELFUTILS),y) -PERF_DEPENDENCIES += elfutils -else -PERF_MAKE_FLAGS += NO_LIBELF=1 NO_DWARF=1 -endif - -define PERF_BUILD_CMDS - $(Q)if test ! -f $(LINUX_DIR)/tools/perf/Makefile ; then \ - echo "Your kernel version is too old and does not have the perf tool." ; \ - echo "At least kernel 2.6.31 must be used." ; \ - exit 1 ; \ - fi - $(Q)if test "$(BR2_PACKAGE_ELFUTILS)" = "" ; then \ - if ! grep -q NO_LIBELF $(LINUX_DIR)/tools/perf/Makefile* ; then \ - if ! test -r $(LINUX_DIR)/tools/perf/config/Makefile ; then \ - echo "The perf tool in your kernel cannot be built without libelf." ; \ - echo "Either upgrade your kernel to >= 3.7, or enable the elfutils package." ; \ - exit 1 ; \ - fi \ - fi \ - fi - $(TARGET_MAKE_ENV) $(MAKE1) -C $(LINUX_DIR)/tools/perf \ - $(PERF_MAKE_FLAGS) O=$(@D) -endef - -# After installation, we remove the Perl and Python scripts from the -# target. -define PERF_INSTALL_TARGET_CMDS - $(TARGET_MAKE_ENV) $(MAKE1) -C $(LINUX_DIR)/tools/perf \ - $(PERF_MAKE_FLAGS) O=$(@D) install - $(RM) -rf $(TARGET_DIR)/usr/libexec/perf-core/scripts/ -endef - -$(eval $(generic-package))