menu "Linux Kernel Tools"

# No prompt, this is sourced by linux/Config.in as this
# is no real package and really belongs to the kernel.
config BR2_PACKAGE_LINUX_TOOLS
	bool

config BR2_PACKAGE_LINUX_TOOLS_CPUPOWER
	bool "cpupower"
	select BR2_PACKAGE_LINUX_TOOLS
	select BR2_PACKAGE_PCIUTILS
	help
	  cpupower is a collection of tools to examine and tune power
	  saving related features of your processor.

config BR2_PACKAGE_LINUX_TOOLS_GPIO
	bool "gpio"
	select BR2_PACKAGE_LINUX_TOOLS
	help
	  gpio is a collection of tools to get information about,
	  control and monitor gpios present on system.

	  These tools use new gpio ABI which will deprecate sysfs gpio
	  interface in the future.

	  These tools are available only from kernel version 4.8.

config BR2_PACKAGE_LINUX_TOOLS_IIO
	bool "iio"
	select BR2_PACKAGE_LINUX_TOOLS
	help
	  iio is a collection of tools to get information about,
	  control and monitor iio devices present on system.

	  These tools are available only from kernel version 4.7.

config BR2_PACKAGE_LINUX_TOOLS_PCI
	bool "pci"
	select BR2_PACKAGE_LINUX_TOOLS
	help
	  pcitest is a tool for testing capabilities related to a
	  PCI Endpoint (only works with specific Endpoints).

	  These tools are available only from kernel version 4.20.

config BR2_PACKAGE_LINUX_TOOLS_PERF
	bool "perf"
	depends on BR2_TOOLCHAIN_HAS_SYNC_4
	select BR2_PACKAGE_LINUX_TOOLS
	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.

	  Your kernel must have CONFIG_PERF_EVENTS enabled to use perf
	  profiling. Buildroot automatically enables this in the kernel
	  configuration.

	  https://perf.wiki.kernel.org/

if BR2_PACKAGE_LINUX_TOOLS_PERF

config BR2_PACKAGE_LINUX_TOOLS_PERF_TUI
	bool "enable perf TUI"
	depends on BR2_USE_MMU # slang
	select BR2_PACKAGE_SLANG
	help
	  Enable the TUI interface for perf which requires a TTY and
	  enables zooming into DSOs and threads as well as other
	  features.

endif

config BR2_PACKAGE_LINUX_TOOLS_SELFTESTS
	bool"selftests"
	depends on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS # bash
	depends on BR2_USE_MMU  # bash
	select BR2_PACKAGE_LINUX_TOOLS
	select BR2_PACKAGE_BASH # runtime
	select BR2_PACKAGE_NCURSES
	select BR2_PACKAGE_NCURSES_TARGET_PROGS # runtime (tput)
	select BR2_PACKAGE_KMOD
	select BR2_PACKAGE_KMOD_TOOLS # runtime (modprobe -n)
	select BR2_PACKAGE_POPT
	select BR2_PACKAGE_LIBCAP_NG
	select BR2_PACKAGE_UTIL_LINUX
	select BR2_PACKAGE_UTIL_LINUX_SCHEDUTILS # runtime (taskset)
	help
	  Build and install (to /usr/lib/kselftests) kernel selftests.

	  Use of this option implies you know the process of using and
	  compiling the kernel selftests. The Makefile to build and
	  install these is very noisy and may appear to cause your
	  build to fail for strange reasons.

	  This is very much a use at your risk option and may not work
	  for every setup or every architecture.

comment "selftests needs BR2_PACKAGE_BUSYBOX_SHOW_OTHERS"
	depends on BR2_USE_MMU
	depends on !BR2_PACKAGE_BUSYBOX_SHOW_OTHERS

config BR2_PACKAGE_LINUX_TOOLS_TMON
	bool "tmon"
	select BR2_PACKAGE_LINUX_TOOLS
	select BR2_PACKAGE_NCURSES
	help
	  tmon is a terminal-based tool (using curses) that allows the
	  user to access thermal information about the system.

endmenu
