menu "Linux Kernel Extensions"

#-------------------------------------------------------------------------------
# Xenomai
config BR2_LINUX_KERNEL_EXT_XENOMAI
	bool "Adeos/Xenomai Real-time patch"
	depends on BR2_PACKAGE_XENOMAI_COBALT_ARCH_SUPPORTS
	depends on BR2_USE_MMU # xenomai
	depends on BR2_TOOLCHAIN_HAS_SYNC_4 # xenomai
	depends on BR2_TOOLCHAIN_HAS_THREADS # xenomai
	depends on !BR2_TOOLCHAIN_USES_MUSL # xenomai
	select BR2_PACKAGE_XENOMAI
	help
	  Xenomai is split in two parts: a kernel part and a userspace
	  part. Enabling this option automatically selects the Xenomai
	  package and helps in patching the Linux kernel built by
	  Buildroot with the Xenomai kernel part (ie Adeos/Ipipe).

	  You can find the currently supported kernel versions by
	  looking at the available patches in the Xenomai sources
	  tree: ksrc/arch/$(ARCH)/patches

	  However, it is recommended to use the latest version of the
	  Adeos/Ipipe patch available at
	  http://download.gna.org/adeos/patches

	  Xenomai is know to support Blackfin, SH4, x86, ARM, NIOS2
	  and PowerPC architectures.

config BR2_LINUX_KERNEL_EXT_XENOMAI_ADEOS_PATCH
	string "Path for Adeos patch file"
	depends on BR2_LINUX_KERNEL_EXT_XENOMAI
	help
	  Optionally, explicitly specify the Adeos patch to use.
	  Download it at http://download.gna.org/adeos/patches
	  and verify that your kernel version in buildroot matches.

comment "xenomai needs a uClibc or glibc toolchain w/ threads"
	depends on BR2_PACKAGE_XENOMAI_COBALT_ARCH_SUPPORTS
	depends on BR2_USE_MMU
	depends on BR2_TOOLCHAIN_HAS_SYNC_4
	depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_TOOLCHAIN_USES_MUSL

#-------------------------------------------------------------------------------
# RTAI
config BR2_LINUX_KERNEL_EXT_RTAI
	bool "RTAI Real-time patch"
	select BR2_PACKAGE_RTAI
	help
	  RTAI Kernel part.

#-------------------------------------------------------------------------------
# ev3dev Linux drivers
config BR2_LINUX_KERNEL_EXT_EV3DEV_LINUX_DRIVERS
	bool "ev3dev Linux drivers"
	select BR2_PACKAGE_EV3DEV_LINUX_DRIVERS
	help
	  Linux drivers for LEGO MINDSTORMS EV3 from the ev3dev project.

	  https://github.com/ev3dev/lego-linux-drivers

#-------------------------------------------------------------------------------
# fbtft
config BR2_LINUX_KERNEL_EXT_FBTFT
	bool "FB TFT drivers"
	select BR2_PACKAGE_FBTFT
	help
	  Linux Framebuffer drivers for small TFT LCD display modules,
	  e.g. Adafruit PiTFT displays for Raspberry Pi (this extra
	  package is only needed for linux kernels until v3.19, since
	  v4.0 the drivers are included in the staging area).

	  To enable fbtft, e.g. for Adafruit 2.8 PiTFT, enable the
	  following kernel configurations:
	  - CONFIG_SPI
	  - CONFIG_GPIOLIB
	  - CONFIG_FB
	  - CONFIG_FB_TFT
	  - CONFIG_FB_TFT_ILI9341

	  https://github.com/notro/fbtft

# aufs-standalone
config BR2_LINUX_KERNEL_EXT_AUFS
	bool "Aufs Filesystem Module patch"
	select BR2_PACKAGE_AUFS
	help
	  Aufs is split in two parts: a kernel part and a userspace
	  part. Enabling this option automatically selects the aufs
	  standalone (module) package and patches the Linux kernel
	  built by Buildroot with the aufs kernel part (ie fs/aufs).

	  It is important to use the correct branch of aufs-standalone.

if BR2_LINUX_KERNEL_EXT_AUFS

choice
	bool "aufs-standalone series"
	help
	  Select the major series of this version. This must match the
	  major version of your kernel (e.g. for kernels 3.x, select
	  aufs3.x; for kernels 4.x, select aufs4.x).

	  Note: neither aufs1.x nor aufs2.x (both for kernels older than
	  3.x) are supported.

config BR2_LINUX_KERNEL_EXT_AUFS_SERIES_3
	bool "aufs3.x"

config BR2_LINUX_KERNEL_EXT_AUFS_SERIES_4
	bool "aufs4.x"

endchoice

config BR2_LINUX_KERNEL_EXT_AUFS_SERIES
	int
	default 3 if BR2_LINUX_KERNEL_EXT_AUFS_SERIES_3
	default 4 if BR2_LINUX_KERNEL_EXT_AUFS_SERIES_4

config BR2_LINUX_KERNEL_EXT_AUFS_VERSION
	string "aufs-standalone version"
	default ""
	help
	  The version you choose must match that of your kernel.
	  Usually, the sha1 of the cset you want to use; avoid using a
	  branch name as this yields non-reproducible builds.

	  See the following resources to see what versions are
	  available:

	  For aufs3.x:
	  https://sourceforge.net/p/aufs/aufs3-standalone/ref/master/branches/
	  For aufs4.x:
	  https://github.com/sfjro/aufs4-standalone/branches/all

endif # aufs

endmenu
