# Selection options for crosstool-NG

if BR2_TOOLCHAIN_CTNG

choice
 	prompt "Crosstool-NG C library"

config BR2_TOOLCHAIN_CTNG_uClibc
	bool "uClibc"

# Although eglibc can be configured to opt-out some features,
# let's not deal with that for the time being, it's complex...
config BR2_TOOLCHAIN_CTNG_eglibc
	bool "eglibc"
	select BR2_LARGEFILE
	select BR2_INET_IPV6
	select BR2_INET_RPC
	select BR2_ENABLE_LOCALE
	select BR2_USE_WCHAR

config BR2_TOOLCHAIN_CTNG_glibc
	bool "glibc"
	select BR2_LARGEFILE
	select BR2_INET_IPV6
	select BR2_INET_RPC
	select BR2_ENABLE_LOCALE
	select BR2_USE_WCHAR

endchoice # C library

config BR2_TOOLCHAIN_CTNG_LIBC
	string
	default "uClibc"	if BR2_TOOLCHAIN_CTNG_uClibc
	default "eglibc"	if BR2_TOOLCHAIN_CTNG_eglibc
	default "glibc"		if BR2_TOOLCHAIN_CTNG_glibc

config BR2_TOOLCHAIN_CTNG_CONFIG
	string "crosstool-NG configuration file to use"
	default "toolchain/toolchain-crosstool-ng/crosstool-ng.config-uClibc" if BR2_TOOLCHAIN_CTNG_uClibc
	default "toolchain/toolchain-crosstool-ng/crosstool-ng.config-eglibc" if BR2_TOOLCHAIN_CTNG_eglibc
	default "toolchain/toolchain-crosstool-ng/crosstool-ng.config-glibc"  if BR2_TOOLCHAIN_CTNG_glibc
	help
	  Enter here the crosstool-NG's .config file to use.
	  To fine-tune your toolchain, you can also call:
	    make ctng-menuconfig

	  If unsure, keep the default value.

if BR2_TOOLCHAIN_CTNG_uClibc

comment "Toolchain Options"

config BR2_TOOLCHAIN_CTNG_uClibc_LARGEFILE
	bool "Enable large file (files > 2 GB) support"
	select BR2_LARGEFILE
	help
	  Enable this option if you want your toolchain to support
	  files bigger than 2 GB.

config BR2_TOOLCHAIN_CTNG_uClibc_INET_IPV6
	bool "Enable IPv6 support"
	select BR2_INET_IPV6
	help
	  Enable this option if you want your toolchain to support
	  IPv6.

config BR2_TOOLCHAIN_CTNG_uClibc_INET_RPC
	bool "Enable RPC support"
	select BR2_INET_RPC
	help
	  Enable this option if you want your toolchain to support
	  RPC (needed for NFS, for example).

config BR2_TOOLCHAIN_CTNG_uClibc_WCHAR
	bool "Enable WCHAR support"
	select BR2_USE_WCHAR
	help
	  Enable this option if you want your toolchain to support
	  wide characters (i.e characters longer than 8 bits, needed
	  for locale support).

config BR2_TOOLCHAIN_CTNG_uClibc_LOCALE
	bool "Enable toolchain locale/i18n support"
	select BR2_TOOLCHAIN_CTNG_uClibc_WCHAR
	select BR2_ENABLE_LOCALE
	help
	  Enable this option if you want your toolchain to support
	  localization and internationalization.

endif # BR2_TOOLCHAIN_CTNG_uClibc

config BR2_TOOLCHAIN_CTNG_CXX
	bool "Enable C++ support"
	select BR2_INSTALL_LIBSTDCPP
	help
	  Enable this option if you want your toolchain to support the
	  C++ language and you want C++ libraries to be installed on
	  your target system.

choice
	prompt "Thread library implementation"
	default BR2_TOOLCHAIN_CTNG_THREADS_PTHREADS_OLD \
		if BR2_TOOLCHAIN_CTNG_uClibc
	default BR2_TOOLCHAIN_CTNG_THREADS_NPTL		\
		if BR2_TOOLCHAIN_CTNG_eglibc ||		\
		   BR2_TOOLCHAIN_CTNG_glibc
	help
	  Enable thread support and select thread implementation. With
	  glibc, thread support is mandatory but several
	  implementations are available. With uClibc, thread support
	  is optional, and when enabled, several implementations are
	  available. However, not all thread variants work with all
	  versions of uClibc for all architectures, the "linuxthreads
	  (stable/old)" may be a working fallback.

	config BR2_TOOLCHAIN_CTNG_THREADS_NONE
		bool "none"
		depends on BR2_TOOLCHAIN_CTNG_uClibc

	config BR2_TOOLCHAIN_CTNG_THREADS_PTHREADS
		bool "linuxthreads"
		select BR2_TOOLCHAIN_HAS_THREADS

	config BR2_TOOLCHAIN_CTNG_THREADS_PTHREADS_OLD
		bool "linuxthreads (stable/old)"
		select BR2_TOOLCHAIN_HAS_THREADS
		depends on BR2_TOOLCHAIN_CTNG_uClibc

	config BR2_TOOLCHAIN_CTNG_THREADS_NPTL
		bool "Native POSIX Threading (NPTL)"
		select BR2_TOOLCHAIN_HAS_THREADS
		depends on BR2_TOOLCHAIN_CTNG_eglibc || \
			   BR2_TOOLCHAIN_CTNG_glibc
endchoice

endif # BR2_TOOLCHAIN_CTNG
