if BR2_TOOLCHAIN_EXTERNAL

choice
	prompt "Toolchain"

comment "(e)glibc toolchains only available with shared lib support"
	depends on BR2_STATIC_LIBS

comment "Linaro toolchains available for Cortex-A + EABIhf"
	depends on BR2_arm || BR2_armeb
	depends on !BR2_ARM_CPU_ARMV7A || !BR2_ARM_EABIHF
	depends on !BR2_STATIC_LIBS

# Note: we use the same symbol for both Linaro toolchains.
# Since they have different dependencies (the host), we can
# give them different prompts and different help texts.
config BR2_TOOLCHAIN_EXTERNAL_LINARO_ARM
	bool "Linaro ARM 2014.09"
	depends on BR2_arm
	depends on BR2_ARM_CPU_ARMV7A
	depends on BR2_HOSTARCH = "x86"
	depends on BR2_ARM_EABIHF
	depends on !BR2_STATIC_LIBS
	select BR2_TOOLCHAIN_EXTERNAL_GLIBC
	select BR2_TOOLCHAIN_HAS_NATIVE_RPC
	select BR2_INSTALL_LIBSTDCPP
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_1
	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_9
	help
	  Linaro toolchain for the ARM architecture. It uses Linaro
	  GCC 2014.09 (based on gcc 4.9), Linaro GDB 2013.10 (based on
	  GDB 7.6), eglibc 2.19, Binutils 2014.09 (based on 2.24). It
	  generates code that runs on all Cortex-A profile devices,
	  but tuned for the Cortex-A9. The code generated is Thumb 2,
	  with the hard floating point calling convention, and uses
	  the VFPv3-D16 FPU instructions.

# See the note above.
config BR2_TOOLCHAIN_EXTERNAL_LINARO_ARM
	bool "Linaro ARM 2015.11"
	depends on BR2_arm
	depends on BR2_ARM_CPU_ARMV7A
	depends on BR2_HOSTARCH = "x86_64"
	depends on BR2_ARM_EABIHF
	depends on !BR2_STATIC_LIBS
	select BR2_TOOLCHAIN_EXTERNAL_GLIBC
	select BR2_TOOLCHAIN_HAS_NATIVE_RPC
	select BR2_INSTALL_LIBSTDCPP
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_0
	select BR2_TOOLCHAIN_GCC_AT_LEAST_5
	help
	  Linaro toolchain for the ARM architecture. It uses Linaro
	  GCC 2015.08 (based on gcc 5.1), Linaro GDB 2015.08 (based on
	  GDB 7.10), glibc 2.21, Binutils 2015.10 (based on 2.25). It
	  generates code that runs on all Cortex-A profile devices,
	  but tuned for the Cortex-A9. The code generated is Thumb 2,
	  with the hard floating point calling convention, and uses
	  the VFPv3-D16 FPU instructions.

# See the note above.
config BR2_TOOLCHAIN_EXTERNAL_LINARO_ARMEB
	bool "Linaro armeb 2014.09"
	depends on BR2_armeb
	depends on BR2_ARM_CPU_ARMV7A
	depends on BR2_HOSTARCH = "x86"
	depends on BR2_ARM_EABIHF
	depends on !BR2_STATIC_LIBS
	select BR2_TOOLCHAIN_EXTERNAL_GLIBC
	select BR2_TOOLCHAIN_HAS_NATIVE_RPC
	select BR2_INSTALL_LIBSTDCPP
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_1
	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_9
	help
	  Linaro toolchain for the ARM big endian architecture. It
	  uses Linaro GCC 2014.09 (based on gcc 4.9), Linaro GDB
	  2013.10 (based on GDB 7.6), eglibc 2.19, Binutils 2014.09
	  (based on 2.24). It generates code that runs on all Cortex-A
	  profile devices, but tuned for the Cortex-A9. The code
	  generated is Thumb 2, with the hard floating point calling
	  convention, and uses the VFPv3-D16 FPU instructions.

# See the note above.
config BR2_TOOLCHAIN_EXTERNAL_LINARO_ARMEB
	bool "Linaro armeb 2015.11"
	depends on BR2_armeb
	depends on BR2_ARM_CPU_ARMV7A
	depends on BR2_HOSTARCH = "x86_64"
	depends on BR2_ARM_EABIHF
	depends on !BR2_STATIC_LIBS
	select BR2_TOOLCHAIN_EXTERNAL_GLIBC
	select BR2_TOOLCHAIN_HAS_NATIVE_RPC
	select BR2_INSTALL_LIBSTDCPP
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_0
	select BR2_TOOLCHAIN_GCC_AT_LEAST_5
	help
	  Linaro toolchain for the ARM big endian architecture. It
	  uses Linaro GCC 2015.08 (based on gcc 5.1), Linaro GDB
	  2015.08 (based on GDB 7.10), glibc 2.21, Binutils 2015.10
	  (based on 2.25). It generates code that runs on all Cortex-A
	  profile devices, but tuned for the Cortex-A9. The code
	  generated is Thumb 2, with the hard floating point calling
	  convention, and uses the VFPv3-D16 FPU instructions.

config BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_ARM
	bool "Sourcery CodeBench ARM 2014.05"
	depends on BR2_arm
	depends on BR2_HOSTARCH = "x86_64" || BR2_HOSTARCH = "x86"
	depends on BR2_ARM_EABI
	depends on !BR2_STATIC_LIBS
	select BR2_TOOLCHAIN_EXTERNAL_GLIBC
	select BR2_TOOLCHAIN_HAS_NATIVE_RPC
	select BR2_INSTALL_LIBSTDCPP
	select BR2_HOSTARCH_NEEDS_IA32_LIBS
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_13
	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_8
	help
	  Sourcery CodeBench toolchain for the ARM architecture, from
	  Mentor Graphics. It uses gcc 4.8.3, binutils 2.24.51, glibc
	  2.18 and gdb 7.7.50, kernel headers 3.13. It has support
	  for the following variants:
	    - ARMv5TE, little endian, soft-float, glibc
	      Select ARM926T, ARM10T, XScale or another ARMv5 core
	      Select BR2_SOFT_FLOAT
	    - ARMv4T, little endian, soft-float, glibc
	      Select ARM720T, ARM920T, ARM922T or another ARMv4 core
	      Select BR2_SOFT_FLOAT
	    - ARMv7-A, Thumb 2, little endian, soft-float, glibc
	      Select Cortex-A8, Cortex-A9 or another ARMv7-A core
	      Select BR2_SOFT_FLOAT
	      Set BR2_TARGET_OPTIMIZATION to -mthumb

comment "Sourcery CodeBench toolchains available for the EABI ABI"
	depends on BR2_arm
	depends on !BR2_ARM_EABI
	depends on !BR2_STATIC_LIBS

config BR2_TOOLCHAIN_EXTERNAL_ARAGO_ARMV7A
	bool "Arago ARMv7 2011.09"
	depends on BR2_arm
	depends on BR2_HOSTARCH = "x86_64" || BR2_HOSTARCH = "x86"
	depends on BR2_ARM_CPU_ARMV7A
	depends on BR2_ARM_EABI
	depends on BR2_ARM_CPU_HAS_VFPV3
	depends on !BR2_STATIC_LIBS
	select BR2_TOOLCHAIN_EXTERNAL_GLIBC
	select BR2_TOOLCHAIN_HAS_NATIVE_RPC
	select BR2_INSTALL_LIBSTDCPP
	select BR2_HOSTARCH_NEEDS_IA32_LIBS
	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_5
	# kernel headers: 2.6.31
	help
	  Texas Instruments Arago 2011.09 toolchain, with gcc 4.5.3,
	  binutils 2.20.1, glibc 2.12, gdb 7.2.

	  This toolchain uses -mfloat-abi=softfp (i.e can use FPU
	  instructions, but passes floating point function arguments
	  in integer registers), and requires a VFPv3 floating point
	  unit to work properly. This unit is available on most
	  Cortex-A ARM processors, but not all.

config BR2_TOOLCHAIN_EXTERNAL_ARAGO_ARMV5TE
	bool "Arago ARMv5 2011.09"
	depends on BR2_arm
	depends on BR2_HOSTARCH = "x86_64" || BR2_HOSTARCH = "x86"
	depends on !BR2_ARM_CPU_ARMV4
	depends on BR2_ARM_EABI
	depends on !BR2_STATIC_LIBS
	select BR2_TOOLCHAIN_EXTERNAL_GLIBC
	select BR2_TOOLCHAIN_HAS_NATIVE_RPC
	select BR2_INSTALL_LIBSTDCPP
	select BR2_HOSTARCH_NEEDS_IA32_LIBS
	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_5
	# kernel headers: 2.6.31
	help
	  Texas Instruments Arago ARMv5 2011.09 toolchain, with gcc
	  4.5.3, binutils 2.20.1, glibc 2.12, gdb 7.2.

	  This toolchain uses software-floating point.

config BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_MIPS
	bool "Sourcery CodeBench MIPS 2015.11"
	depends on BR2_mips || BR2_mipsel || BR2_mips64 || BR2_mips64el
	depends on BR2_mips_32r2 || BR2_mips_64r2
	depends on BR2_HOSTARCH = "x86_64" || BR2_HOSTARCH = "x86"
	depends on !BR2_MIPS_NABI32
	depends on !BR2_STATIC_LIBS
	select BR2_TOOLCHAIN_EXTERNAL_GLIBC
	select BR2_TOOLCHAIN_HAS_NATIVE_RPC
	select BR2_INSTALL_LIBSTDCPP
	select BR2_HOSTARCH_NEEDS_IA32_LIBS
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_2
	select BR2_TOOLCHAIN_GCC_AT_LEAST_5
	help
	  Sourcery CodeBench toolchain for the MIPS architecture, from
	  Mentor Graphics. It uses gcc 5.2, binutils 2.25.51, glibc
	  2.22, uClibc 0.9.30 and gdb 7.10.50, kernel headers 4.2. It
	  has support for the following variants:
	    - MIPS32r2 - Big-Endian, 2008 NaN, O32
	      Select MIPS (big endian) core
	      Disable BR2_SOFT_FLOAT
	      Set BR2_TARGET_OPTIMIZATION to -mnan=2008
	    - MIPS32r2 - Big-Endian, O32
	      Select MIPS (big endian) core
	      Disable BR2_SOFT_FLOAT
	    - MIPS32r2 - Big-Endian, O32, MIPS16
	      Select MIPS (big endian) core
	      Disable BR2_SOFT_FLOAT
	      Set BR2_TARGET_OPTIMIZATION to -mips16
	    - MIPS32r2 - Big-Endian, Soft-Float, O32
	      Select MIPS (big endian) core
	      Select BR2_SOFT_FLOAT
	    - MIPS32r2 - Big-Endian, Soft-Float, O32, MIPS16
	      Select MIPS (big endian) core
	      Select BR2_SOFT_FLOAT
	      Set BR2_TARGET_OPTIMIZATION to -mips16
	    - MIPS32r2 - Little-Endian, 2008 NaN, O32
	      Select MIPS (little endian) core
	      Disable BR2_SOFT_FLOAT
	      Set BR2_TARGET_OPTIMIZATION to -mnan=2008
	    - MIPS32r2 - Little-Endian, O32
	      Select MIPS (little endian) core
	      Disable BR2_SOFT_FLOAT
	    - MIPS32r2 - Little-Endian, O32, MIPS16
	      Select MIPS (little endian) core
	      Disable BR2_SOFT_FLOAT
	      Set BR2_TARGET_OPTIMIZATION to -mips16
	    - MIPS32r2 - Little-Endian, Soft-Float, O32
	      Select MIPS (little endian) core
	      Select BR2_SOFT_FLOAT
	    - MIPS32r2 - Little-Endian, Soft-Float, O32, MIPS16
	      Select MIPS (little endian) core
	      Select BR2_SOFT_FLOAT
	      Set BR2_TARGET_OPTIMIZATION to -mips16
	    - MIPS32r2 - Little-Endian, Soft-Float, O32, microMIPS
	      Select MIPS (little endian) core
	      Select BR2_SOFT_FLOAT
	      Set BR2_TARGET_OPTIMIZATION to -mmicromips
	    - MIPS32r2 - uClibc, Big-Endian, 2008 NaN, O32
	      Not usable in Buildroot yet.
	    - MIPS32r2 - uClibc, Big-Endian, O32
	      Not usable in Buildroot yet.
	    - MIPS32r2 - uClibc, Big-Endian, Soft-Float, O32
	      Not usable in Buildroot yet.
	    - MIPS32r2 - uClibc, Little-Endian, 2008 NaN, O32
	      Not usable in Buildroot yet.
	    - MIPS32r2 - uClibc, Little-Endian, O32
	      Not usable in Buildroot yet.
	    - MIPS32r2 - uClibc, Little-Endian, Soft-Float, O32
	      Not usable in Buildroot yet.
	    - MIPS64r2 - Big-Endian, N64
	      Select MIPS64 (big endian) core
	      Select the n64 ABI
	      Disable BR2_SOFT_FLOAT
	    - MIPS64r2 - Big-Endian, Soft-Float, N64
	      Select MIPS64 (big endian) core
	      Select the n64 ABI
	      Select BR2_SOFT_FLOAT
	    - MIPS64r2 - Little-Endian, N64
	      Select MIPS64 (little endian) core
	      Select the n64 ABI
	      Disable BR2_SOFT_FLOAT
	    - MIPS64r2 - Little-Endian, Soft-Float, N64
	      Select MIPS64 (little endian) core
	      Select the n64 ABI
	      Select BR2_SOFT_FLOAT

comment "Sourcery CodeBench toolchains are only available for MIPS/MIPS64 o32 and n64"
	depends on BR2_MIPS_NABI32
	depends on !BR2_STATIC_LIBS

config BR2_TOOLCHAIN_EXTERNAL_CODESCAPE_IMG_MIPS
	bool "Codescape IMG GNU Linux Toolchain 2015.06"
	depends on BR2_mips || BR2_mipsel || BR2_mips64 || BR2_mips64el
	depends on BR2_HOSTARCH = "x86_64" || BR2_HOSTARCH = "x86"
	depends on !BR2_MIPS_SOFT_FLOAT
	depends on BR2_mips_32r6 || BR2_mips_64r6
	select BR2_TOOLCHAIN_EXTERNAL_GLIBC
	select BR2_INSTALL_LIBSTDCPP
	select BR2_HOSTARCH_NEEDS_IA32_LIBS
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_0
	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_9
	help
	  Codescape IMG GNU Linux Toolchain 2015.06 for the MIPS
	  architecture, from Imagination Technologies. It uses gcc
	  4.9.2, binutils 2.24.90, glibc 2.20, gdb 7.9.1 and kernel
	  headers 4.0. It has support for the following variants:
	    - MIPS32r6 - Big-Endian, o32
	      Select 'MIPS (big endian)' Target Architecture
	      Select 'mips 32r6' Target Architecture Variant
	    - MIPS32r6 - Little-Endian, o32
	      Select 'MIPS (little endian)' Target Architecture
	      Select 'mips 32r6' Target Architecture Variant
	    - MIPS32r6 - Little-Endian, o32, microMIPS
	      Select 'MIPS (little endian)' Target Architecture
	      Select 'mips 32r6' Target Architecture Variant
	      Set BR2_TARGET_OPTIMIZATION to '-mmicromips'
	    - MIPS64r6 - Big-Endian, n32
	      Select 'MIPS64 (big endian)' Target Architecture
	      Select 'mips 64r6' Target Architecture Variant
	      Select 'n32' Target ABI
	    - MIPS64r6 - Little-Endian, n32
	      Select 'MIPS64 (little endian)' Target Architecture
	      Select 'mips 64r6' Target Architecture Variant
	      Select 'n32' Target ABI
	    - MIPS64r6 - Big-Endian, n64
	      Select 'MIPS64 (big endian)' Target Architecture
	      Select 'mips 64r6' Target Architecture Variant
	      Select 'n64' Target ABI
	    - MIPS64r6 - Little-Endian, n64
	      Select 'MIPS64 (little endian)' Target Architecture
	      Select 'mips 64r6' Target Architecture Variant
	      Select 'n64' Target ABI


config BR2_TOOLCHAIN_EXTERNAL_CODESCAPE_MTI_MIPS
	bool "Codescape MTI GNU Linux Toolchain 2015.06"
	depends on BR2_mips || BR2_mipsel || BR2_mips64 || BR2_mips64el
	depends on BR2_HOSTARCH = "x86_64" || BR2_HOSTARCH = "x86"
	depends on !BR2_MIPS_SOFT_FLOAT
	depends on BR2_mips_32r2 || BR2_mips_64r2
	select BR2_TOOLCHAIN_EXTERNAL_GLIBC
	select BR2_INSTALL_LIBSTDCPP
	select BR2_HOSTARCH_NEEDS_IA32_LIBS
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_0
	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_9
	help
	  Codescape MTI GNU Linux Toolchain 2015.06 for the MIPS
	  architecture, from Imagination Technologies. It uses gcc
	  4.9.2, binutils 2.24.90, glibc 2.20, gdb 7.9.1 and kernel
	  headers 4.0. It has support for the following variants:
	    - MIPS32r2 - Big-Endian, o32
	      Select 'MIPS (big endian)' Target Architecture
	      Select 'mips 32r2' Target Architecture Variant
	    - MIPS32r2 - Little-Endian, o32
	      Select 'MIPS (little endian)' Target Architecture
	      Select 'mips 32r2' Target Architecture Variant
	    - MIPS32r2 - Big-Endian, 2008 NaN, o32
	      Select 'MIPS (big endian)' Target Architecture
	      Select 'mips 32r2' Target Architecture Variant
	      Set BR2_TARGET_OPTIMIZATION to '-mnan=2008'
	    - MIPS32r2 - Little-Endian, 2008 NaN, o32
	      Select 'MIPS (little endian)' Target Architecture
	      Select 'mips 32r2' Target Architecture Variant
	      Set BR2_TARGET_OPTIMIZATION to '-mnan=2008'
	    - MIPS32r2 - Little-Endian, o32, microMIPS
	      Select 'MIPS (little endian)' Target Architecture
	      Select 'mips 32r2' Target Architecture Variant
	      Set BR2_TARGET_OPTIMIZATION to '-mmicromips'
	    - MIPS64r2 - Big-Endian, n32
	      Select 'MIPS64 (big endian)' Target Architecture
	      Select 'mips 64r2' Target Architecture Variant
	      Select 'n32' Target ABI
	    - MIPS64r2 - Little-Endian, n32
	      Select 'MIPS64 (little endian)' Target Architecture
	      Select 'mips 64r2' Target Architecture Variant
	      Select 'n32' Target ABI
	    - MIPS64r2 - Big-Endian, n64
	      Select 'MIPS64 (big endian)' Target Architecture
	      Select 'mips 64r2' Target Architecture Variant
	      Select 'n64' Target ABI
	    - MIPS64r2 - Little-Endian, n64
	      Select 'MIPS64 (little endian)' Target Architecture
	      Select 'mips 64r2' Target Architecture Variant
	      Select 'n64' Target ABI

config BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_NIOSII
	bool "Sourcery CodeBench Nios-II 2015.11"
	depends on BR2_nios2
	depends on BR2_HOSTARCH = "x86_64" || BR2_HOSTARCH = "x86"
	depends on !BR2_STATIC_LIBS
	select BR2_TOOLCHAIN_EXTERNAL_GLIBC
	select BR2_TOOLCHAIN_HAS_NATIVE_RPC
	select BR2_INSTALL_LIBSTDCPP
	select BR2_HOSTARCH_NEEDS_IA32_LIBS
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_2
	select BR2_TOOLCHAIN_GCC_AT_LEAST_5
	help
	  Sourcery CodeBench toolchain for the Nios-II architecture,
	  from Mentor Graphics. It uses gcc 5.2, binutils 2.25.51,
	  glibc 2.22, gdb 7.10.50 and kernel headers 4.2.

config BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_POWERPC_E500V2
	bool "Sourcery CodeBench PowerPC 2012.03 (e500v2 only)"
	depends on BR2_powerpc
	depends on BR2_powerpc_8548 # e500v2 support only
	depends on BR2_HOSTARCH = "x86_64" || BR2_HOSTARCH = "x86"
	depends on !BR2_STATIC_LIBS
	select BR2_TOOLCHAIN_EXTERNAL_GLIBC
	select BR2_TOOLCHAIN_HAS_NATIVE_RPC
	select BR2_INSTALL_LIBSTDCPP
	select BR2_HOSTARCH_NEEDS_IA32_LIBS
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_2
	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_6
	help
	  Sourcery CodeBench toolchain for the PowerPC architecture,
	  from Mentor Graphics. It uses gcc 4.6.3, binutils 2.21.53,
	  glibc 2.15, gdb 7.2.50 and kernel headers 3.2.10. It has
	  support for the following variants:
	    - e500v2 glibc, SPE, 32 bits

config BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_POWERPC
	bool "Sourcery CodeBench PowerPC 2011.03"
	depends on BR2_powerpc
	depends on BR2_HOSTARCH = "x86_64" || BR2_HOSTARCH = "x86"
	depends on !BR2_STATIC_LIBS
	select BR2_TOOLCHAIN_EXTERNAL_GLIBC
	select BR2_TOOLCHAIN_HAS_NATIVE_RPC
	select BR2_INSTALL_LIBSTDCPP
	select BR2_HOSTARCH_NEEDS_IA32_LIBS
	# kernel headers: 2.6.38
	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_5
	help
	  Sourcery CodeBench toolchain for the PowerPC architecture,
	  from Mentor Graphics. It uses gcc 4.5.2, binutils 2.20.51,
	  glibc 2.13, gdb 7.2.50 and kernel headers 2.6.38. It has
	  support for the following variants:
	    - 603 glibc, 32 bits
	      Select a generic PowerPC core
	      Disable BR2_SOFT_FLOAT
	    - 603 soft float glibc, 32 bits
	      Select a generic PowerPC core
	      Enable BR2_SOFT_FLOAT
	    - e600 altivec glibc, 32 bits
	      Set BR2_TARGET_OPTIMIZATION to -te600
	    - e500v1 glibc, 32 bits
	      Set BR2_TARGET_OPTIMIZATION to -te500v1
	    - e500v2 glibc, 32 bits
	      Set BR2_TARGET_OPTIMIZATION to -te500v2
	    - e500mc glibc, 32 bits
	      Set BR2_TARGET_OPTIMIZATION to -te500mc
	    - 970 glibc hard-float, 64 bits
	      Set BR2_TARGET_OPTIMIZATION to -m64

config BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_SH
	bool "Sourcery CodeBench SH 2012.09"
	depends on BR2_sh4a || BR2_sh4aeb
	depends on BR2_HOSTARCH = "x86_64" || BR2_HOSTARCH = "x86"
	depends on !BR2_STATIC_LIBS
	select BR2_TOOLCHAIN_EXTERNAL_GLIBC
	select BR2_TOOLCHAIN_HAS_NATIVE_RPC
	select BR2_INSTALL_LIBSTDCPP
	select BR2_HOSTARCH_NEEDS_IA32_LIBS
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_5
	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_7
	help
	  Sourcery CodeBench toolchain for the SuperH architecture,
	  from Mentor Graphics. It uses gcc 4.7.2, binutils 2.23.51,
	  glibc 2.16, uClibc 0.9.30, gdb 7.4.50 and kernel headers
	  3.5.4. It has support for the following variants:
	    - SH4A, glibc, little endian
	      Default.
	    - SH4A, glibc, big endian
	      Add -mb to BR2_TARGET_OPTIMIZATION
	    - SH4A, uClibc, little endian
	      Not usable in Buildroot yet.
	    - SH4A, uClibc, big endian
	      Not usable in Buildroot yet.

config BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_AMD64
	bool "Sourcery CodeBench AMD64 2015.11"
	depends on BR2_x86_64
	depends on BR2_HOSTARCH = "x86_64" || BR2_HOSTARCH = "x86"
	depends on !BR2_STATIC_LIBS
	depends on BR2_x86_jaguar || BR2_x86_steamroller
	select BR2_TOOLCHAIN_EXTERNAL_GLIBC
	select BR2_TOOLCHAIN_HAS_NATIVE_RPC
	select BR2_INSTALL_LIBSTDCPP
	select BR2_HOSTARCH_NEEDS_IA32_LIBS
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_2
	select BR2_TOOLCHAIN_GCC_AT_LEAST_5
	help
	  Sourcery CodeBench toolchain for the amd64 (x86_64)
	  architectures, from Mentor Graphics. It uses gcc 5.2,
	  binutils 2.25.51, glibc 2.22, gdb 7.10.50 and kernel headers
	  4.2. It has support for the following variants:
	    - AMD Puma/Jaguar (family 16h), glibc
	    Default for x86_64, nothing special to do.
	    - AMD Steamroller (family 15h), glibc
	    Select a steamroller core.
	  No other architecture variants are supported since glibc
	  is optimized for one of these two baselines.

config BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_X86
	bool "Sourcery CodeBench x86/x86_64 2012.09"
	depends on BR2_i386 || BR2_x86_64
	depends on BR2_HOSTARCH = "x86_64" || BR2_HOSTARCH = "x86"
	depends on !BR2_STATIC_LIBS
	depends on !BR2_x86_jaguar
	depends on !BR2_x86_steamroller
	select BR2_TOOLCHAIN_EXTERNAL_GLIBC
	select BR2_TOOLCHAIN_HAS_NATIVE_RPC
	select BR2_INSTALL_LIBSTDCPP
	select BR2_HOSTARCH_NEEDS_IA32_LIBS
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_5
	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_7
	help
	  Sourcery CodeBench toolchain for the x86/x86_64
	  architectures, from Mentor Graphics. It uses gcc 4.7.2,
	  binutils 2.23.51, glibc 2.16, gdb 7.4.50 and kernel headers
	  3.5.4. It has support for the following variants:
	    - Intel Pentium 4, glibc, 32 bits
	      Default for x86, nothing special to do.
	    - Intel Atom, glibc, 32 bits
	      Select an Atom core
	    - Intel Xeon, glibc, 64 bits
	      Default for x86_64, nothing special to do.
	    - Intel Core 2, glibc, 64 bits
	      Select a Core 2 core
	  Other architecture variants (beyond Pentium-4/Xeon) are
	  supported as well, but glibc is not optimised for it.

config BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX
	bool "Blackfin.uclinux.org 2014R1"
	depends on BR2_bfin
	depends on BR2_HOSTARCH = "x86_64" || BR2_HOSTARCH = "x86"
	select BR2_TOOLCHAIN_EXTERNAL_UCLIBC
	select BR2_INSTALL_LIBSTDCPP
	select BR2_TOOLCHAIN_HAS_NATIVE_RPC
	select BR2_USE_WCHAR
	select BR2_TOOLCHAIN_HAS_THREADS
	select BR2_TOOLCHAIN_HAS_THREADS_DEBUG
	select BR2_HOSTARCH_NEEDS_IA32_LIBS
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10
	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_3
	help
	  Toolchain for the Blackfin architecture, from
	  http://blackfin.uclinux.org.

# See note about Linaro ARM/ARMEB toolchains, above.
config BR2_TOOLCHAIN_EXTERNAL_LINARO_AARCH64
	bool "Linaro AArch64 14.09"
	depends on BR2_aarch64
	depends on BR2_HOSTARCH = "x86"
	depends on !BR2_STATIC_LIBS
	select BR2_TOOLCHAIN_EXTERNAL_GLIBC
	select BR2_INSTALL_LIBSTDCPP
	select BR2_TOOLCHAIN_HAS_NATIVE_RPC
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_7
	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_9
	help
	  Toolchain for the AArch64 architecture, from
	  http://www.linaro.org/engineering/armv8/

# See note about Linaro ARM/ARMEB toolchains, above.
config BR2_TOOLCHAIN_EXTERNAL_LINARO_AARCH64
	bool "Linaro AArch64 2015.11"
	depends on BR2_aarch64
	depends on BR2_HOSTARCH = "x86_64"
	depends on !BR2_STATIC_LIBS
	select BR2_TOOLCHAIN_EXTERNAL_GLIBC
	select BR2_INSTALL_LIBSTDCPP
	select BR2_TOOLCHAIN_HAS_NATIVE_RPC
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_0
	select BR2_TOOLCHAIN_GCC_AT_LEAST_5
	help
	  Toolchain for the AArch64 architecture, from
	  http://www.linaro.org/engineering/armv8/

config BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_AARCH64
	bool "CodeSourcery AArch64 2014.05"
	depends on BR2_aarch64
	depends on BR2_HOSTARCH = "x86_64" || BR2_HOSTARCH = "x86"
	depends on !BR2_STATIC_LIBS
	select BR2_TOOLCHAIN_EXTERNAL_GLIBC
	select BR2_INSTALL_LIBSTDCPP
	select BR2_HOSTARCH_NEEDS_IA32_LIBS
	select BR2_TOOLCHAIN_HAS_NATIVE_RPC
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_13
	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_8
	help
	  Sourcery CodeBench toolchain for the AArch64 architecture,
	  from Mentor Graphics. It uses gcc 4.8.3, binutils 2.24,
	  glibc 2.18, gdb 7.7.50 and kernel headers 3.13.

config BR2_TOOLCHAIN_EXTERNAL_MUSL_CROSS
	bool "Musl 1.1.6 toolchain (experimental)"
	depends on (BR2_arm && BR2_ARM_EABI) || \
		(BR2_arm && BR2_ARM_EABIHF && !BR2_ARM_CPU_ARMV4) || \
		(BR2_armeb && BR2_ARM_EABI) || \
		(BR2_i386 && !BR2_x86_i386) || BR2_microblazebe || BR2_mips || \
		BR2_mipsel || (BR2_powerpc && BR2_powerpc_CLASSIC) || BR2_x86_64
	depends on BR2_HOSTARCH = "x86_64" || BR2_HOSTARCH = "x86"
	# Unsupported for MIPS R6
	depends on !BR2_mips_32r6 && !BR2_mips_64r6
	select BR2_TOOLCHAIN_EXTERNAL_MUSL
	select BR2_INSTALL_LIBSTDCPP
	select BR2_HOSTARCH_NEEDS_IA32_LIBS
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12
	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_9
	help
	  Toolchain based on the Musl C library, provided by the
	  musl-cross project. It uses gcc 4.9.2, binutils 2.25 and
	  musl 1.1.6. It does not have a cross debugger included.

	  The ARM soft-float toolchain is built for ARMv4t, while the
	  ARM hard-float toolchain is built for ARMv5t.
	  The x86 toolchain is built for i486.

	  http://musl.codu.org/

config BR2_TOOLCHAIN_EXTERNAL_SYNOPSYS_ARC
	bool "Synopsys ARC 2014.12 toolchain"
	depends on BR2_arc
	depends on BR2_HOSTARCH = "x86_64"
	# does not provide IPv6, and lacks many uClibc features
	# expected by Buildroot. The next Synopsys toolchain version
	# should fix those problems.
	depends on BROKEN
	select BR2_TOOLCHAIN_EXTERNAL_UCLIBC
	select BR2_INSTALL_LIBSTDCPP
	select BR2_TOOLCHAIN_HAS_NATIVE_RPC
	select BR2_ENABLE_LOCALE
	select BR2_USE_WCHAR
	select BR2_TOOLCHAIN_HAS_THREADS
	select BR2_TOOLCHAIN_HAS_THREADS_DEBUG
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_13
	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_8
	help
	  Toolchain for the ARC cores, from
	  https://github.com/foss-for-synopsys-dwc-arc-processors/toolchain/releases

config BR2_TOOLCHAIN_EXTERNAL_CUSTOM
	bool "Custom toolchain"
	help
	  Use this option to use a custom toolchain pre-installed on
	  your system.

endchoice

choice
	prompt "Toolchain origin"
	# Keep compatibility with old defconfig files that are using
	# custom toolchains, and which are therefore assuming that
	# "preinstalled" in the default choice.
	default BR2_TOOLCHAIN_EXTERNAL_PREINSTALLED if BR2_TOOLCHAIN_EXTERNAL_CUSTOM

config BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD
	bool "Toolchain to be downloaded and installed"
	help
	  Select this option if you want Buildroot to download and install the
	  toolchain. If you have selected a custom toolchain, specify the URL
	  in BR2_TOOLCHAIN_EXTERNAL_URL.

config BR2_TOOLCHAIN_EXTERNAL_PREINSTALLED
	bool "Pre-installed toolchain"
	help
	  Select this option if you want to use a pre-installed toolchain.
	  Specify the path to this toolchain in BR2_TOOLCHAIN_EXTERNAL_PATH.

endchoice

config BR2_TOOLCHAIN_EXTERNAL_PATH
	string "Toolchain path"
	default "/path/to/toolchain/usr"
	depends on BR2_TOOLCHAIN_EXTERNAL_PREINSTALLED
	help
	  Path to where the external toolchain is installed.

config BR2_TOOLCHAIN_EXTERNAL_URL
	string "Toolchain URL"
	depends on BR2_TOOLCHAIN_EXTERNAL_CUSTOM && BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD
	help
	  URL of the custom toolchain tarball to download and install.

config BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX
	string "Toolchain prefix"
	depends on BR2_TOOLCHAIN_EXTERNAL_CUSTOM
	default "$(ARCH)-linux"

config BR2_TOOLCHAIN_EXTERNAL_PREFIX
	string
	default "arc-linux"		 if BR2_TOOLCHAIN_EXTERNAL_SYNOPSYS_ARC && BR2_arcle
	default "arceb-linux"		 if BR2_TOOLCHAIN_EXTERNAL_SYNOPSYS_ARC && BR2_arceb
	default "arm-linux-gnueabihf"	 if BR2_TOOLCHAIN_EXTERNAL_LINARO_ARM
	default "armeb-linux-gnueabihf"	 if BR2_TOOLCHAIN_EXTERNAL_LINARO_ARMEB
	default "arm-none-linux-gnueabi" if BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_ARM
	default "arm-arago-linux-gnueabi" if BR2_TOOLCHAIN_EXTERNAL_ARAGO_ARMV7A
	default "arm-arago-linux-gnueabi" if BR2_TOOLCHAIN_EXTERNAL_ARAGO_ARMV5TE
	default "aarch64-linux-gnu"      if BR2_TOOLCHAIN_EXTERNAL_LINARO_AARCH64
	default "aarch64-linux-gnu"      if BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_AARCH64
	default "mips-linux-gnu"         if BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_MIPS
	default "nios2-linux-gnu"        if BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_NIOSII
	default "powerpc-linux-gnu"      if BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_POWERPC
	default "powerpc-mentor-linux-gnu" if BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_POWERPC_E500V2
	default "sh-linux-gnu"           if BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_SH
	default "i686-pc-linux-gnu"	 if BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_X86
	default "x86_64-amd-linux-gnu"   if BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_AMD64
	default "bfin-uclinux"		 if BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX && BR2_BINFMT_FLAT
	default "bfin-linux-uclibc"	 if BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX && BR2_BINFMT_FDPIC
	default "arm-linux-musleabi"	 if BR2_TOOLCHAIN_EXTERNAL_MUSL_CROSS && BR2_arm && BR2_ARM_EABI
	default "arm-linux-musleabihf"	 if BR2_TOOLCHAIN_EXTERNAL_MUSL_CROSS && BR2_arm && BR2_ARM_EABIHF
	default "mips-img-linux-gnu"     if BR2_TOOLCHAIN_EXTERNAL_CODESCAPE_IMG_MIPS
	default "mips-mti-linux-gnu"     if BR2_TOOLCHAIN_EXTERNAL_CODESCAPE_MTI_MIPS
	default "armeb-linux-musleabi"	 if BR2_TOOLCHAIN_EXTERNAL_MUSL_CROSS && BR2_armeb
	default "i486-linux-musl"	 if BR2_TOOLCHAIN_EXTERNAL_MUSL_CROSS && BR2_i386
	default "microblaze-linux-musl"	 if BR2_TOOLCHAIN_EXTERNAL_MUSL_CROSS && BR2_microblazebe
	default "mips-linux-musl"	 if BR2_TOOLCHAIN_EXTERNAL_MUSL_CROSS && (BR2_mips && !BR2_SOFT_FLOAT)
	default "mips-sf-linux-musl"	 if BR2_TOOLCHAIN_EXTERNAL_MUSL_CROSS && (BR2_mips && BR2_SOFT_FLOAT)
	default "mipsel-linux-musl"	 if BR2_TOOLCHAIN_EXTERNAL_MUSL_CROSS && (BR2_mipsel && !BR2_SOFT_FLOAT)
	default "mipsel-sf-linux-musl"	 if BR2_TOOLCHAIN_EXTERNAL_MUSL_CROSS && (BR2_mipsel && BR2_SOFT_FLOAT)
	default "powerpc-linux-musl"     if BR2_TOOLCHAIN_EXTERNAL_MUSL_CROSS && BR2_powerpc
	default "x86_64-linux-musl"	 if BR2_TOOLCHAIN_EXTERNAL_MUSL_CROSS && BR2_x86_64
	default BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX \
					 if BR2_TOOLCHAIN_EXTERNAL_CUSTOM

config BR2_TOOLCHAIN_EXTERNAL_GLIBC
	bool
	select BR2_TOOLCHAIN_USES_GLIBC

config BR2_TOOLCHAIN_EXTERNAL_UCLIBC
	bool
	select BR2_TOOLCHAIN_USES_UCLIBC

config BR2_TOOLCHAIN_EXTERNAL_MUSL
	bool
	select BR2_TOOLCHAIN_USES_MUSL
	select BR2_PACKAGE_NETBSD_QUEUE

if BR2_TOOLCHAIN_EXTERNAL_CUSTOM

choice
	bool "External toolchain gcc version"
	default BR2_TOOLCHAIN_EXTERNAL_GCC_4_3
	help
	  Set to the gcc version that is used by your external
	  toolchain.

config BR2_TOOLCHAIN_EXTERNAL_GCC_5
	bool "5.x"
	select BR2_TOOLCHAIN_GCC_AT_LEAST_5

config BR2_TOOLCHAIN_EXTERNAL_GCC_4_9
	bool "4.9.x"
	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_9

config BR2_TOOLCHAIN_EXTERNAL_GCC_4_8
	bool "4.8.x"
	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_8

config BR2_TOOLCHAIN_EXTERNAL_GCC_4_7
	bool "4.7.x"
	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_7

config BR2_TOOLCHAIN_EXTERNAL_GCC_4_6
	bool "4.6.x"
	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_6

config BR2_TOOLCHAIN_EXTERNAL_GCC_4_5
	bool "4.5.x"
	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_5

config BR2_TOOLCHAIN_EXTERNAL_GCC_4_4
	bool "4.4.x"
	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_4

config BR2_TOOLCHAIN_EXTERNAL_GCC_4_3
	bool "4.3.x"
	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_3

endchoice

choice
	bool "External toolchain kernel headers series"
	default BR2_TOOLCHAIN_EXTERNAL_HEADERS_REALLY_OLD
	help
	  Set to the kernel headers version that were used to build
	  this external toolchain.

	  This is used to hide/show some packages that have strict
	  requirements on the version of kernel headers.

	  If unsure what version your toolchain is using, you can look
	  at the value of LINUX_VERSION_CODE in linux/version.h in your
	  toolchain. The Linux version is M.m.p, with:
	    M = ( LINUX_VERSION_CODE >> 16 ) & 0xFF
	    m = ( LINUX_VERSION_CODE >> 8  ) & 0xFF
	    p = ( LINUX_VERSION_CODE >> 0  ) & 0xFF

config BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_4
	bool "4.4.x"
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_4

config BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_3
	bool "4.3.x"
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_3

config BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_2
	bool "4.2.x"
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_2

config BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_1
	bool "4.1.x"
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_1

config BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_0
	bool "4.0.x"
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_0

config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_19
	bool "3.19.x"
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_19

config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_18
	bool "3.18.x"
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_18

config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_17
	bool "3.17.x"
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_17

config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_16
	bool "3.16.x"
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_16

config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_15
	bool "3.15.x"
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_15

config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_14
	bool "3.14.x"
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_14

config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_13
	bool "3.13.x"
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_13

config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_12
	bool "3.12.x"
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12

config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_11
	bool "3.11.x"
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_11

config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_10
	bool "3.10.x"
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10

config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_9
	bool "3.9.x"
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_9

config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_8
	bool "3.8.x"
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_8

config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_7
	bool "3.7.x"
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_7

config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_6
	bool "3.6.x"
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_6

config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_5
	bool "3.5.x"
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_5

config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_4
	bool "3.4.x"
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4

config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_3
	bool "3.3.x"
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_3

config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_2
	bool "3.2.x"
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_2

config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_1
	bool "3.1.x"
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_1

config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_0
	bool "3.0.x"
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0

config BR2_TOOLCHAIN_EXTERNAL_HEADERS_REALLY_OLD
	bool "2.6.x"

endchoice

choice
	prompt "External toolchain C library"
	default BR2_TOOLCHAIN_EXTERNAL_CUSTOM_UCLIBC

config BR2_TOOLCHAIN_EXTERNAL_CUSTOM_UCLIBC
	bool "uClibc"
	select BR2_TOOLCHAIN_EXTERNAL_UCLIBC
	# For the time being, we assume that all custom external
	# toolchains have shadow password support.
	select BR2_TOOLCHAIN_HAS_SHADOW_PASSWORDS
	help
	  Select this option if your external toolchain uses the
	  uClibc C library (available from http://www.uclibc.org/).

config BR2_TOOLCHAIN_EXTERNAL_CUSTOM_GLIBC
	bool "glibc/eglibc"
	depends on !BR2_STATIC_LIBS
	select BR2_TOOLCHAIN_EXTERNAL_GLIBC
	help
	  Select this option if your external toolchain uses the GNU C
	  library (available from https://www.gnu.org/software/libc/)
	  or its variant the eglibc library (http://www.eglibc.org/).

	  Note: eglibc is a variant of glibc that (among other things)
	  can be configured to exclude some of its features. Using a
	  toolchain with eglibc configured to exclude key features may
	  cause build failures to some packages.

comment "(e)glibc only available with shared lib support"
	depends on BR2_STATIC_LIBS

config BR2_TOOLCHAIN_EXTERNAL_CUSTOM_MUSL
	bool "musl (experimental)"
	select BR2_TOOLCHAIN_EXTERNAL_MUSL
	help
	  Select this option if your external toolchain uses the
	  'musl' C library, available from http://www.musl-libc.org/.

endchoice

if BR2_TOOLCHAIN_EXTERNAL_CUSTOM_UCLIBC

config BR2_TOOLCHAIN_EXTERNAL_WCHAR
	bool "Toolchain has WCHAR support?"
	select BR2_USE_WCHAR
	help
	  Select this option if your external toolchain supports
	  WCHAR. If you don't know, leave the default value, Buildroot
	  will tell you if it's correct or not.

config BR2_TOOLCHAIN_EXTERNAL_LOCALE
	bool "Toolchain has locale support?"
	select BR2_TOOLCHAIN_EXTERNAL_WCHAR
	select BR2_ENABLE_LOCALE
	help
	  Select this option if your external toolchain has locale
	  support. If you don't know, leave the default value,
	  Buildroot will tell you if it's correct or not.

config BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS
	bool "Toolchain has threads support?"
	select BR2_TOOLCHAIN_HAS_THREADS
	default y
	help
	  Select this option if your external toolchain has thread
	  support. If you don't know, leave the default value,
	  Buildroot will tell you if it's correct or not.

if BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS

config BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS_DEBUG
	bool "Toolchain has threads debugging support?"
	select BR2_TOOLCHAIN_HAS_THREADS_DEBUG
	default y
	help
	  Select this option if your external toolchain has thread
	  debugging support. If you don't know, leave the default
	  value, Buildroot will tell you if it's correct or not.

config BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS_NPTL
	bool "Toolchain has NPTL threads support?"
	select BR2_TOOLCHAIN_HAS_THREADS_NPTL
	default y
	help
	  Select this option if your external toolchain uses the NPTL
	  (Native Posix Thread Library) implementation of Posix
	  threads. If you don't know, leave the default value,
	  Buildroot will tell you if it's correct or not.

endif # BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS

config BR2_TOOLCHAIN_EXTERNAL_HAS_SSP
	bool "Toolchain has SSP support?"
	select BR2_TOOLCHAIN_HAS_SSP
	help
	  Selection this option if your external toolchain has Stack
	  Smashing Protection support enabled. If you don't know,
	  leave the default value, Buildroot will tell you if it's
	  correct or not.

endif # BR2_TOOLCHAIN_EXTERNAL_CUSTOM_UCLIBC

config BR2_TOOLCHAIN_EXTERNAL_INET_RPC
	bool "Toolchain has RPC support?"
	select BR2_TOOLCHAIN_HAS_NATIVE_RPC
	depends on !BR2_TOOLCHAIN_EXTERNAL_MUSL
	default y if BR2_TOOLCHAIN_EXTERNAL_GLIBC
	help
	  Select this option if your external toolchain supports
	  RPC. If you don't know, leave the default value, Buildroot
	  will tell you if it's correct or not.

config BR2_TOOLCHAIN_EXTERNAL_CXX
	bool "Toolchain has C++ support?"
	select BR2_INSTALL_LIBSTDCPP
	help
	  Select this option if your external toolchain has C++
	  support. If you don't know, leave the default value,
	  Buildroot will tell you if it's correct or not.

config BR2_TOOLCHAIN_EXTRA_EXTERNAL_LIBS
	string "Extra toolchain libraries to be copied to target"
	help
	  If your external toolchain provides extra libraries that
	  need to be copied to the target filesystem, enter them
	  here, separated by spaces. They will be copied to the
	  target's /lib directory.

endif # BR2_TOOLCHAIN_EXTERNAL_CUSTOM

config BR2_TOOLCHAIN_EXTERNAL_GDB_SERVER_COPY
	bool "Copy gdb server to the Target"
	depends on BR2_TOOLCHAIN_EXTERNAL
	help
	  Copy the gdbserver provided by the external toolchain to the
	  target.

# When the FDPIC shared binary format is used, the corresponding libraries are
# always installed. When a different binary format is used, we offer the option
# of installing the FDPIC shared libraries.
config BR2_BFIN_INSTALL_FDPIC_SHARED
	bool "Install FDPIC shared libraries"
	depends on BR2_bfin && !BR2_BINFMT_FDPIC
	help
	  The Linux kernel supports running both FDPIC and FLAT applications
	  concurrently if the binary format specific libraries are installed
	  properly. This option allows developer to install FDPIC libraries
	  into a buildroot rootfs image built with binary format that is not
	  FDPIC.

# When the FLAT shared binary format is used, we force the installation
# of the corresponding libraries. When a different binary format is
# used, we offer the option of installing the FLAT shared libraries.
config BR2_BFIN_INSTALL_FLAT_SHARED
	bool "Install FLAT shared libraries" if !BR2_BINFMT_FLAT_SHARED
	depends on BR2_bfin
	default y if BR2_BINFMT_FLAT_SHARED
	help
	  The Linux kernel supports running both FDPIC and FLAT applications
	  concurrently if the binary format specific libraries are installed
	  properly. This option allows developer to install FLAT libraries
	  into a buildroot rootfs image built with binary format that is not
	  shared FLAT.

endif # BR2_TOOLCHAIN_EXTERNAL
