config BR2_PACKAGE_XENOMAI_COBALT_ARCH_SUPPORTS
	bool
	default y if BR2_i386
	default y if BR2_x86_64
	default y if BR2_powerpc
	default y if BR2_arm && !BR2_ARM_CPU_ARMV7M && !BR2_ARM_CPU_ARMV8A

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

config BR2_PACKAGE_XENOMAI
	bool "Xenomai Userspace"
	depends on BR2_USE_MMU
	depends on BR2_TOOLCHAIN_HAS_SYNC_4
	depends on BR2_TOOLCHAIN_HAS_THREADS
	# uses <error.h>, __WORDSIZE and bits/local_lim.h
	depends on !BR2_TOOLCHAIN_USES_MUSL
	help
	  Real-Time Framework for Linux
	  http://www.xenomai.org

	  Xenomai is split in two parts: a kernel part and an
	  userspace part.

	  This package contains the userspace part, which consists
	  mainly in libraries to write userspace real-time programs
	  that interact with the in-kernel Xenomai real-time core.

	  For those libraries to work, you need a Xenomai-enabled
	  kernel. This is possible in two ways:
	   - if you compile your kernel with Buildroot, you need to go
	     to Linux Kernel -> Linux Kernel Extensions to enable the
	     Xenomai extension.
	   - if you compile your kernel outside of Buildroot, you need
	     to make sure that it is Xenomai-enabled.

	  Finally, if you are using a static /dev, make sure to
	  uncomment the Xenomai entries listed in
	  target/generic/device_table_dev.txt.

if BR2_PACKAGE_XENOMAI

choice
	bool "Xenomai version"
	help
	  Make sure that the selected version has a patch for your
	  selected Linux kernel. If it does not, download and select a
	  patch manually with BR2_LINUX_KERNEL_EXT_XENOMAI_ADEOS_PATCH,
	  in the Linux Kernel -> Linux Kernel Extensions menu.

config BR2_PACKAGE_XENOMAI_LATEST_VERSION
	bool "Latest version (3.0.10)"

config BR2_PACKAGE_XENOMAI_CUSTOM_VERSION
	bool "Custom version"

config BR2_PACKAGE_XENOMAI_CUSTOM_TARBALL
	bool "Custom tarball"

config BR2_PACKAGE_XENOMAI_CUSTOM_GIT
	bool "Custom Git repository"

endchoice

config BR2_PACKAGE_XENOMAI_REPOSITORY
	string "URL of custom repository"
	default "https://gitlab.denx.de/Xenomai/xenomai.git"
	depends on BR2_PACKAGE_XENOMAI_CUSTOM_GIT

config BR2_PACKAGE_XENOMAI_VERSION
	string "Custom Xenomai version" if \
		!BR2_PACKAGE_XENOMAI_LATEST_VERSION && \
		!BR2_PACKAGE_XENOMAI_CUSTOM_TARBALL
	default "3.0.10" if BR2_PACKAGE_XENOMAI_LATEST_VERSION
	default "custom" if BR2_PACKAGE_XENOMAI_CUSTOM_TARBALL

config BR2_PACKAGE_XENOMAI_CUSTOM_TARBALL_URL
	string "URL of custom tarball"
	depends on BR2_PACKAGE_XENOMAI_CUSTOM_TARBALL

choice
	prompt "Xenomai core"
	default BR2_PACKAGE_XENOMAI_MERCURY
	help
	  Select the Xenomai core: dual kernel (Cobalt)
	  or native Linux Kernel (Mercury).

config BR2_PACKAGE_XENOMAI_MERCURY
	bool "Mercury"
	depends on !BR2_LINUX_KERNEL_EXT_XENOMAI
	help
	  Select Mercury core for the Xenomai userspace.
	  You want to use it if you have the native Linux Kernel.

config BR2_PACKAGE_XENOMAI_COBALT
	bool "Cobalt"
	depends on BR2_PACKAGE_XENOMAI_COBALT_ARCH_SUPPORTS
	help
	  Select Cobalt core (dual kernel) for the Xenomai
	  userspace. Use this if you use a Xenomai-patched
	  Linux kernel.

	  If you want to use Cobalt core, your kernel must have
	  the Adeos and Xenomai patches applied to it. You can
	  add these through the BR2_LINUX_KERNEL_EXT_XENOMAI option
	  in the Linux Kernel Extensions menu.
endchoice

config BR2_PACKAGE_XENOMAI_ENABLE_SMP
	bool "Enable SMP support"
	default y
	# SMP not supported below armv6
	depends on !BR2_ARM_CPU_ARMV4 && !BR2_ARM_CPU_ARMV5
	help
	  This option enables SMP support in Xenomai userspace.

	  If this option is turned on while no SMP support is enabled
	  in the kernel, things will still work. However, if SMP is
	  enabled in the kernel but this option is not turned on,
	  Xenomai applications will complain with:

	    feature mismatch: missing="smp/nosmp"

	  Please refer to this troubleshooting guide for more
	  information:

	  http://xenomai.org/troubleshooting-a-dual-kernel-configuration/#feature_mismatch_missing8221smpnosmp8221

config BR2_PACKAGE_XENOMAI_ENABLE_REGISTRY
	bool "Enable registry"
	depends on !BR2_STATIC_LIBS # libfuse
	depends on BR2_TOOLCHAIN_HAS_THREADS # libfuse
	depends on BR2_USE_MMU # libfuse
	select BR2_PACKAGE_LIBFUSE
	help
	  Xenomai APIs can export their internal state through a
	  pseudo-filesystem, whose files may be read to obtain
	  information about the existing real-time objects, such as
	  tasks, semaphores, message queues and so on.

comment "registry needs a toolchain w/ threads, dynamic library"
	depends on BR2_USE_MMU
	depends on BR2_STATIC_LIBS || !BR2_TOOLCHAIN_HAS_THREADS

config BR2_PACKAGE_XENOMAI_ENABLE_REGISTRY_PATH
	string "Custom registry root path"
	depends on BR2_PACKAGE_XENOMAI_ENABLE_REGISTRY
	help
	  Specify the root path of the registry here.
	  To use the Xenomai default (currently: /var/run/xenomai),
	  leave this option empty.

config BR2_PACKAGE_XENOMAI_ADDITIONAL_CONF_OPTS
	string "Additional configure options"
	help
	  Specify any additional options to pass to the configure
	  script here.  See Xenomai documentation for details.

config BR2_PACKAGE_XENOMAI_TESTSUITE
	bool "Install testsuite"
	help
	  This option allows to install the Xenomai test programs.

config BR2_PACKAGE_XENOMAI_RTCAN
	bool "RTCan utilities"
	help
	  This option allows to install the Xenomai RT-CAN utilities.

config BR2_PACKAGE_XENOMAI_ANALOGY
	bool "Analogy libs and utils"
	help
	  This option allows to install the Xenomai Analogy utilities
	  and libraries

menu "Skin selection"

config BR2_PACKAGE_XENOMAI_NATIVE_SKIN
	bool "Alchemy (native) skin"
	default y
	help
	  This option allows to install the Alchemy Xenomai skin,
	  previously called 'native'

config BR2_PACKAGE_XENOMAI_POSIX_SKIN
	bool "POSIX skin"
	default y
	help
	  This option allows to install the POSIX Xenomai skin

config BR2_PACKAGE_XENOMAI_PSOS_SKIN
	bool "pSOS skin"
	help
	  This option allows to install the pSOS Xenomai skin

config BR2_PACKAGE_XENOMAI_RTAI_SKIN
	bool "RTAI skin"
	help
	  This option allows to install the RTAI Xenomai skin

config BR2_PACKAGE_XENOMAI_UITRON_SKIN
	bool "uITRON skin"
	help
	  This option allows to install the uITRON Xenomai skin

config BR2_PACKAGE_XENOMAI_VRTX_SKIN
	bool "VRTX skin"
	help
	  This option allows to install the VRTX Xenomai skin

config BR2_PACKAGE_XENOMAI_VXWORKS_SKIN
	bool "VxWorks skin"
	help
	  This option allows to install the VxWorks Xenomai skin

endmenu

endif
