if BR2_TOOLCHAIN_BUILDROOT_UCLIBC

config BR2_PACKAGE_UCLIBC
	bool
	default y
	select BR2_PACKAGE_LINUX_HEADERS

comment "uClibc Options"

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_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.

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

	config BR2_PTHREADS_NONE
		bool "none"

	config BR2_PTHREADS
		bool "linuxthreads"
		select BR2_TOOLCHAIN_HAS_THREADS
		depends on BR2_m68k

	config BR2_PTHREADS_OLD
		bool "linuxthreads (stable/old)"
		select BR2_TOOLCHAIN_HAS_THREADS
		depends on BR2_m68k || BR2_arm || BR2_armeb

	config BR2_PTHREADS_NATIVE
		bool "Native POSIX Threading (NPTL)"
		select BR2_TOOLCHAIN_HAS_THREADS
		select BR2_TOOLCHAIN_HAS_THREADS_NPTL
		depends on !BR2_m68k && !BR2_x86_i386
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.

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.

config BR2_UCLIBC_INSTALL_TEST_SUITE
	bool "Compile and install uClibc tests"
	select BR2_PACKAGE_MAKE
	depends on BR2_USE_MMU # make
	help
	  Enabling this option will compile and install the uClibc test suite.
	  This is useful if you want to check if the uClibc library is working
	  for your architecture and/or help developing uClibc.

	  The test suite will be installed into /root/uClibc directory. To run
	  the test suite enter the /root/uClibc/test directory and type
	  "make UCLIBC_ONLY=1 CC=/bin/true check".

	  See the /root/uClibc/test/README for additional information.

	  This is not needed at all for normal builds, so you can safely say no
	  if you do not plan to dig into your C library.

# 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 "m68k"	   if BR2_m68k
	default "mips"	   if BR2_mips || BR2_mipsel || BR2_mips64 || BR2_mips64el
	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
	depends on BR2_UCLIBC_TARGET_ARCH = "arc"
	default "ARC_CPU_700"	if BR2_arc750d
	default "ARC_CPU_700"	if BR2_arc770d
	default "ARC_CPU_HS"	if BR2_archs38

config BR2_UCLIBC_ARM_BX
	bool
	depends on BR2_UCLIBC_TARGET_ARCH = "arm"
	default y if (BR2_ARM_CPU_HAS_THUMB || BR2_ARM_CPU_HAS_THUMB2)

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

config BR2_UCLIBC_MIPS_ISA
	string
	depends on BR2_UCLIBC_TARGET_ARCH = "mips"
	default "MIPS32" if BR2_mips_32
	default "MIPS32R2" if BR2_mips_32r2
	default "MIPS64" if BR2_mips_64

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

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

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

config BR2_UCLIBC_X86_TYPE
	string
	depends on BR2_UCLIBC_TARGET_ARCH = "i386"
	default "386"        if BR2_x86_i386
	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

endif # BR2_TOOLCHAIN_BUILDROOT_UCLIBC
