if BR2_TOOLCHAIN_EXTERNAL

choice
	prompt "Toolchain"

config BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_ARM201103
	bool "Sourcery CodeBench ARM 2011.03"
	depends on BR2_arm
	select BR2_TOOLCHAIN_EXTERNAL_GLIBC
	select BR2_INSTALL_LIBSTDCPP
	help
	  Sourcery CodeBench toolchain for the ARM architecture, from
	  Mentor Graphics. It uses gcc 4.5.2, binutils 2.20.51, glibc
	  2.13 and gdb 7.2.50, kernel headers 2.6.38. It has support
	  for the following variants:
            - ARMv5TE, little endian, soft-float, glibc
            - ARMv4T, little endian, soft-float, glibc
            - ARMv7-A, Thumb 2, little endian, soft-float, glibc

config BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_ARM201009
	bool "Sourcery CodeBench ARM 2010.09"
	depends on BR2_arm
	select BR2_TOOLCHAIN_EXTERNAL_GLIBC
	select BR2_INSTALL_LIBSTDCPP
	help
	  Sourcery CodeBench toolchain for the ARM architecture, from
	  Mentor Graphics. It uses gcc 4.5.1, binutils 2.20, glibc
	  2.11 and gdb 7.2.50, kernel headers 2.6.35.2. It has support
	  for the following variants:
            - ARMv5TE, little endian, soft-float, glibc
            - ARMv4T, little endian, soft-float, glibc
            - ARMv7-A, Thumb 2, little endian, soft-float, glibc

config BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_ARM2010Q1
	bool "Sourcery CodeBench ARM 2010q1"
	depends on BR2_arm
	select BR2_TOOLCHAIN_EXTERNAL_GLIBC
	select BR2_INSTALL_LIBSTDCPP
	help
	  Sourcery CodeBench toolchain for the ARM architecture, from
	  Mentor Graphics. It uses gcc 4.4.1, binutils 2.19, glibc
	  2.11, gdb 7.0.50 and kernel headers 2.6.32. It has support
	  for the following variants:
             - ARMv5T, little endian, soft-float, glibc
             - ARMv4T, little endian, soft-float, glibc
             - ARMv7-A, Thumb 2, little endian, soft-float, glibc

config BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_ARM2009Q3
	bool "Sourcery CodeBench ARM 2009q3"
	depends on BR2_arm
	select BR2_TOOLCHAIN_EXTERNAL_GLIBC
	select BR2_INSTALL_LIBSTDCPP
	help
	  Sourcery CodeBench toolchain for the ARM architecture, from
	  Mentor Graphics. It uses gcc 4.4.1, binutils 2.19, glibc
	  2.10 and gdb 6.8 and kernel headers 2.6.30. It has support
	  for the following variants:
            - ARMv5T, little endian, soft-float, glibc
            - ARMv4T, little endian, soft-float, glibc
            - ARMv7-A, Thumb 2, little endian, soft-float, glibc

config BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_ARM2009Q1
	bool "Sourcery CodeBench ARM 2009q1"
	depends on BR2_arm
	select BR2_TOOLCHAIN_EXTERNAL_GLIBC
	select BR2_INSTALL_LIBSTDCPP
	help
	  Sourcery CodeBench toolchain for the ARM architecture, from
	  Mentor Graphics. It uses gcc 4.3.3, binutils 2.19, glibc 2.8
	  and gdb 6.8 and kernel headers 2.6.30. It has support for
	  the following variants:
            - ARMv5T, little endian, soft-float, glibc
            - ARMv4T, little endian, soft-float, glibc
            - ARMv7-A, Thumb 2, little endian, soft-float, glibc

config BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_MIPS201103
	bool "Sourcery CodeBench MIPS 2011.03"
	depends on BR2_mips || BR2_mipsel
	select BR2_TOOLCHAIN_EXTERNAL_GLIBC
	select BR2_INSTALL_LIBSTDCPP
	help
	  Sourcery CodeBench toolchain for the MIPS architecture, from
	  Mentor Graphics. It uses gcc 4.5.2, binutils 2.20.51, glibc
	  2.13, uClibc 0.9.30 and gdb 7.2.50, kernel headers
	  2.6.38. It has support for the following variants:
            - MIPS32 O32 big endian glibc
            - MIPS32 O32 little endian glibc
            - MIPS32 big endian soft float glibc
            - MIPS32 little endian soft float glibc
            - MIPS32 big endian microMIPS glibc
            - MIPS32 little endian microMIPS glibc
            - MIPS32 big endian soft float microMIPS glibc
            - MIPS32 little endian soft float microMIPS glibc
            - MIPS32 big endian uclibc
            - MIPS32 little endian uclibc
            - MIPS32 big endian soft float uclibc
            - MIPS32 little endian soft float uclibc

config BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_MIPS44
	bool "Sourcery CodeBench MIPS 4.4"
	depends on BR2_mips || BR2_mipsel
	select BR2_TOOLCHAIN_EXTERNAL_GLIBC
	select BR2_INSTALL_LIBSTDCPP
	help
	  Sourcery CodeBench toolchain for the MIPS architecture, from
	  Mentor Graphics. It uses gcc 4.4.1, binutils 2.19, glibc
	  2.11, uClibc 0.9.30 and gdb 7.0, kernel headers 2.6.32. It
	  has support for the following variants:
            - MIPS32 O32 big endian glibc
            - MIPS32 O32 little endian glibc
            - MIPS32 big endian soft float glibc
            - MIPS32 little endian soft float glibc
            - MIPS32 big endian microMIPS glibc
            - MIPS32 little endian microMIPS glibc
            - MIPS32 big endian soft float microMIPS glibc
            - MIPS32 little endian soft float microMIPS glibc
            - MIPS32 big endian uclibc
            - MIPS32 little endian uclibc
            - MIPS32 big endian soft float uclibc
            - MIPS32 little endian soft float uclibc

config BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_POWERPC201009
	bool "Sourcery CodeBench PowerPC 2010.09"
	depends on BR2_powerpc
	select BR2_TOOLCHAIN_EXTERNAL_GLIBC
	select BR2_INSTALL_LIBSTDCPP
	help
	  Sourcery CodeBench toolchain for the PowerPC architecture,
	  from Sourcery CodeBench. It uses gcc 4.5.1, binutils 2.20,
	  glibc 2.11, gdb 7.2.50 and kernel headers 2.6.35.2. It has
	  support for the following variants:
            - 603 glibc, 32 bits
            - 603 soft float glibc, 32 bits
            - e600 altivec glibc, 32 bits
            - e500v1 glibc, 32 bits
            - e500v2 glibc, 32 bits
            - e500mc glibc, 32 bits
            - 970 glibc hard-float, 64 bits

config BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_SH201103
	bool "Sourcery CodeBench SH 2011.03"
	depends on BR2_sh4a || BR2_sh4aeb
	select BR2_TOOLCHAIN_EXTERNAL_GLIBC
	select BR2_INSTALL_LIBSTDCPP
	help
	  Sourcery CodeBench toolchain for the SuperH architecture,
	  from Mentor Graphics. It uses gcc 4.5.2, binutils 2.20,
	  glibc 2.13, uClibc 0.9.30, gdb 7.2.50 and kernel headers
	  2.6.38. It has support for the following variants:
            - SH4A, glibc, little endian
            - SH4A, glibc, big endian
            - SH4A, uClibc, little endian
            - SH4A, uClibc, big endian

config BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_SH201009
	bool "Sourcery CodeBench SH 2010.09"
	depends on BR2_sh4a || BR2_sh4aeb
	select BR2_TOOLCHAIN_EXTERNAL_GLIBC
	select BR2_INSTALL_LIBSTDCPP
	help
	  Sourcery CodeBench toolchain for the SuperH architecture,
	  from Mentor Graphics. It uses gcc 4.5.1, binutils 2.20,
	  glibc 2.11, uClibc 0.9.30, gdb 7.2.50 and kernel headers
	  2.6.35.2. It has support for the following variants:
            - SH4A, glibc, little endian
            - SH4A, glibc, big endian
            - SH4A, uClibc, little endian
            - SH4A, uClibc, big endian

config BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_SH2A_201103
	bool "Sourcery CodeBench SH 2011.03"
	depends on BR2_sh2a
	select BR2_TOOLCHAIN_EXTERNAL_UCLIBC
	select BR2_LARGEFILE
	select BR2_INET_RPC
	select BR2_USE_WCHAR
	select BR2_TOOLCHAIN_HAS_THREADS
	select BR2_TOOLCHAIN_HAS_THREADS_DEBUG
	select BR2_INSTALL_LIBSTDCPP
	help
	  Sourcery CodeBench toolchain for the SuperH architecture,
	  from Mentor Graphics. It uses gcc 4.5.2, binutils 2.20,
	  uClibc 0.9.30, gdb 7.2.50 and kernel headers 2.6.38. It has
	  support for the following variants:
            - SH2A, uClibc, big endian

config BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_SH2A_201009
	bool "Sourcery CodeBench SH 2010.09"
	depends on BR2_sh2a
	select BR2_TOOLCHAIN_EXTERNAL_UCLIBC
	select BR2_LARGEFILE
	select BR2_INET_RPC
	select BR2_USE_WCHAR
	select BR2_TOOLCHAIN_HAS_THREADS
	select BR2_TOOLCHAIN_HAS_THREADS_DEBUG
	select BR2_INSTALL_LIBSTDCPP
	help
	  Sourcery CodeBench toolchain for the SuperH architecture,
	  from Mentor Graphics. It uses gcc 4.5.1, binutils 2.20,
	  uClibc 0.9.30, gdb 7.2.50 and kernel headers 2.6.35.2. It
	  has support for the following variants:
            - SH2A, uClibc, big endian

config BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_X86_201009
	bool "Sourcery CodeBench x86/x86_64 2010.09"
	depends on BR2_i386 || BR2_x86_64
	select BR2_TOOLCHAIN_EXTERNAL_GLIBC
	select BR2_INSTALL_LIBSTDCPP
	help
	  Sourcery CodeBench toolchain for the x86/x86_64
	  architectures, from Mentor Graphics. It uses gcc 4.5.1,
	  binutils 2.20, glibc 2.11, gdb 7.2.50 and kernel headers
	  2.6.35.2. It has support for the following variants:
	    - Intel Pentium 4, glibc, 32 bits
            - Intel Atom, glibc, 32 bits
            - Intel Xeon, glibc, 64 bits
            - Intel Core 2, glibc, 64 bits

config BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX_2010RC1
	bool "Blackfin.uclinux.org 2010RC1"
	depends on BR2_bfin
	select BR2_TOOLCHAIN_EXTERNAL_UCLIBC
	select BR2_INSTALL_LIBSTDCPP
	select BR2_LARGEFILE
	select BR2_INET_IPV6
	select BR2_INET_RPC
	select BR2_USE_WCHAR
	select BR2_TOOLCHAIN_HAS_THREADS
	select BR2_TOOLCHAIN_HAS_THREADS_DEBUG
	help
	  Toolchain for the Blackfin architecture, from
	  http://blackfin.uclinux.org.

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

endchoice

config BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD
	bool "Download toolchain automatically"
	default y
	depends on !BR2_TOOLCHAIN_EXTERNAL_CUSTOM
	help
	  When enabled, Buildroot will automatically download and
	  install the selected external toolchain. When disabled,
	  Buildroot will use a pre-installed toolchain.

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

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 "arm-none-linux-gnueabi" if BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_ARM2009Q1
	default "arm-none-linux-gnueabi" if BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_ARM2009Q3
	default "arm-none-linux-gnueabi" if BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_ARM2010Q1
	default "arm-none-linux-gnueabi" if BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_ARM201009
	default "arm-none-linux-gnueabi" if BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_ARM201103
	default "mips-linux-gnu"         if BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_MIPS44
	default "mips-linux-gnu"         if BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_MIPS201103
	default "powerpc-linux-gnu"      if BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_POWERPC201009
	default "sh-linux-gnu"           if BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_SH201009
	default "sh-linux-gnu"           if BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_SH201103
	default "sh-uclinux"             if BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_SH2A_201009
	default "sh-uclinux"             if BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_SH2A_201103
	default "i686-pc-linux-gnu"	 if BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_X86_201009
	default "bfin-uclinux"		 if BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX_2010RC1 && !BR2_BFIN_FDPIC
	default "bfin-linux-uclibc"	 if BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX_2010RC1 && BR2_BFIN_FDPIC
	default $(BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX) \
					 if BR2_TOOLCHAIN_EXTERNAL_CUSTOM

config BR2_TOOLCHAIN_EXTERNAL_GLIBC
	bool
	select BR2_LARGEFILE
	select BR2_INET_IPV6
	select BR2_INET_RPC
	select BR2_USE_WCHAR
	select BR2_ENABLE_LOCALE
	select BR2_TOOLCHAIN_HAS_THREADS
	select BR2_TOOLCHAIN_HAS_THREADS_DEBUG
	select BR2_TOOLCHAIN_HAS_SHADOW_PASSWORDS

config BR2_TOOLCHAIN_EXTERNAL_UCLIBC
	bool

if BR2_TOOLCHAIN_EXTERNAL_CUSTOM

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

config BR2_TOOLCHAIN_EXTERNAL_CUSTOM_GLIBC
	bool "glibc"
	select BR2_TOOLCHAIN_EXTERNAL_GLIBC

endchoice

if BR2_TOOLCHAIN_EXTERNAL_CUSTOM_UCLIBC

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

config BR2_TOOLCHAIN_EXTERNAL_INET_IPV6
	bool "Toolchain has IPv6 support?"
	select BR2_INET_IPV6
	help
	  Select this option if your external toolchain supports
	  IPv6. 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_INET_RPC
	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_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.

config BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS_DEBUG
	bool "Toolchain has threads debugging support?"
	depends on BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS
	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.

endif # BR2_TOOLCHAIN_EXTERNAL_CUSTOM_UCLIBC

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

endif # BR2_TOOLCHAIN_EXTERNAL

