013cc68bf7
perf auto-detects and uses the libbfd (from binutils) and openssl libraries if they are detected and happen to be built before perf is, but if they're not, or if per-package directories are enabled, it won't detect these libraries. Explicitly add dependencies on these packages if they are enabled, and disable the feature if not, so that the behavior is deterministic. Signed-off-by: Robert Hancock <hancock@sedsystems.ca> Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
161 lines
4.6 KiB
Makefile
161 lines
4.6 KiB
Makefile
################################################################################
|
|
#
|
|
# 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) \
|
|
JOBS=$(PARALLEL_JOBS) \
|
|
ARCH=$(PERF_ARCH) \
|
|
DESTDIR=$(TARGET_DIR) \
|
|
prefix=/usr \
|
|
WERROR=0 \
|
|
NO_LIBAUDIT=1 \
|
|
NO_GTK2=1 \
|
|
NO_LIBPERL=1 \
|
|
NO_LIBPYTHON=1 \
|
|
NO_LIBBIONIC=1
|
|
|
|
# We need to pass an argument to ld for setting the emulation when
|
|
# building for MIPS architecture, otherwise the default one will always
|
|
# be used and the compilation for most variants will fail.
|
|
ifeq ($(BR2_mips),y)
|
|
PERF_MAKE_FLAGS += LD="$(TARGET_LD) -m elf32btsmip"
|
|
else ifeq ($(BR2_mipsel),y)
|
|
PERF_MAKE_FLAGS += LD="$(TARGET_LD) -m elf32ltsmip"
|
|
else ifeq ($(BR2_mips64),y)
|
|
ifeq ($(BR2_MIPS_NABI32),y)
|
|
PERF_MAKE_FLAGS += LD="$(TARGET_LD) -m elf32btsmipn32"
|
|
else
|
|
PERF_MAKE_FLAGS += LD="$(TARGET_LD) -m elf64btsmip"
|
|
endif
|
|
else ifeq ($(BR2_mips64el),y)
|
|
ifeq ($(BR2_MIPS_NABI32),y)
|
|
PERF_MAKE_FLAGS += LD="$(TARGET_LD) -m elf32ltsmipn32"
|
|
else
|
|
PERF_MAKE_FLAGS += LD="$(TARGET_LD) -m elf64ltsmip"
|
|
endif
|
|
endif
|
|
|
|
# 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_LINUX_TOOLS_PERF_TUI),y)
|
|
PERF_DEPENDENCIES += slang
|
|
else
|
|
PERF_MAKE_FLAGS += NO_NEWT=1 NO_SLANG=1
|
|
endif
|
|
|
|
ifeq ($(BR2_PACKAGE_LIBUNWIND),y)
|
|
PERF_DEPENDENCIES += libunwind
|
|
else
|
|
PERF_MAKE_FLAGS += NO_LIBUNWIND=1
|
|
endif
|
|
|
|
ifeq ($(BR2_PACKAGE_NUMACTL),y)
|
|
PERF_DEPENDENCIES += numactl
|
|
else
|
|
PERF_MAKE_FLAGS += NO_LIBNUMA=1
|
|
endif
|
|
|
|
ifeq ($(BR2_PACKAGE_ELFUTILS),y)
|
|
PERF_DEPENDENCIES += elfutils
|
|
else
|
|
PERF_MAKE_FLAGS += NO_LIBELF=1 NO_DWARF=1
|
|
endif
|
|
|
|
ifeq ($(BR2_PACKAGE_BINUTILS),y)
|
|
PERF_DEPENDENCIES += binutils
|
|
else
|
|
PERF_MAKE_FLAGS += NO_DEMANGLE=1
|
|
endif
|
|
|
|
ifeq ($(BR2_PACKAGE_OPENSSL),y)
|
|
PERF_DEPENDENCIES += openssl
|
|
else
|
|
PERF_MAKE_FLAGS += NO_LIBCRYPTO=1
|
|
endif
|
|
|
|
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
|
|
|
|
# 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 $(LINUX_DIR)/tools/perf/Documentation/Makefile ]; then \
|
|
printf "%%:\n\t@:\n" >$(LINUX_DIR)/tools/perf/Documentation/GNUmakefile; \
|
|
fi
|
|
endef
|
|
LINUX_POST_PATCH_HOOKS += PERF_DISABLE_DOCUMENTATION
|
|
|
|
# O must be redefined here to overwrite the one used by Buildroot for
|
|
# out of tree build. We build perf in $(LINUX_DIR)/tools/perf/ and not just
|
|
# $(LINUX_DIR) so that it isn't built in the root directory of the kernel
|
|
# sources.
|
|
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
|
|
$(Q)if test "$(BR2_PACKAGE_LINUX_TOOLS_PERF_TUI)" = "y" ; then \
|
|
if ! grep -q NO_SLANG $(LINUX_DIR)/tools/perf/Makefile* ; then \
|
|
echo "The perf tool in your kernel cannot be build with the TUI." ; \
|
|
echo "Either upgrade your kernel to >= 3.10, or disable the TUI." ; \
|
|
exit 1 ; \
|
|
fi \
|
|
fi
|
|
$(TARGET_MAKE_ENV) $(MAKE1) $(PERF_MAKE_FLAGS) \
|
|
-C $(LINUX_DIR)/tools/perf O=$(LINUX_DIR)/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 $(LINUX_DIR)/tools/perf O=$(LINUX_DIR)/tools/perf/ install
|
|
$(RM) -rf $(TARGET_DIR)/usr/libexec/perf-core/scripts/
|
|
$(RM) -rf $(TARGET_DIR)/usr/libexec/perf-core/tests/
|
|
endef
|