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

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
	default "3.0.10" if BR2_PACKAGE_XENOMAI_LATEST_VERSION
	depends on !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
	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
