# Buildroot backend specific options

if BR2_TOOLCHAIN_BUILDROOT

comment "Toolchain Options"

config BR2_TOOLCHAIN_BUILDROOT_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_BUILDROOT_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_BUILDROOT_INET_RPC
	bool "Enable RPC support"
	select BR2_TOOLCHAIN_HAS_NATIVE_RPC
	help
	  Enable this option if you want your toolchain to support
	  RPC (needed for NFS, for example).

config BR2_TOOLCHAIN_BUILDROOT_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_BUILDROOT_LOCALE
	bool "Enable toolchain locale/i18n support"
	select BR2_TOOLCHAIN_BUILDROOT_WCHAR
	select BR2_ENABLE_LOCALE
	help
	  Enable this option if you want your toolchain to support
	  localization and internationalization.

config BR2_TOOLCHAIN_BUILDROOT_CXX
	bool "Enable C++ support"
	select BR2_INSTALL_LIBSTDCPP
	depends on !(! BR2_GCC_SUPPORTS_FINEGRAINEDMTUNE && \
		       BR2_TOOLCHAIN_BUILDROOT_LOCALE    && \
		       BR2_UCLIBC_VERSION_0_9_31)
	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.

comment "C++ support broken in uClibc 0.9.31 with locale enabled with gcc 4.2"
	depends on !BR2_GCC_SUPPORTS_FINEGRAINEDMTUNE && \
		    BR2_TOOLCHAIN_BUILDROOT_LOCALE    && \
		    BR2_UCLIBC_VERSION_0_9_31

config BR2_TOOLCHAIN_BUILDROOT_USE_SSP
	bool "Enable stack protection support"
	help
	  Enable stack smashing protection support using GCCs
	  -fstack-protector[-all] option.

	  See http://www.linuxfromscratch.org/hints/downloads/files/ssp.txt
	  for details.

choice
	prompt "Thread library implementation"
	default BR2_PTHREADS_NATIVE if (!BR2_UCLIBC_VERSION_0_9_31) && !BR2_ARM_OABI && !(BR2_avr32 || BR2_xtensa)
	default BR2_PTHREADS_OLD
	help
	  Use this option to select the thread library implementation
	  that should be used in your toolchain. Not all thread
	  variants work with all versions of uClibc, the "linuxthreads
	  (stable/old)" may be a working fallback if you need
	  threading at all.

	config BR2_PTHREADS_NONE
		bool "none"

	config BR2_PTHREADS
		bool "linuxthreads"
		depends on !BR2_xtensa
	        select BR2_TOOLCHAIN_HAS_THREADS

	config BR2_PTHREADS_OLD
		bool "linuxthreads (stable/old)"
	        select BR2_TOOLCHAIN_HAS_THREADS

	config BR2_PTHREADS_NATIVE
		bool "Native POSIX Threading (NPTL)"
	        select BR2_TOOLCHAIN_HAS_THREADS
		depends on !BR2_UCLIBC_VERSION_0_9_31
		depends on !BR2_ARM_OABI
		depends on !BR2_x86_i386
		depends on !BR2_avr32
		depends on !BR2_xtensa
		depends on !BR2_arc
endchoice

config BR2_PTHREAD_DEBUG
	bool "Thread library debugging"
	depends on BR2_PTHREADS || BR2_PTHREADS_OLD || BR2_PTHREADS_NATIVE
	select BR2_TOOLCHAIN_HAS_THREADS_DEBUG
	help
	  Build the thread library with debugging enabled.

source "toolchain/elf2flt/Config.in"

config BR2_VFP_FLOAT
	bool "Use ARM Vector Floating Point unit"
	depends on !BR2_SOFT_FLOAT
	depends on BR2_arm || BR2_armeb
	help
	  Setting this option will enable the "-mfpu=vfp" option.
	  If your ARM CPU has a Vector Floating Point Unit (VFP)
	  and the toolchain supports the option, then the
	  code can be optimized.

	  Most people will answer N.

endif
