2013-06-06 01:53:30 +02:00
|
|
|
################################################################################
|
2013-01-06 06:22:45 +01:00
|
|
|
#
|
|
|
|
# perf
|
|
|
|
#
|
2013-06-06 01:53:30 +02:00
|
|
|
################################################################################
|
2013-01-06 06:22:45 +01:00
|
|
|
|
2015-07-14 19:35:14 +02:00
|
|
|
LINUX_TOOLS += perf
|
2013-01-06 06:22:45 +01:00
|
|
|
|
2015-07-14 19:35:14 +02:00
|
|
|
PERF_DEPENDENCIES = host-flex host-bison
|
2013-01-06 06:22:45 +01:00
|
|
|
|
2015-07-14 19:35:11 +02:00
|
|
|
ifeq ($(KERNEL_ARCH),x86_64)
|
|
|
|
PERF_ARCH=x86
|
|
|
|
else
|
|
|
|
PERF_ARCH=$(KERNEL_ARCH)
|
|
|
|
endif
|
|
|
|
|
2013-01-06 06:22:45 +01:00
|
|
|
PERF_MAKE_FLAGS = \
|
|
|
|
$(LINUX_MAKE_FLAGS) \
|
2016-03-11 19:19:55 +01:00
|
|
|
JOBS=$(PARALLEL_JOBS) \
|
2015-07-14 19:35:11 +02:00
|
|
|
ARCH=$(PERF_ARCH) \
|
2016-03-11 19:19:56 +01:00
|
|
|
DESTDIR=$(TARGET_DIR) \
|
|
|
|
prefix=/usr \
|
|
|
|
WERROR=0 \
|
2013-01-06 06:22:45 +01:00
|
|
|
NO_LIBAUDIT=1 \
|
|
|
|
NO_NEWT=1 \
|
|
|
|
NO_GTK2=1 \
|
|
|
|
NO_LIBPERL=1 \
|
|
|
|
NO_LIBPYTHON=1 \
|
2016-03-11 19:19:56 +01:00
|
|
|
NO_LIBBIONIC=1
|
2013-01-06 06:22:45 +01:00
|
|
|
|
2016-02-22 11:22:45 +01:00
|
|
|
# We need to pass an argument to ld for setting the endianness when
|
|
|
|
# building it for MIPS architecture, otherwise the default one will
|
|
|
|
# always be used (which is big endian) and the compilation for little
|
|
|
|
# endian will always fail showing an error like this one:
|
|
|
|
# LD foo.o
|
|
|
|
# mips-linux-gnu-ld: foo.o: compiled for a little endian system and
|
|
|
|
# target is big endian
|
|
|
|
ifeq ($(BR2_mips)$(BR2_mips64),y)
|
|
|
|
PERF_MAKE_FLAGS += LD="$(TARGET_LD) -EB"
|
|
|
|
else ifeq ($(BR2_mipsel)$(BR2_mips64el),y)
|
|
|
|
PERF_MAKE_FLAGS += LD="$(TARGET_LD) -EL"
|
|
|
|
endif
|
|
|
|
|
2014-01-28 14:10:58 +01:00
|
|
|
# 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)
|
2015-03-31 09:21:57 +02:00
|
|
|
PERF_MAKE_FLAGS += NO_BACKTRACE=1
|
2014-01-28 14:10:58 +01:00
|
|
|
endif
|
|
|
|
|
2015-07-14 19:35:08 +02:00
|
|
|
ifeq ($(BR2_PACKAGE_SLANG),y)
|
|
|
|
PERF_DEPENDENCIES += slang
|
2016-03-11 19:19:56 +01:00
|
|
|
else
|
|
|
|
PERF_MAKE_FLAGS += NO_SLANG=1
|
2015-07-14 19:35:08 +02:00
|
|
|
endif
|
|
|
|
|
2015-07-14 19:35:10 +02:00
|
|
|
ifeq ($(BR2_PACKAGE_LIBUNWIND),y)
|
|
|
|
PERF_DEPENDENCIES += libunwind
|
2016-03-11 19:19:56 +01:00
|
|
|
else
|
|
|
|
PERF_MAKE_FLAGS += NO_LIBUNWIND=1
|
2015-07-14 19:35:10 +02:00
|
|
|
endif
|
|
|
|
|
2015-07-14 19:35:09 +02:00
|
|
|
ifeq ($(BR2_PACKAGE_NUMACTL),y)
|
|
|
|
PERF_DEPENDENCIES += numactl
|
2016-03-11 19:19:56 +01:00
|
|
|
else
|
|
|
|
PERF_MAKE_FLAGS += NO_LIBNUMA=1
|
2015-07-14 19:35:09 +02:00
|
|
|
endif
|
|
|
|
|
2013-01-06 06:22:46 +01:00
|
|
|
ifeq ($(BR2_PACKAGE_ELFUTILS),y)
|
2015-03-31 09:21:57 +02:00
|
|
|
PERF_DEPENDENCIES += elfutils
|
2013-01-06 06:22:46 +01:00
|
|
|
else
|
2015-03-31 09:21:57 +02:00
|
|
|
PERF_MAKE_FLAGS += NO_LIBELF=1 NO_DWARF=1
|
2013-01-06 06:22:46 +01:00
|
|
|
endif
|
|
|
|
|
2016-03-11 19:19:57 +01:00
|
|
|
ifeq ($(BR2_PACKAGE_ZLIB),y)
|
|
|
|
PERF_DEPENDENCIES += zlib
|
|
|
|
else
|
|
|
|
PERF_MAKE_FLAGS += NO_ZLIB=1
|
|
|
|
endif
|
|
|
|
|
|
|
|
# lzma is provided by xz
|
|
|
|
ifeq ($(BR2_PACKAGE_XZ),y)
|
|
|
|
PERF_DEPENDENCIES += xz
|
|
|
|
else
|
|
|
|
PERF_MAKE_FLAGS += NO_LZMA=1
|
|
|
|
endif
|
|
|
|
|
linux/perf: really do not build the documentation
The perf buildsystem, inside the kernel, is not really amenable to be
easily used...
Regarding the documentation, it will forcefully try to detect asciidoc
and, with the latest versions, xmlto, completely disregarding what the
user may provide.
We currently pass ASCIIDOC= (the empty string) on the make command line,
as an attempt to disable building the documentation, but that has no
effect whatsoever on perf: that variable is not passed down to the
sub-sub-make (yes, a two-level depth) that is responsible for building
the documentation.
We really do not want to build any of the documentation (the user can
refer to the documentation on his own development machine), so we use a
little dirty trick: we provide a GNUmakefile beside the existing
Makefile for the documentation; GNUmakefile always takes precedence over
a Makefile when both are present. We only provide a catch-all-no-recipe
rule in that GNUmakefile, so it really does nothing useful, except avoid
building the documentation.
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Thomas De Schampheleire <patrickdepinguin@gmail.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
2016-03-11 19:19:54 +01:00
|
|
|
# We really do not want to build the perf documentation, because it
|
|
|
|
# has stringent requirement on the documentation generation tools,
|
|
|
|
# like xmlto and asciidoc), which may be lagging behind on some
|
|
|
|
# distributions.
|
|
|
|
# We name it 'GNUmakefile' so that GNU make will use it instead of
|
|
|
|
# the existing 'Makefile'.
|
|
|
|
define PERF_DISABLE_DOCUMENTATION
|
|
|
|
if [ -f $(@D)/tools/perf/Documentation/Makefile ]; then \
|
|
|
|
printf "%%:\n\t@:\n" >$(@D)/tools/perf/Documentation/GNUmakefile; \
|
|
|
|
fi
|
|
|
|
endef
|
|
|
|
LINUX_POST_PATCH_HOOKS += PERF_DISABLE_DOCUMENTATION
|
|
|
|
|
2015-07-14 19:35:14 +02:00
|
|
|
# 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.
|
2013-01-06 06:22:45 +01:00
|
|
|
define PERF_BUILD_CMDS
|
2015-07-14 19:35:14 +02:00
|
|
|
$(Q)if test ! -f $(@D)/tools/perf/Makefile ; then \
|
2013-01-06 06:22:47 +01:00
|
|
|
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 \
|
2015-07-14 19:35:14 +02:00
|
|
|
if ! grep -q NO_LIBELF $(@D)/tools/perf/Makefile* ; then \
|
|
|
|
if ! test -r $(@D)/tools/perf/config/Makefile ; then \
|
2014-04-05 14:51:02 +02:00
|
|
|
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 \
|
2013-01-06 06:22:47 +01:00
|
|
|
fi \
|
|
|
|
fi
|
2015-07-14 19:35:14 +02:00
|
|
|
$(TARGET_MAKE_ENV) $(MAKE1) $(PERF_MAKE_FLAGS) \
|
|
|
|
-C $(@D)/tools/perf O=$(@D)/tools/perf/
|
2013-01-06 06:22:45 +01:00
|
|
|
endef
|
|
|
|
|
|
|
|
# After installation, we remove the Perl and Python scripts from the
|
|
|
|
# target.
|
|
|
|
define PERF_INSTALL_TARGET_CMDS
|
2015-07-14 19:35:14 +02:00
|
|
|
$(TARGET_MAKE_ENV) $(MAKE1) $(PERF_MAKE_FLAGS) \
|
|
|
|
-C $(@D)/tools/perf O=$(@D)/tools/perf/ install
|
2013-01-06 06:22:45 +01:00
|
|
|
$(RM) -rf $(TARGET_DIR)/usr/libexec/perf-core/scripts/
|
2016-01-15 09:47:35 +01:00
|
|
|
$(RM) -rf $(TARGET_DIR)/usr/libexec/perf-core/tests/
|
2013-01-06 06:22:45 +01:00
|
|
|
endef
|