comment "GCC Options"

config BR2_GCC_NEEDS_MPC
	bool

config BR2_GCC_SUPPORTS_GRAPHITE
	bool

choice
	prompt "GCC compiler Version"
	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_X if BR2_microblaze || BR2_powerpc64le
	default BR2_GCC_VERSION_4_5_X if BR2_bfin
	default BR2_GCC_VERSION_4_8_X
	help
	  Select the version of gcc you wish to use.

	config BR2_GCC_VERSION_4_2_2_AVR32_2_1_5
		bool "gcc 4.2.2-avr32-2.1.5"
		# Only supported architecture
		depends on BR2_avr32

	config BR2_GCC_VERSION_4_5_X
		bool "gcc 4.5.x"
		# Broken or unsupported architectures
		depends on !BR2_microblaze && !BR2_aarch64 && !BR2_arc \
			&& !BR2_avr32  && !BR2_powerpc64le
		# Broken or unsupported ARM cores
		depends on !BR2_cortex_a7 && !BR2_cortex_a12 && \
			!BR2_cortex_a15 && !BR2_fa526 && !BR2_pj4
		# Broken or unsupported PPC cores
		depends on !BR2_powerpc_e5500 && !BR2_powerpc_e6500 && \
			!BR2_powerpc_power8
		# SPARC -mcpu=leon3 appeared in gcc 4.8.x
		depends on !BR2_sparc_leon3
		# Broken or unsupported X86 cores
		depends on !BR2_x86_corei7 && !BR2_x86_jaguar
		# ARM EABIhf support appeared in gcc 4.6
		depends on !BR2_ARM_EABIHF
		# musl patches only for gcc 4.7+
		depends on !BR2_TOOLCHAIN_BUILDROOT_MUSL
		select BR2_GCC_NEEDS_MPC

	config BR2_GCC_VERSION_4_7_X
		bool "gcc 4.7.x"
		# Broken or unsupported architectures
		depends on !BR2_microblaze && !BR2_aarch64 && !BR2_arc \
			&& !BR2_avr32 && !BR2_bfin && !BR2_powerpc64le
		# Broken or unsupported ARM cores
		depends on !BR2_cortex_a12 && !BR2_pj4
		# Broken or unsupported PPC cores
		depends on !BR2_powerpc_e5500 && !BR2_powerpc_e6500 && \
			!BR2_powerpc_power8
		# SPARC -mcpu=leon3 appeared in gcc 4.8.x
		depends on !BR2_sparc_leon3
		# Broken or unsupported x86 cores
		depends on !BR2_x86_jaguar
		select BR2_GCC_NEEDS_MPC

	config BR2_GCC_VERSION_4_8_X
		bool "gcc 4.8.x"
		# Broken or unsupported architectures
		depends on !BR2_microblaze && !BR2_arc && !BR2_avr32 \
			&& !BR2_bfin && !BR2_powerpc64le
		# Broken or unsupported ARM cores
		depends on !BR2_cortex_a12
		# Broken or unsupported PPC cores
		depends on !BR2_powerpc_power8
		select BR2_GCC_NEEDS_MPC
		select BR2_GCC_SUPPORTS_GRAPHITE

	config BR2_GCC_VERSION_4_8_ARC
		bool "gcc 4.8-arc"
		# Only supported architecture
		depends on BR2_arc
		select BR2_GCC_NEEDS_MPC

	config BR2_GCC_VERSION_4_9_X
		bool "gcc 4.9.x"
		# Broken or unsupported architectures
		depends on !BR2_arc && !BR2_avr32 && !BR2_bfin
		# PR60102 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60102
		select BR2_GCC_NEEDS_MPC
		select BR2_GCC_SUPPORTS_GRAPHITE

endchoice

config BR2_GCC_SUPPORTS_FINEGRAINEDMTUNE
	bool
	default y if !BR2_GCC_VERSION_4_2_2_AVR32_2_1_5

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.5.4"     if BR2_GCC_VERSION_4_5_X
	default "4.7.4"     if BR2_GCC_VERSION_4_7_X
	default "4.8.4"     if BR2_GCC_VERSION_4_8_X
	default "4.9.2"     if BR2_GCC_VERSION_4_9_X
	default "arc-2014.12" if BR2_GCC_VERSION_4_8_ARC

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_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
	depends on !BR2_GCC_VERSION_4_9_X
	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.

config BR2_GCC_ENABLE_GRAPHITE
	bool "Enable graphite support"
	depends on BR2_GCC_SUPPORTS_GRAPHITE
	help
	  This option enables the graphite optimizations in the
	  compiler.
