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
	depends on !BR2_m68k && !BR2_microblaze && !BR2_or1k
	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_CPU_MIPS32 || BR2_MIPS_CPU_MIPS64
	default "2008" if BR2_MIPS_CPU_MIPS32R6 || BR2_MIPS_CPU_MIPS64R6
	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
