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
	  https://xenomai.org/downloads/ipipe/

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

config BR2_LINUX_KERNEL_EXT_XENOMAI_ADEOS_PATCH
	string "Path/URL for Adeos patch file"
	depends on BR2_LINUX_KERNEL_EXT_XENOMAI
	help
	  Optionally, explicitly specify where to find the Adeos
	  patch to use.
	  Examples:
	  https://xenomai.org/downloads/ipipe/v4.x/arm/ipipe-core-4.19.33-arm-2.patch
	  or /home/foo/ipipe-core-4.19.33-arm-2.patch
	  Please 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"
	depends on !BR2_LINUX_KERNEL_LATEST_VERSION
	depends on !BR2_LINUX_KERNEL_LATEST_CIP_VERSION
	depends on !BR2_LINUX_KERNEL_LATEST_CIP_RT_VERSION
	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; for kernels 5.x,
	  select aufs5.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"

config BR2_LINUX_KERNEL_EXT_AUFS_SERIES_5
	bool "aufs5.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
	default 5 if BR2_LINUX_KERNEL_EXT_AUFS_SERIES_5

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
	  For aufs5.x:
	  https://github.com/sfjro/aufs5-standalone/branches/all

endif # aufs

# kernel extensions from br2-external trees, if any
source "$BR2_BASE_DIR/.br2-external.in.linux"

endmenu
