config BR2_PACKAGE_XENOMAI_COBALT_ARCH_SUPPORTS
	bool
	default y
	depends on BR2_i386 || BR2_x86_64 || (BR2_arm && !BR2_ARM_CPU_ARMV7M) || \
		BR2_powerpc

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

config BR2_PACKAGE_XENOMAI_VERSION
	string "Custom Xenomai version"
	help
	  Manually select Xenomai version. If left empty, the default
	  version will be used.

	  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.

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
	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
