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_SSP
	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 2016.02"
	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_SSP
	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 2016.02 (based on gcc 5.3), Linaro GDB 2016.02 (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_SSP
	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 2016.02"
	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_SSP
	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 2016.02 (based on gcc 5.3), Linaro GDB
	  2016.02 (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_SSP
	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_SSP
	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_SSP
	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 2016.05"
	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_SSP
	select BR2_TOOLCHAIN_HAS_NATIVE_RPC
	select BR2_INSTALL_LIBSTDCPP
	select BR2_HOSTARCH_NEEDS_IA32_LIBS
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_4
	select BR2_TOOLCHAIN_GCC_AT_LEAST_5
	help
	  Sourcery CodeBench toolchain for the MIPS architecture, from
	  Mentor Graphics. It uses gcc 5.3, binutils 2.25.51, glibc
	  2.23, uClibc 0.9.30 and gdb 7.10.50, kernel headers 4.4.1. 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.10"
	depends on BR2_mips || BR2_mipsel || BR2_mips64 || BR2_mips64el
	depends on BR2_HOSTARCH = "x86_64" || BR2_HOSTARCH = "x86"
	depends on BR2_mips_32r6 || (BR2_mips_64r6 && !BR2_MIPS_SOFT_FLOAT)
	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.10 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, Hard-Float, 2008 NaN, o32 ABI
	      Select 'MIPS (big endian)' Target Architecture
	      Select 'mips 32r6' Target Architecture Variant
	      Disable 'Use soft-float'
	    - MIPS32r6 - Big-Endian, Soft-Float, 2008 NaN, o32 ABI
	      Select 'MIPS (big endian)' Target Architecture
	      Select 'mips 32r6' Target Architecture Variant
	      Enable 'Use soft-float'
	    - MIPS32r6 - Little-Endian, Hard-Float, 2008 NaN, o32 ABI
	      Select 'MIPS (little endian)' Target Architecture
	      Select 'mips 32r6' Target Architecture Variant
	      Disable 'Use soft-float'
	    - MIPS32r6 - Little-Endian, Soft-Float, 2008 NaN, o32 ABI
	      Select 'MIPS (little endian)' Target Architecture
	      Select 'mips 32r6' Target Architecture Variant
	      Enable 'Use soft-float'
	    - MIPS32r6 - Little-Endian, Hard-Float, 2008 NaN, o32 ABI, microMIPS
	      Select 'MIPS (little endian)' Target Architecture
	      Select 'mips 32r6' Target Architecture Variant
	      Disable 'Use soft-float'
	      Set BR2_TARGET_OPTIMIZATION to '-mmicromips'
	    - MIPS32r6 - Little-Endian, Soft-Float, 2008 NaN, o32 ABI, microMIPS
	      Select 'MIPS (little endian)' Target Architecture
	      Select 'mips 32r6' Target Architecture Variant
	      Enable 'Use soft-float'
	      Set BR2_TARGET_OPTIMIZATION to '-mmicromips'
	    - MIPS64r6 - Big-Endian, Hard-Float, 2008 NaN, n32 ABI
	      Select 'MIPS64 (big endian)' Target Architecture
	      Select 'mips 64r6' Target Architecture Variant
	      Select 'n32' Target ABI
	      Disable 'Use soft-float'
	    - MIPS64r6 - Little-Endian, Hard-Float, 2008 NaN, n32 ABI
	      Select 'MIPS64 (little endian)' Target Architecture
	      Select 'mips 64r6' Target Architecture Variant
	      Select 'n32' Target ABI
	      Disable 'Use soft-float'
	    - MIPS64r6 - Big-Endian, Hard-Float, 2008 NaN, n64 ABI
	      Select 'MIPS64 (big endian)' Target Architecture
	      Select 'mips 64r6' Target Architecture Variant
	      Select 'n64' Target ABI
	      Disable 'Use soft-float'
	    - MIPS64r6 - Little-Endian, Hard-Float, 2008 NaN, n64 ABI
	      Select 'MIPS64 (little endian)' Target Architecture
	      Select 'mips 64r6' Target Architecture Variant
	      Select 'n64' Target ABI
	      Disable 'Use soft-float'

config BR2_TOOLCHAIN_EXTERNAL_CODESCAPE_MTI_MIPS
	bool "Codescape MTI GNU Linux Toolchain 2015.10"
	depends on BR2_mips || BR2_mipsel || BR2_mips64 || BR2_mips64el
	depends on BR2_HOSTARCH = "x86_64" || BR2_HOSTARCH = "x86"
	depends on BR2_mips_32r2 || (BR2_mips_64r2 && !BR2_MIPS_SOFT_FLOAT)
	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.10 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, Hard-Float, Legacy NaN, o32 ABI
	      Select 'MIPS (big endian)' Target Architecture
	      Select 'mips 32r2' Target Architecture Variant
	      Disable 'Use soft-float'
	    - MIPS32r2 - Big-Endian, Hard-Float, 2008 NaN, o32 ABI
	      Select 'MIPS (big endian)' Target Architecture
	      Select 'mips 32r2' Target Architecture Variant
	      Disable 'Use soft-float'
	      Set BR2_TARGET_OPTIMIZATION to '-mnan=2008'
	    - MIPS32r2 - Big-Endian, Soft-Float, Legacy NaN, o32 ABI
	      Select 'MIPS (big endian)' Target Architecture
	      Select 'mips 32r2' Target Architecture Variant
	      Enable 'Use soft-float'
	    - MIPS32r2 - Little-Endian, Hard-Float, Legacy NaN, o32 ABI
	      Select 'MIPS (little endian)' Target Architecture
	      Select 'mips 32r2' Target Architecture Variant
	      Disable 'Use soft-float'
	    - MIPS32r2 - Little-Endian, Hard-Float, 2008 NaN, o32 ABI
	      Select 'MIPS (little endian)' Target Architecture
	      Select 'mips 32r2' Target Architecture Variant
	      Disable 'Use soft-float'
	      Set BR2_TARGET_OPTIMIZATION to '-mnan=2008'
	    - MIPS32r2 - Little-Endian, Soft-Float, Legacy NaN, o32 ABI
	      Select 'MIPS (little endian)' Target Architecture
	      Select 'mips 32r2' Target Architecture Variant
	      Enable 'Use soft-float'
	    - MIPS32r2 - Little-Endian, Hard-Float, 2008 NaN, o32 ABI, microMIPS
	      Select 'MIPS (little endian)' Target Architecture
	      Select 'mips 32r2' Target Architecture Variant
	      Enable 'Use soft-float'
	      Set BR2_TARGET_OPTIMIZATION to '-mmicromips'
	    - MIPS32r2 - Little-Endian, Soft-Float, Legacy NaN, o32 ABI, microMIPS
	      Select 'MIPS (little endian)' Target Architecture
	      Select 'mips 32r2' Target Architecture Variant
	      Disable 'Use soft-float'
	      Set BR2_TARGET_OPTIMIZATION to '-mmicromips'
	    - MIPS64r2 - Big-Endian, Hard-Float, Legacy NaN, n32 ABI
	      Select 'MIPS64 (big endian)' Target Architecture
	      Select 'mips 64r2' Target Architecture Variant
	      Select 'n32' Target ABI
	      Disable 'Use soft-float'
	    - MIPS64r2 - Little-Endian, Hard-Float, Legacy NaN, n32 ABI
	      Select 'MIPS64 (little endian)' Target Architecture
	      Select 'mips 64r2' Target Architecture Variant
	      Select 'n32' Target ABI
	      Disable 'Use soft-float'
	    - MIPS64r2 - Big-Endian, Hard-Float, Legacy NaN, n64 ABI
	      Select 'MIPS64 (big endian)' Target Architecture
	      Select 'mips 64r2' Target Architecture Variant
	      Select 'n64' Target ABI
	      Disable 'Use soft-float'
	    - MIPS64r2 - Little-Endian, Hard-Float, Legacy NaN, n64 ABI
	      Select 'MIPS64 (little endian)' Target Architecture
	      Select 'mips 64r2' Target Architecture Variant
	      Select 'n64' Target ABI
	      Disable 'Use soft-float'

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_SSP
	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
	select BR2_TOOLCHAIN_HAS_BINUTILS_BUG_19405 # based-on binutils-2.25.1
	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_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_SSP
	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_SSP
	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_SSP
	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_TOOLCHAIN_HAS_SSP
	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 2016.02"
	depends on BR2_aarch64
	depends on BR2_HOSTARCH = "x86_64"
	depends on !BR2_STATIC_LIBS
	select BR2_TOOLCHAIN_EXTERNAL_GLIBC
	select BR2_TOOLCHAIN_HAS_SSP
	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.11"
	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_TOOLCHAIN_HAS_SSP
	select BR2_INSTALL_LIBSTDCPP
	select BR2_HOSTARCH_NEEDS_IA32_LIBS
	select BR2_TOOLCHAIN_HAS_NATIVE_RPC
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_16
	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_9
	help
	  Sourcery CodeBench toolchain for the AArch64 architecture,
	  from Mentor Graphics. It uses gcc 4.9.1, binutils
	  2.24.51.20140217, glibc 2.20, gdb 7.7.50 and kernel headers
	  3.16.2.

config BR2_TOOLCHAIN_EXTERNAL_MUSL_CROSS
	bool "Musl 1.1.12 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_mips && !BR2_SOFT_FLOAT) || \
		BR2_mipsel || (BR2_powerpc && BR2_powerpc_CLASSIC) || \
		BR2_sh4 || BR2_sh4eb || \
		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_TOOLCHAIN_HAS_SSP
	select BR2_INSTALL_LIBSTDCPP
	select BR2_HOSTARCH_NEEDS_IA32_LIBS
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12
	select BR2_TOOLCHAIN_GCC_AT_LEAST_5
	help
	  Toolchain based on the Musl C library, provided by the
	  musl-cross project. It uses gcc 5.3, binutils 2.25.1 and
	  musl 1.1.12. 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-amd-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 "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 "mips-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 "sh4-linux-musl"         if BR2_TOOLCHAIN_EXTERNAL_MUSL_CROSS && BR2_sh4
	default "sh4eb-linux-musl"       if BR2_TOOLCHAIN_EXTERNAL_MUSL_CROSS && BR2_sh4eb
	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_6
	bool "6.x"
	select BR2_TOOLCHAIN_GCC_AT_LEAST_6

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_5
	bool "4.5.x"
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_5

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

endif # BR2_TOOLCHAIN_EXTERNAL_CUSTOM_UCLIBC

config BR2_TOOLCHAIN_EXTERNAL_HAS_SSP
	bool "Toolchain has SSP support?"
	select BR2_TOOLCHAIN_HAS_SSP
	default y if BR2_TOOLCHAIN_EXTERNAL_GLIBC
	default y if BR2_TOOLCHAIN_EXTERNAL_MUSL
	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.

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.

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
