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_PERF
	bool "perf"
	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_POPT
	select BR2_PACKAGE_LIBCAP_NG
	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
