comment "GCC Options"

config BR2_GCC_NEEDS_MPC
	bool

choice
	prompt "GCC compiler Version"
	default BR2_GCC_VERSION_4_4_X if BR2_sparc_sparchfleon || BR2_sparc_sparchfleonv8 || BR2_sparc_sparcsfleon || BR2_sparc_sparcsfleonv8
	default BR2_GCC_VERSION_4_2_2_AVR32_2_1_5 if BR2_avr32
	default BR2_GCC_VERSION_4_8_ARC if BR2_arc
	default BR2_GCC_VERSION_4_9_MICROBLAZE if BR2_microblaze
	default BR2_GCC_VERSION_4_5_X if BR2_bfin
	default BR2_GCC_VERSION_4_7_X
	help
	  Select the version of gcc you wish to use.

	config BR2_GCC_VERSION_4_2_2_AVR32_2_1_5
		depends on BR2_avr32
		bool "gcc 4.2.2-avr32-2.1.5"

	config BR2_GCC_VERSION_4_3_X
		depends on !BR2_microblaze && !BR2_arc && !BR2_avr32 && !BR2_sparc_sparchfleon && !BR2_sparc_sparchfleonv8 && !BR2_sparc_sparcsfleon && !BR2_sparc_sparcsfleonv8 && !BR2_cortex_a5 && !BR2_cortex_a7 && !BR2_cortex_a8 && !BR2_cortex_a9 && !BR2_cortex_a15 && !BR2_x86_atom && !BR2_x86_jaguar && !BR2_powerpc_e300c2 && !BR2_powerpc_e300c3 && !BR2_powerpc_e500mc && !BR2_powerpc_464 && !BR2_powerpc_464fp && !BR2_powerpc_476 && !BR2_powerpc_476fp && !BR2_fa526 && !BR2_pj4
		depends on !BR2_ARM_EABIHF
		bool "gcc 4.3.x"

	config BR2_GCC_VERSION_4_4_X
		depends on !BR2_microblaze && !BR2_arc && !BR2_avr32 && !BR2_cortex_a5 && !BR2_cortex_a7 && !BR2_cortex_a15 && !BR2_x86_atom && !BR2_x86_jaguar && !BR2_powerpc_476 && !BR2_powerpc_476fp && !BR2_fa526 && !BR2_pj4
		bool "gcc 4.4.x"
		# ARM EABIhf support appeared in gcc 4.6
		depends on !BR2_ARM_EABIHF
		# VFPv4 support appeared in gcc 4.5
		depends on !BR2_ARM_FPU_VFPV4 && !BR2_ARM_FPU_VFPV4D16

	config BR2_GCC_VERSION_4_5_X
		depends on !BR2_microblaze && !BR2_arc && !BR2_avr32 && !BR2_cortex_a7 && !BR2_cortex_a15 && !BR2_x86_jaguar && !BR2_sparc_sparchfleon && !BR2_sparc_sparchfleonv8 && !BR2_sparc_sparcsfleon && !BR2_sparc_sparcsfleonv8 && !BR2_fa526 && !BR2_pj4
		select BR2_GCC_NEEDS_MPC
		# ARM EABIhf support appeared in gcc 4.6
		depends on !BR2_ARM_EABIHF
		bool "gcc 4.5.x"

	config BR2_GCC_VERSION_4_6_X
		depends on !BR2_microblaze && !BR2_arc && !BR2_avr32 && !BR2_bfin && !BR2_cortex_a7 && !BR2_x86_jaguar && !BR2_sparc_sparchfleon && !BR2_sparc_sparchfleonv8 && !BR2_sparc_sparcsfleon && !BR2_sparc_sparcsfleonv8 && !BR2_pj4
		select BR2_GCC_NEEDS_MPC
		bool "gcc 4.6.x"

	config BR2_GCC_VERSION_4_7_X
		depends on !BR2_microblaze && !BR2_arc && !BR2_avr32 && !BR2_bfin && !BR2_x86_jaguar && !BR2_sparc_sparchfleon && !BR2_sparc_sparchfleonv8 && !BR2_sparc_sparcsfleon && !BR2_sparc_sparcsfleonv8 && !BR2_pj4
		select BR2_GCC_NEEDS_MPC
		bool "gcc 4.7.x"

	config BR2_GCC_VERSION_4_8_X
		depends on !BR2_microblaze && !BR2_arc && !BR2_avr32 && !BR2_bfin && !BR2_sparc_sparchfleon && !BR2_sparc_sparchfleonv8 && !BR2_sparc_sparcsfleon && !BR2_sparc_sparcsfleonv8
		select BR2_GCC_NEEDS_MPC
		bool "gcc 4.8.x"

	config BR2_GCC_VERSION_4_8_ARC
		depends on BR2_arc
		select BR2_GCC_NEEDS_MPC
		bool "gcc 4.8-arc"

	config BR2_GCC_VERSION_4_9_MICROBLAZE
		depends on BR2_microblaze
		select BR2_GCC_NEEDS_MPC
		bool "gcc 4.9-microblaze"

	config BR2_GCC_VERSION_SNAP
		depends on !BR2_microblaze && !BR2_arc && !BR2_avr32 && !BR2_sparc_sparchfleon && !BR2_sparc_sparchfleonv8 && !BR2_sparc_sparcsfleon && !BR2_sparc_sparcsfleonv8
		select BR2_GCC_NEEDS_MPC
		bool "gcc snapshot"
endchoice

config BR2_GCC_SUPPORTS_FINEGRAINEDMTUNE
	bool
	default y if !BR2_GCC_VERSION_4_2_2_AVR32_2_1_5

config BR2_GCC_SNAP_DATE
	string "GCC snapshot date"
	default "4.8-20120429"
	depends on BR2_GCC_VERSION_SNAP
	help
	  Enter snapshot date to use for gcc.
	  Format is: A.B-YYYYMMDD

	  A is GCC major version, for example 4.
	  B is GCC minor version, for example 7.
	  YYYYMMDD is snapshot date, for example 20110430.

	  This way we'd get version 4.7-20110430

config BR2_GCC_VERSION
	string
	default "4.2.2-avr32-2.1.5" if BR2_GCC_VERSION_4_2_2_AVR32_2_1_5
	default "4.3.6"     if BR2_GCC_VERSION_4_3_X
	default "4.4.7"     if BR2_GCC_VERSION_4_4_X
	default "4.5.4"     if BR2_GCC_VERSION_4_5_X
	default "4.6.4"     if BR2_GCC_VERSION_4_6_X
	default "4.7.3"     if BR2_GCC_VERSION_4_7_X
	default "4.8.2"     if BR2_GCC_VERSION_4_8_X
	default "7466697995233cc3aab5b9427bf843e3c7fabd80" if BR2_GCC_VERSION_4_8_ARC
	default "b93bb009e021aba64dd4b8cdb0bbc5a176c55543" if BR2_GCC_VERSION_4_9_MICROBLAZE
	default BR2_GCC_SNAP_DATE if BR2_GCC_VERSION_SNAP

config BR2_EXTRA_GCC_CONFIG_OPTIONS
	string "Additional gcc options"
	default ""
	help
	  Any additional gcc configure options you may want to
	  include. Those options are applied for all of the gcc
	  initial, gcc intermediate and gcc final passes.

config BR2_TOOLCHAIN_BUILDROOT_CXX
	bool "Enable C++ support"
	select BR2_INSTALL_LIBSTDCPP
	depends on !(BR2_GCC_VERSION_4_2_2_AVR32_2_1_5 && \
		     BR2_TOOLCHAIN_BUILDROOT_LOCALE)
	help
	  Enable this option if you want your toolchain to support the
	  C++ language and you want C++ libraries to be installed on
	  your target system.

comment "C++ support broken in uClibc with locale enabled with gcc 4.2"
	depends on BR2_GCC_VERSION_4_2_2_AVR32_2_1_5 && BR2_TOOLCHAIN_BUILDROOT_LOCALE

config BR2_INSTALL_OBJC
	bool "Enable Objective-C support"
	depends on !BR2_avr32
	depends on BR2_DEPRECATED_SINCE_2013_11
	help
	  Enable the support for the Objective-C language in the
	  cross-compiler, and install the Objective-C runtime to the
	  target.

config BR2_INSTALL_FORTRAN
	bool "Enable Fortran support"
	depends on !BR2_avr32
	depends on BR2_DEPRECATED_SINCE_2013_11
	select BR2_PACKAGE_LIBMPFR
	help
	  Enable the support for the Fortran language in the
	  cross-compiler, and install the Fortran runtime to the
	  target.

config BR2_GCC_ENABLE_TLS
	bool "Enable compiler tls support" if BR2_TOOLCHAIN_BUILDROOT_UCLIBC
	default y
	depends on BR2_PTHREADS_NATIVE || BR2_TOOLCHAIN_BUILDROOT_EGLIBC || BR2_TOOLCHAIN_BUILDROOT_GLIBC
	help
	  Enable the compiler to generate code for accessing
	  thread local storage variables

config BR2_GCC_ENABLE_OPENMP
	bool "Enable compiler OpenMP support"
	depends on !BR2_PTHREADS_NONE && !BR2_avr32 && !BR2_arc && !BR2_microblaze
	help
	  Enable OpenMP support for the compiler

config BR2_GCC_ENABLE_LIBMUDFLAP
	bool "Enable libmudflap support"
	# There are architectures, or specific configurations for
	# which mudflap is not supported.
	depends on !BR2_avr32 && !BR2_bfin && !BR2_ARM_INSTRUCTIONS_THUMB && !BR2_powerpc_SPE
	help
	  libmudflap is a gcc library used for the mudflap pointer
	  debugging functionality. It is only needed if you intend to
	  use the -fmudflap gcc flag.

	  See http://gcc.gnu.org/wiki/Mudflap_Pointer_Debugging and
	  the help of the gcc -fmudflap option for more details.

	  If you're unsure, leave this option disabled.
