menu "Kernel"

config BR2_LINUX_KERNEL
	bool "Linux Kernel"
	help
	  Enable this option if you want to build a Linux kernel for
	  your embedded device

if BR2_LINUX_KERNEL

# Packages that need to have a kernel with support for loadable modules,
# but do not use the kernel-modules infrastructure, should select that
# option.
config BR2_LINUX_NEEDS_MODULES
	bool

#
# Version selection. We provide the choice between:
#
#  1. A single fairly recent stable kernel version
#  2. A custom stable version
#  3. A custom tarball
#  4. A set of custom repository locations
#
choice
	prompt "Kernel version"

config BR2_LINUX_KERNEL_LATEST_VERSION
	bool "Latest version (4.12.10)"

config BR2_LINUX_KERNEL_LATEST_CIP_VERSION
	bool "Latest CIP SLTS version (v4.4.75-cip6)"
	help
	  CIP launched in the spring of 2016 to address the needs of
	  organizations in industries such as power generation and
	  distribution, water, oil and gas, transportation, building
	  automation and more for reliable and secure Linux-based
	  embedded systems that can be sustained over a period of
	  10 to as many as 60 years.
	  The project's goal is to provide an open source base layer
	  of industrial-grade software that permits the use and
	  implementation of software building blocks that meet
	  these requirements.

	  The CIP community plans to maintain 4.4 for security and
	  bug fixes for more than 10 years.

	  https://www.cip-project.org

config BR2_LINUX_KERNEL_CUSTOM_VERSION
	bool "Custom version"
	help
	  This option allows to use a specific official version from
	  kernel.org, like 2.6.x, 2.6.x.y, 3.x.y, ...

	  Note: you cannot use this option to select a _longterm_ 2.6
	  kernel, because these kernels are not located at the standard
	  URL at kernel.org. Instead, select "Custom tarball" and
	  specify the right URL directly.

config BR2_LINUX_KERNEL_CUSTOM_TARBALL
	bool "Custom tarball"
	help
	  This option allows to specify a URL pointing to a kernel source
	  tarball. This URL can use any protocol recognized by Buildroot,
	  like http://, ftp://, file:// or scp://.

	  When pointing to a local tarball using file://, you may want to
	  use a make variable like $(TOPDIR) to reference the root of the
	  Buildroot tree.

config BR2_LINUX_KERNEL_CUSTOM_GIT
	bool "Custom Git repository"
	help
	  This option allows Buildroot to get the Linux kernel source
	  code from a Git repository.

config BR2_LINUX_KERNEL_CUSTOM_HG
	bool "Custom Mercurial repository"
	help
	  This option allows Buildroot to get the Linux kernel source
	  code from a Mercurial repository.

config BR2_LINUX_KERNEL_CUSTOM_SVN
	bool "Custom Subversion repository"
	help
	  This option allows Buildroot to get the Linux kernel source
	  code from a Subversion repository.

endchoice

config BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE
	string "Kernel version"
	depends on BR2_LINUX_KERNEL_CUSTOM_VERSION

config BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION
	string "URL of custom kernel tarball"
	depends on BR2_LINUX_KERNEL_CUSTOM_TARBALL

if BR2_LINUX_KERNEL_CUSTOM_GIT || BR2_LINUX_KERNEL_CUSTOM_HG || BR2_LINUX_KERNEL_CUSTOM_SVN

config BR2_LINUX_KERNEL_CUSTOM_REPO_URL
	string "URL of custom repository"
	default BR2_LINUX_KERNEL_CUSTOM_GIT_REPO_URL \
		if BR2_LINUX_KERNEL_CUSTOM_GIT_REPO_URL != ""  # legacy

config BR2_LINUX_KERNEL_CUSTOM_REPO_VERSION
	string "Custom repository version"
	default BR2_LINUX_KERNEL_CUSTOM_GIT_VERSION \
		if BR2_LINUX_KERNEL_CUSTOM_GIT_VERSION != ""  # legacy
	help
	  Revision to use in the typical format used by Git/Mercurial/Subversion
	  E.G. a sha id, a tag, branch, ..

endif

config BR2_LINUX_KERNEL_VERSION
	string
	default "4.12.10" if BR2_LINUX_KERNEL_LATEST_VERSION
	default "v4.4.75-cip6" if BR2_LINUX_KERNEL_LATEST_CIP_VERSION
	default BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE \
		if BR2_LINUX_KERNEL_CUSTOM_VERSION
	default "custom" if BR2_LINUX_KERNEL_CUSTOM_TARBALL
	default BR2_LINUX_KERNEL_CUSTOM_REPO_VERSION \
		if BR2_LINUX_KERNEL_CUSTOM_GIT || BR2_LINUX_KERNEL_CUSTOM_HG || BR2_LINUX_KERNEL_CUSTOM_SVN

#
# Patch selection
#

config BR2_LINUX_KERNEL_PATCH
	string "Custom kernel patches"
	help
	  A space-separated list of patches to apply to the
	  kernel. Each patch can be described as an URL, a local file
	  path, or a directory. In the case of a directory, all files
	  matching *.patch in the directory will be applied.

#
# Configuration selection
#

choice
	prompt "Kernel configuration"
	default BR2_LINUX_KERNEL_USE_DEFCONFIG

config BR2_LINUX_KERNEL_USE_DEFCONFIG
	bool "Using an in-tree defconfig file"

config BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG
	bool "Use the architecture default configuration"
	help
	  This option will use the default configuration for the
	  selected architecture. I.e, it is equivalent to running
	  "make ARCH=<foo> defconfig". This is useful on architectures
	  that have a single defconfig file, such as ARM64.

config BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG
	bool "Using a custom (def)config file"

endchoice

config BR2_LINUX_KERNEL_DEFCONFIG
	string "Defconfig name"
	depends on BR2_LINUX_KERNEL_USE_DEFCONFIG
	help
	  Name of the kernel defconfig file to use, without the
	  trailing _defconfig.  The defconfig is located in
	  arch/<arch>/configs in the kernel tree.

config BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE
	string "Configuration file path"
	depends on BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG
	help
	  Path to the kernel configuration file

	  Note: this can be a defconfig file or a complete .config file,
	  which can later be saved back with make linux-update-(def)config.

config BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES
	string "Additional configuration fragment files"
	help
	  A space-separated list of kernel configuration fragment files,
	  that will be merged to the main kernel configuration file.

#
# Binary format
#

choice
	prompt "Kernel binary format"
	default BR2_LINUX_KERNEL_ZIMAGE if BR2_arm || BR2_armeb

config BR2_LINUX_KERNEL_UIMAGE
	bool "uImage"
	depends on BR2_arc || BR2_arm || BR2_armeb || BR2_bfin || \
		   BR2_powerpc || BR2_powerpc64 || BR2_powerpc64le || \
		   BR2_sh || BR2_mips || BR2_mipsel || \
		   BR2_mips64 || BR2_mips64el || BR2_xtensa
	select BR2_PACKAGE_HOST_UBOOT_TOOLS

config BR2_LINUX_KERNEL_APPENDED_UIMAGE
	bool "uImage with appended DT"
	depends on BR2_arm || BR2_armeb
	select BR2_LINUX_KERNEL_DTS_SUPPORT
	select BR2_LINUX_KERNEL_APPENDED_DTB
	select BR2_PACKAGE_HOST_UBOOT_TOOLS

config BR2_LINUX_KERNEL_BZIMAGE
	bool "bzImage"
	depends on BR2_i386 || BR2_x86_64

config BR2_LINUX_KERNEL_ZIMAGE
	bool "zImage"
	depends on BR2_arm || BR2_armeb || BR2_powerpc || \
		   BR2_powerpc64 || BR2_powerpc64le || BR2_sparc || \
		   BR2_sh || BR2_xtensa

config BR2_LINUX_KERNEL_ZIMAGE_EPAPR
	bool "zImage.epapr"
	depends on BR2_powerpc64 || BR2_powerpc64le

config BR2_LINUX_KERNEL_APPENDED_ZIMAGE
	bool "zImage with appended DT"
	depends on BR2_arm || BR2_armeb
	select BR2_LINUX_KERNEL_DTS_SUPPORT
	select BR2_LINUX_KERNEL_APPENDED_DTB

config BR2_LINUX_KERNEL_CUIMAGE
	bool "cuImage"
	depends on BR2_powerpc
	select BR2_PACKAGE_HOST_UBOOT_TOOLS
	select BR2_LINUX_KERNEL_DTS_SUPPORT
	select BR2_LINUX_KERNEL_DTB_IS_SELF_BUILT

config BR2_LINUX_KERNEL_SIMPLEIMAGE
	bool "simpleImage"
	depends on BR2_microblaze
	select BR2_PACKAGE_HOST_UBOOT_TOOLS
	select BR2_LINUX_KERNEL_DTS_SUPPORT
	select BR2_LINUX_KERNEL_DTB_IS_SELF_BUILT

config BR2_LINUX_KERNEL_IMAGE
	bool "Image"
	depends on BR2_aarch64

config BR2_LINUX_KERNEL_LINUX_BIN
	bool "linux.bin"
	depends on BR2_microblaze
	select BR2_PACKAGE_HOST_UBOOT_TOOLS

config BR2_LINUX_KERNEL_VMLINUX_BIN
	bool "vmlinux.bin"
	depends on BR2_mips || BR2_mipsel || BR2_sh

config BR2_LINUX_KERNEL_VMLINUX
	bool "vmlinux"

config BR2_LINUX_KERNEL_VMLINUZ
	bool "vmlinuz"
	depends on BR2_mips || BR2_mipsel

config BR2_LINUX_KERNEL_VMLINUZ_BIN
	bool "vmlinuz.bin"
	depends on BR2_mips || BR2_mipsel

config BR2_LINUX_KERNEL_IMAGE_TARGET_CUSTOM
	bool "custom target"
	help
	  For certain cases a board-specific target image must be
	  used.  For example, on powerPC where the OpenFirmware
	  description is attached in a board-specific kernel image
	  target like 'cuImage.mpc8379_rdb'.

	  Select this option and specify the make target in "Kernel
	  image target name".

endchoice

#
# Kernel compression format
#

choice
	prompt "Kernel compression format"
	help
	  This selection will just ensure that the correct host tools are build.
	  The actual compression for the kernel should be selected in the
	  kernel configuration menu.

config BR2_LINUX_KERNEL_GZIP
	bool "gzip compression"

config BR2_LINUX_KERNEL_LZ4
	bool "lz4 compression"

config BR2_LINUX_KERNEL_LZMA
	bool "lzma compression"

config BR2_LINUX_KERNEL_LZO
	bool "lzo compression"

config BR2_LINUX_KERNEL_XZ
	bool "xz compression"

endchoice

config BR2_LINUX_KERNEL_IMAGE_TARGET_NAME
	string "Kernel image target name"
	depends on BR2_LINUX_KERNEL_IMAGE_TARGET_CUSTOM
	help
	  Specify the kernel make target to build the kernel that you
	  need.

config BR2_LINUX_KERNEL_IMAGE_NAME
	string "Kernel image name"
	depends on BR2_LINUX_KERNEL_IMAGE_TARGET_CUSTOM
	help
	  The filename of the kernel image, if it is different from the
	  make target (above). Only Xtensa uses a filename different from
	  the make target. Defaults to BR2_LINUX_KERNEL_IMAGE_TARGET_NAME.

	  If unsure, leave it empty.

config BR2_LINUX_KERNEL_UIMAGE_LOADADDR
	string "load address (for 3.7+ multi-platform image)"
	depends on BR2_arm || BR2_armeb
	depends on BR2_LINUX_KERNEL_UIMAGE || BR2_LINUX_KERNEL_APPENDED_UIMAGE
	help
	  If your ARM system's Linux kernel is configured with the new (3.7+)
	  multi-architecture support (CONFIG_ARCH_MULTIPLATFORM=y in your
	  kernel config), then it is necessary to specify a kernel load address
	  when building the uImage. This should be a hexadecimal string
	  beginning with 0x, for example: 0x00008000.

	  If unsure, let this option empty.

config BR2_LINUX_KERNEL_DTS_SUPPORT
	bool "Build a Device Tree Blob (DTB)"
	help
	  Compile one or more device tree sources into device tree blobs.
	  Select the dts files to compile in the options below.

if BR2_LINUX_KERNEL_DTS_SUPPORT

# We have mainly three cases when it comes to device tree support:
#   1) We don't want any support at all. Then the ..DTS_SUPPORT
#      variable won't be set
#   2) We want device tree support, so we need the user to enter the
#      device tree name or the path to the custom device he uses, but
#      the kernel abstracts this from us and only build an image that
#      looks like a regular kernel image. In this case, we only need
#      to derive the kernel image name from the given device tree
#      name, and all the rest is as usual
#   3) We want device tree support, but the kernel requires us to
#      build the device tree blob separately. In this case, some
#      more logic will be needed.
# The variable below address the second case, were you only want
# limited actions from buildroot.
config BR2_LINUX_KERNEL_DTB_IS_SELF_BUILT
	bool

config BR2_LINUX_KERNEL_APPENDED_DTB
	bool

choice
	prompt "Device tree source"
	default BR2_LINUX_KERNEL_USE_INTREE_DTS

config BR2_LINUX_KERNEL_USE_INTREE_DTS
	bool "Use a device tree present in the kernel"
	help
	  Use a device tree source distributed with
	  the kernel sources. The dts files are located
	  in the arch/<arch>/boot/dts folder.

config BR2_LINUX_KERNEL_USE_CUSTOM_DTS
	bool "Use a custom device tree file"
	help
	  Use a custom device tree file, i.e, a device
	  tree file that does not belong to the kernel
	  source tree.
endchoice

config BR2_LINUX_KERNEL_INTREE_DTS_NAME
	string "Device Tree Source file names"
	depends on BR2_LINUX_KERNEL_USE_INTREE_DTS
	help
	  Name of the device tree source file, without
	  the trailing .dts. You can provide a list of
	  dts files to build, separated by spaces.

config BR2_LINUX_KERNEL_CUSTOM_DTS_PATH
	string "Device Tree Source file paths"
	depends on BR2_LINUX_KERNEL_USE_CUSTOM_DTS
	help
	  Path to the device tree source files. You can
	  provide a list of dts paths to copy and build,
	  separated by spaces.

endif

config BR2_LINUX_KERNEL_INSTALL_TARGET
	bool "Install kernel image to /boot in target"
	depends on !BR2_TARGET_ROOTFS_INITRAMFS
	help
	  Select this option to have the kernel image installed to
	  /boot in the target root filesystem, as is typically done on
	  x86/x86_64 systems.

	  Note that this option also installs the Device Tree Blobs to
	  /boot if DTBs have been generated by the kernel build
	  process.

# Linux extensions
source "linux/Config.ext.in"

# Linux tools
source "package/linux-tools/Config.in"

endif # BR2_LINUX_KERNEL

endmenu
