if BR2_TOOLCHAIN_BUILDROOT_UCLIBC

comment "uClibc Options"

config BR2_PACKAGE_UCLIBC
	bool
	default y
	select BR2_PACKAGE_LINUX_HEADERS

config BR2_UCLIBC_CONFIG
	string "uClibc configuration file to use?"
	default "package/uclibc/uClibc-ng.config"
	help
	  Some people may wish to use their own modified uClibc
	  configuration file and will specify their config file
	  location with this option.  See also docs/README in this
	  package.  If unsure, use the default.

config BR2_UCLIBC_CONFIG_FRAGMENT_FILES
	string "Additional uClibc configuration fragment files"
	help
	  A space-separated list of configuration fragment files, that
	  will be merged to the main uClibc configuration file.

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
	select BR2_NEEDS_HOST_UTF8_LOCALE
	help
	  Enable this option if you want your toolchain to support
	  localization and internationalization.

choice
	prompt "Thread library implementation"
	help
	  Use this option to select the thread library implementation
	  that should be used in your toolchain.

config BR2_PTHREADS_NATIVE
	bool "Native POSIX Threading (NPTL)"
	depends on BR2_USE_MMU
	select BR2_TOOLCHAIN_HAS_THREADS
	select BR2_TOOLCHAIN_HAS_THREADS_NPTL

config BR2_PTHREADS
	bool "linuxthreads"
	depends on BR2_bfin || BR2_m68k || BR2_microblaze || BR2_or1k || BR2_arm || BR2_armeb || BR2_xtensa
	select BR2_TOOLCHAIN_HAS_THREADS

config BR2_PTHREADS_NONE
	bool "none"

endchoice

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

config BR2_TOOLCHAIN_BUILDROOT_USE_SSP
	bool "Enable stack protection support"
	select BR2_TOOLCHAIN_HAS_SSP
	help
	  Enable stack smashing protection support using GCCs
	  -fstack-protector-all option in uClibc.

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

config BR2_UCLIBC_INSTALL_UTILS
	bool "Compile and install uClibc utilities"
	default y
	help
	  Enabling this option will compile and install the getconf,
	  ldconfig and ldd uClibc utilities for the target.

	  You can save ~32 KiB in target space by disabling them since
	  they're normally not needed.

# Mapping from the Buildroot architecture configuration options to the
# uClibc architecture names.
config BR2_UCLIBC_TARGET_ARCH
	string
	default "arc"	   if BR2_arcle || BR2_arceb
	default "arm"	   if BR2_arm	|| BR2_armeb
	default "bfin"	   if BR2_bfin
	default "m68k"	   if BR2_m68k
	default "microblaze"   if BR2_microblaze
	default "mips"	   if BR2_mips || BR2_mipsel || BR2_mips64 || BR2_mips64el
	default "or1k"     if BR2_or1k
	default "powerpc"  if BR2_powerpc
	default "sh"	   if BR2_sh
	default "sparc"	   if BR2_sparc
	default "xtensa"   if BR2_xtensa
	default "i386"	   if BR2_i386
	default "x86_64"   if BR2_x86_64

config BR2_UCLIBC_ARC_TYPE
	string
	default "ARC_CPU_700"	if BR2_arc750d
	default "ARC_CPU_700"	if BR2_arc770d
	default "ARC_CPU_HS"	if BR2_archs38
	depends on BR2_UCLIBC_TARGET_ARCH = "arc"

config BR2_UCLIBC_MIPS_ABI
	string
	default "O32" if BR2_MIPS_OABI32
	default "N32" if BR2_MIPS_NABI32
	default "N64" if BR2_MIPS_NABI64
	depends on BR2_UCLIBC_TARGET_ARCH = "mips"

config BR2_UCLIBC_MIPS_NAN
	string
	default "LEGACY" if BR2_MIPS_NAN_LEGACY
	default "2008" if BR2_MIPS_NAN_2008
	depends on BR2_UCLIBC_TARGET_ARCH = "mips"

config BR2_UCLIBC_SH_TYPE
	string
	default "SH2A" if BR2_sh2a
	default "SH4"  if BR2_sh4 || BR2_sh4eb
	depends on BR2_UCLIBC_TARGET_ARCH = "sh"

config BR2_UCLIBC_SPARC_TYPE
	string
	default "V7"	if BR2_sparc_v7 || BR2_sparc_sparchfleon || BR2_sparc_sparcsfleon
	default "V8"	if BR2_sparc_v8 || BR2_sparc_sparchfleonv8 || BR2_sparc_sparcsfleonv8
	depends on BR2_UCLIBC_TARGET_ARCH = "sparc"

config BR2_UCLIBC_POWERPC_TYPE
	string
	default "CLASSIC" if !BR2_powerpc_8540 && !BR2_powerpc_8548
	default "E500"    if BR2_powerpc_8540 || BR2_powerpc_8548
	depends on BR2_UCLIBC_TARGET_ARCH = "powerpc"

config BR2_UCLIBC_X86_TYPE
	string
	default "486"        if BR2_x86_i486
	default "586"        if BR2_x86_i586
	default "586MMX"     if BR2_x86_pentium_mmx
	default "686"	     if BR2_x86_i686 || BR2_x86_pentiumpro
	default "PENTIUMII"  if BR2_x86_pentium2
	default "PENTIUMIII" if BR2_x86_pentium3
	default "PENTIUM4"   if BR2_x86_pentium4 || BR2_x86_pentium_m || \
	                        BR2_x86_nocona || BR2_x86_core2 || BR2_x86_corei7
	depends on BR2_UCLIBC_TARGET_ARCH = "i386"

endif # BR2_TOOLCHAIN_BUILDROOT_UCLIBC
