package/perf: migrate perf to use the new linux-tools infrastructure
authorRomain Naour <romain.naour@openwide.fr>
Tue, 14 Jul 2015 17:35:14 +0000 (19:35 +0200)
committerThomas Petazzoni <thomas.petazzoni@free-electrons.com>
Tue, 14 Jul 2015 21:28:06 +0000 (23:28 +0200)
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 <romain.naour@openwide.fr>
Reviewed-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Config.in.legacy
linux/Config.tools.in
linux/linux-tool-perf.mk [new file with mode: 0644]
package/Config.in
package/perf/Config.in [deleted file]
package/perf/perf.mk [deleted file]

index 0a8d0a6f13356a36299b2ab3bcc51d3db52b904d..4afeb834813d3eccdbcb8b2c58ba297d7d817aea 100644 (file)
@@ -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
index 008e68c5f456026e17ba0021c8b75f81cb3d07b5..24ef8cd7436bd0f9bbaad71a6add9e4e2f1b4e51 100644 (file)
@@ -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 (file)
index 0000000..0bd0ed1
--- /dev/null
@@ -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
index 5beb45016f85072bd8b87de4626bad4f65ff6d9f..86a53c82318aaf074db5cf935c11519582cbd78c 100644 (file)
@@ -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 (file)
index 05c9870..0000000
+++ /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 (file)
index 2bdd555..0000000
+++ /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))