+linux+ kernel menu, under the `Linux Kernel Tools` sub-menu, not under
the `Target packages` main menu.
-Then for each linux tool, add a new +.mk+ file named
-+package/linux-tools/linux-tool-foo.mk+. It would basically look like:
+Then for each linux tool, add a new +.mk.in+ file named
++package/linux-tools/linux-tool-foo.mk.in+. It would basically look like:
------------------------------
01: ################################################################################
+++ /dev/null
-################################################################################
-#
-# cpupower
-#
-################################################################################
-
-LINUX_TOOLS += cpupower
-
-CPUPOWER_DEPENDENCIES = pciutils $(TARGET_NLS_DEPENDENCIES)
-
-CPUPOWER_MAKE_OPTS = CROSS=$(TARGET_CROSS) \
- CPUFREQ_BENCH=false \
- NLS=false \
- LDFLAGS=$(TARGET_NLS_LIBS) \
- DEBUG=false
-
-define CPUPOWER_BUILD_CMDS
- $(Q)if test ! -f $(LINUX_DIR)/tools/power/cpupower/Makefile ; then \
- echo "Your kernel version is too old and does not have the cpupower tool." ; \
- echo "At least kernel 3.4 must be used." ; \
- exit 1 ; \
- fi
-
- $(TARGET_MAKE_ENV) $(MAKE) -C $(LINUX_DIR)/tools \
- $(CPUPOWER_MAKE_OPTS) \
- cpupower
-endef
-
-define CPUPOWER_INSTALL_STAGING_CMDS
- $(TARGET_MAKE_ENV) $(MAKE) -C $(LINUX_DIR)/tools \
- $(CPUPOWER_MAKE_OPTS) \
- DESTDIR=$(STAGING_DIR) \
- cpupower_install
-endef
-
-define CPUPOWER_INSTALL_TARGET_CMDS
- $(TARGET_MAKE_ENV) $(MAKE) -C $(LINUX_DIR)/tools \
- $(CPUPOWER_MAKE_OPTS) \
- DESTDIR=$(TARGET_DIR) \
- cpupower_install
-endef
--- /dev/null
+################################################################################
+#
+# cpupower
+#
+################################################################################
+
+LINUX_TOOLS += cpupower
+
+CPUPOWER_DEPENDENCIES = pciutils $(TARGET_NLS_DEPENDENCIES)
+
+CPUPOWER_MAKE_OPTS = CROSS=$(TARGET_CROSS) \
+ CPUFREQ_BENCH=false \
+ NLS=false \
+ LDFLAGS=$(TARGET_NLS_LIBS) \
+ DEBUG=false
+
+define CPUPOWER_BUILD_CMDS
+ $(Q)if test ! -f $(LINUX_DIR)/tools/power/cpupower/Makefile ; then \
+ echo "Your kernel version is too old and does not have the cpupower tool." ; \
+ echo "At least kernel 3.4 must be used." ; \
+ exit 1 ; \
+ fi
+
+ $(TARGET_MAKE_ENV) $(MAKE) -C $(LINUX_DIR)/tools \
+ $(CPUPOWER_MAKE_OPTS) \
+ cpupower
+endef
+
+define CPUPOWER_INSTALL_STAGING_CMDS
+ $(TARGET_MAKE_ENV) $(MAKE) -C $(LINUX_DIR)/tools \
+ $(CPUPOWER_MAKE_OPTS) \
+ DESTDIR=$(STAGING_DIR) \
+ cpupower_install
+endef
+
+define CPUPOWER_INSTALL_TARGET_CMDS
+ $(TARGET_MAKE_ENV) $(MAKE) -C $(LINUX_DIR)/tools \
+ $(CPUPOWER_MAKE_OPTS) \
+ DESTDIR=$(TARGET_DIR) \
+ cpupower_install
+endef
+++ /dev/null
-################################################################################
-#
-# gpio
-#
-################################################################################
-
-LINUX_TOOLS += gpio
-
-GPIO_MAKE_OPTS = $(LINUX_MAKE_FLAGS)
-
-define GPIO_BUILD_CMDS
- $(Q)if ! grep install $(LINUX_DIR)/tools/gpio/Makefile >/dev/null 2>&1 ; then \
- echo "Your kernel version is too old and does not have the gpio tools." ; \
- echo "At least kernel 4.8 must be used." ; \
- exit 1 ; \
- fi
-
- $(TARGET_MAKE_ENV) $(MAKE) -C $(LINUX_DIR)/tools \
- $(GPIO_MAKE_OPTS) \
- gpio
-endef
-
-define GPIO_INSTALL_TARGET_CMDS
- $(TARGET_MAKE_ENV) $(MAKE) -C $(LINUX_DIR)/tools \
- $(GPIO_MAKE_OPTS) \
- DESTDIR=$(TARGET_DIR) \
- gpio_install
-endef
--- /dev/null
+################################################################################
+#
+# gpio
+#
+################################################################################
+
+LINUX_TOOLS += gpio
+
+GPIO_MAKE_OPTS = $(LINUX_MAKE_FLAGS)
+
+define GPIO_BUILD_CMDS
+ $(Q)if ! grep install $(LINUX_DIR)/tools/gpio/Makefile >/dev/null 2>&1 ; then \
+ echo "Your kernel version is too old and does not have the gpio tools." ; \
+ echo "At least kernel 4.8 must be used." ; \
+ exit 1 ; \
+ fi
+
+ $(TARGET_MAKE_ENV) $(MAKE) -C $(LINUX_DIR)/tools \
+ $(GPIO_MAKE_OPTS) \
+ gpio
+endef
+
+define GPIO_INSTALL_TARGET_CMDS
+ $(TARGET_MAKE_ENV) $(MAKE) -C $(LINUX_DIR)/tools \
+ $(GPIO_MAKE_OPTS) \
+ DESTDIR=$(TARGET_DIR) \
+ gpio_install
+endef
+++ /dev/null
-################################################################################
-#
-# iio
-#
-################################################################################
-
-LINUX_TOOLS += iio
-
-IIO_MAKE_OPTS = $(LINUX_MAKE_FLAGS)
-
-define IIO_BUILD_CMDS
- $(Q)if ! grep install $(LINUX_DIR)/tools/iio/Makefile >/dev/null 2>&1 ; then \
- echo "Your kernel version is too old and does not have install section in the iio tools." ; \
- echo "At least kernel 4.7 must be used." ; \
- exit 1 ; \
- fi
-
- $(TARGET_MAKE_ENV) $(MAKE) -C $(LINUX_DIR)/tools/iio \
- $(IIO_MAKE_OPTS)
-endef
-
-define IIO_INSTALL_TARGET_CMDS
- $(TARGET_MAKE_ENV) $(MAKE) -C $(LINUX_DIR)/tools/iio \
- $(IIO_MAKE_OPTS) \
- INSTALL_ROOT=$(TARGET_DIR) \
- install
-endef
--- /dev/null
+################################################################################
+#
+# iio
+#
+################################################################################
+
+LINUX_TOOLS += iio
+
+IIO_MAKE_OPTS = $(LINUX_MAKE_FLAGS)
+
+define IIO_BUILD_CMDS
+ $(Q)if ! grep install $(LINUX_DIR)/tools/iio/Makefile >/dev/null 2>&1 ; then \
+ echo "Your kernel version is too old and does not have install section in the iio tools." ; \
+ echo "At least kernel 4.7 must be used." ; \
+ exit 1 ; \
+ fi
+
+ $(TARGET_MAKE_ENV) $(MAKE) -C $(LINUX_DIR)/tools/iio \
+ $(IIO_MAKE_OPTS)
+endef
+
+define IIO_INSTALL_TARGET_CMDS
+ $(TARGET_MAKE_ENV) $(MAKE) -C $(LINUX_DIR)/tools/iio \
+ $(IIO_MAKE_OPTS) \
+ INSTALL_ROOT=$(TARGET_DIR) \
+ install
+endef
+++ /dev/null
-################################################################################
-#
-# 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_NEWT=1 \
- NO_GTK2=1 \
- NO_LIBPERL=1 \
- NO_LIBPYTHON=1 \
- NO_LIBBIONIC=1
-
-# 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
-
-# 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
-else
-PERF_MAKE_FLAGS += 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_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
- $(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
--- /dev/null
+################################################################################
+#
+# 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_NEWT=1 \
+ NO_GTK2=1 \
+ NO_LIBPERL=1 \
+ NO_LIBPYTHON=1 \
+ NO_LIBBIONIC=1
+
+# 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
+
+# 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
+else
+PERF_MAKE_FLAGS += 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_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
+ $(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
+++ /dev/null
-################################################################################
-#
-# selftests
-#
-################################################################################
-
-LINUX_TOOLS += selftests
-
-ifeq ($(KERNEL_ARCH),x86_64)
-SELFTESTS_ARCH=x86
-else
-ifeq ($(KERNEL_ARCH),i386)
-SELFTESTS_ARCH=x86
-else
-SELFTESTS_ARCH=$(KERNEL_ARCH)
-endif
-endif
-
-SELFTESTS_DEPENDENCIES = libcap-ng popt
-
-SELFTESTS_MAKE_FLAGS = \
- $(LINUX_MAKE_FLAGS) \
- ARCH=$(SELFTESTS_ARCH)
-
-# O must be redefined here to overwrite the one used by Buildroot for
-# out of tree build. We build the selftests in $(LINUX_DIR)/tools/selftests and
-# not just $(LINUX_DIR) so that it isn't built in the root directory of the kernel
-# sources.
-#
-# The headers_install step here is important as some kernel selftests use a
-# hardcoded CFLAGS to find kernel headers e.g:
-# CFLAGS += -I../../../../usr/include/
-# The headers_install target will install the kernel headers locally inside
-# the Linux build dir
-define SELFTESTS_BUILD_CMDS
- $(TARGET_MAKE_ENV) $(MAKE1) -C $(LINUX_DIR) $(SELFTESTS_MAKE_FLAGS) \
- headers_install
- $(TARGET_MAKE_ENV) $(MAKE1) -C $(LINUX_DIR)/tools/testing/selftests \
- $(SELFTESTS_MAKE_FLAGS) O=$(LINUX_DIR)/tools/testing/selftests
-endef
-
-define SELFTESTS_INSTALL_TARGET_CMDS
- $(TARGET_MAKE_ENV) $(MAKE1) -C $(LINUX_DIR)/tools/testing/selftests \
- $(SELFTESTS_MAKE_FLAGS) O=$(LINUX_DIR)/tools/testing/selftests \
- INSTALL_PATH=$(TARGET_DIR)/usr/lib/kselftests install
-endef
--- /dev/null
+################################################################################
+#
+# selftests
+#
+################################################################################
+
+LINUX_TOOLS += selftests
+
+ifeq ($(KERNEL_ARCH),x86_64)
+SELFTESTS_ARCH=x86
+else
+ifeq ($(KERNEL_ARCH),i386)
+SELFTESTS_ARCH=x86
+else
+SELFTESTS_ARCH=$(KERNEL_ARCH)
+endif
+endif
+
+SELFTESTS_DEPENDENCIES = libcap-ng popt
+
+SELFTESTS_MAKE_FLAGS = \
+ $(LINUX_MAKE_FLAGS) \
+ ARCH=$(SELFTESTS_ARCH)
+
+# O must be redefined here to overwrite the one used by Buildroot for
+# out of tree build. We build the selftests in $(LINUX_DIR)/tools/selftests and
+# not just $(LINUX_DIR) so that it isn't built in the root directory of the kernel
+# sources.
+#
+# The headers_install step here is important as some kernel selftests use a
+# hardcoded CFLAGS to find kernel headers e.g:
+# CFLAGS += -I../../../../usr/include/
+# The headers_install target will install the kernel headers locally inside
+# the Linux build dir
+define SELFTESTS_BUILD_CMDS
+ $(TARGET_MAKE_ENV) $(MAKE1) -C $(LINUX_DIR) $(SELFTESTS_MAKE_FLAGS) \
+ headers_install
+ $(TARGET_MAKE_ENV) $(MAKE1) -C $(LINUX_DIR)/tools/testing/selftests \
+ $(SELFTESTS_MAKE_FLAGS) O=$(LINUX_DIR)/tools/testing/selftests
+endef
+
+define SELFTESTS_INSTALL_TARGET_CMDS
+ $(TARGET_MAKE_ENV) $(MAKE1) -C $(LINUX_DIR)/tools/testing/selftests \
+ $(SELFTESTS_MAKE_FLAGS) O=$(LINUX_DIR)/tools/testing/selftests \
+ INSTALL_PATH=$(TARGET_DIR)/usr/lib/kselftests install
+endef
#
# So, all tools refer to $(LINUX_DIR) instead of $(@D).
-# Note: we need individual tools .mk files to be included *before* this one
-# to guarantee that each tool has a chance to register itself before we build
-# the list of build and install hooks, below.
-#
-# This is currently guaranteed by the naming of each file:
-# - they get included by the top-level Makefile, with $(sort $(wildcard ...))
-# - make's $(sort) function will aways sort in the C locale
-# - the files names correctly sort out in the C locale so that each tool's
-# .mk file is included before this one.
+# Note: we need individual tools makefiles to be included *before* we build
+# the list of build and install hooks below to guarantee that each tool has
+# a chance to register itself once, and only once. Therefore, the makefiles
+# are named linux-tool-*.mk.in, so they won't be picked up by the top-level
+# Makefile, but can be included here, guaranteeing the single inclusion and
+# the proper ordering.
+
+include $(sort $(wildcard package/linux-tools/*.mk.in))
# We only need the kernel to be extracted, not actually built
LINUX_TOOLS_PATCH_DEPENDENCIES = linux