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_8_ARC if BR2_arc
	default BR2_GCC_VERSION_4_9_X
	help
	  Select the version of gcc you wish to use.

	config BR2_GCC_VERSION_4_5_X
		bool "gcc 4.5.x"
		depends on BR2_DEPRECATED_SINCE_2015_05
		# Broken or unsupported architectures
		depends on !BR2_microblaze && !BR2_aarch64 && !BR2_arc \
			&& !BR2_powerpc64le && !BR2_nios2
		# 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 && !BR2_x86_steamroller
		# 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
		select BR2_TOOLCHAIN_GCC_AT_LEAST_4_5

	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_powerpc64le && !BR2_nios2
		# 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 && !BR2_x86_steamroller
		select BR2_GCC_NEEDS_MPC
		select BR2_TOOLCHAIN_GCC_AT_LEAST_4_7

	config BR2_GCC_VERSION_4_8_X
		bool "gcc 4.8.x"
		# Broken or unsupported architectures
		depends on !BR2_microblaze && !BR2_arc \
			&& !BR2_powerpc64le && !BR2_nios2
		# Broken or unsupported ARM cores
		depends on !BR2_cortex_a12
		# Broken or unsupported PPC cores
		depends on !BR2_powerpc_power8
		# gcc-4.8.x + binutils-2.25 is broken for MIPS
		depends on !((BR2_mips || BR2_mipsel || BR2_mips64 || BR2_mips64el) && BR2_BINUTILS_VERSION_2_25_X)
		select BR2_GCC_NEEDS_MPC
		select BR2_GCC_SUPPORTS_GRAPHITE
		select BR2_TOOLCHAIN_GCC_AT_LEAST_4_8

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


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

	config BR2_GCC_VERSION_5_X
		bool "gcc 5.x"
		# Broken or unsupported architectures
		depends on !BR2_arc
		select BR2_GCC_NEEDS_MPC
		select BR2_GCC_SUPPORTS_GRAPHITE
		select BR2_TOOLCHAIN_GCC_AT_LEAST_5

endchoice

config BR2_GCC_SUPPORTS_FINEGRAINEDMTUNE
	bool
	default y

config BR2_GCC_VERSION
	string
	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.5"     if BR2_GCC_VERSION_4_8_X
	default "4.9.3"     if BR2_GCC_VERSION_4_9_X
	default "5.2.0"     if BR2_GCC_VERSION_5_X
	default "arc-2015.06" 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
	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.

config BR2_TOOLCHAIN_BUILDROOT_FORTRAN
	bool "Enable Fortran support"
	help
	  Enable this option if you want your toolchain to support the
	  Fortran language and you want Fortran libraries to be
	  installed on your target system.

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_LTO
	bool "Enable compiler link-time-optimization support"
	select BR2_BINUTILS_ENABLE_LTO
	help
	  This option enables link-time optimization (LTO) support in
	  gcc.

config BR2_GCC_ENABLE_OPENMP
	bool "Enable compiler OpenMP support"
	depends on !BR2_PTHREADS_NONE && !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_ARM_INSTRUCTIONS_THUMB && !BR2_powerpc_SPE
	depends on !BR2_GCC_VERSION_4_9_X
	depends on !BR2_GCC_VERSION_5_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.
