comment "GCC Options"

choice
	prompt "GCC compiler Version"
	default BR2_GCC_VERSION_ARC if BR2_arc
	default BR2_GCC_VERSION_OR1K if BR2_or1k
	default BR2_GCC_VERSION_5_X
	help
	  Select the version of gcc you wish to use.

config BR2_GCC_VERSION_4_8_X
	bool "gcc 4.8.x"
	# Broken or unsupported architectures
	depends on !BR2_microblaze && !BR2_arc && !BR2_or1k \
		&& !BR2_powerpc64le && !BR2_nios2 && !BR2_bfin
	# Broken or unsupported ARM cores
	depends on !BR2_cortex_a12 && !BR2_cortex_a17 && !BR2_ARM_CPU_ARMV8
	# Broken or unsupported PPC cores
	depends on !BR2_powerpc_power8
	# Unsupported MIPS cores
	depends on !BR2_mips_interaptiv
	# 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)
	# Unsupported for MIPS R5
	depends on !BR2_MIPS_CPU_MIPS32R5 && !BR2_MIPS_CPU_MIPS64R5
	# Unsupported for MIPS R6
	depends on !BR2_MIPS_CPU_MIPS32R6 && !BR2_MIPS_CPU_MIPS64R6
	# musl ppc64 unsupported
	depends on !(BR2_TOOLCHAIN_USES_MUSL && (BR2_powerpc64 || BR2_powerpc64le))
	# musl mips64 unsupported
	depends on !(BR2_TOOLCHAIN_USES_MUSL && (BR2_mips64 || BR2_mips64el))
	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_8

config BR2_GCC_VERSION_ARC
	bool "gcc arc (6.x)"
	# Only supported architecture
	depends on BR2_arc
	select BR2_TOOLCHAIN_GCC_AT_LEAST_6

config BR2_GCC_VERSION_OR1K
	bool "gcc or1k (5.x)"
	# Only supported architecture
	depends on BR2_or1k
	select BR2_TOOLCHAIN_GCC_AT_LEAST_5

config BR2_GCC_VERSION_4_9_X
	bool "gcc 4.9.x"
	# Broken or unsupported architectures
	depends on !BR2_arc && !BR2_bfin && !BR2_or1k
	# Broken or unsupported ARM cores
	depends on !BR2_cortex_a17 && !BR2_cortex_a72
	# Unsupported MIPS cores
	depends on !BR2_mips_interaptiv
	# Unsupported for MIPS R5
	depends on !BR2_MIPS_CPU_MIPS32R5 && !BR2_MIPS_CPU_MIPS64R5
	# Unsupported for MIPS R6
	depends on !BR2_MIPS_CPU_MIPS32R6 && !BR2_MIPS_CPU_MIPS64R6
	# musl microblaze unsupported
	depends on !(BR2_TOOLCHAIN_USES_MUSL && (BR2_microblazeel || BR2_microblazebe))
	# musl ppc64 unsupported
	depends on !(BR2_TOOLCHAIN_USES_MUSL && (BR2_powerpc64 || BR2_powerpc64le))
	# musl mips64 unsupported
	depends on !(BR2_TOOLCHAIN_USES_MUSL && (BR2_mips64 || BR2_mips64el))
	# PR60102 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60102
	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 && !BR2_bfin && !BR2_or1k
	# musl ppc64 unsupported
	depends on !(BR2_TOOLCHAIN_USES_MUSL && (BR2_powerpc64 || BR2_powerpc64le))
	# Unsupported MIPS cores
	depends on !BR2_mips_interaptiv && !BR2_mips_m5150 && \
		!BR2_mips_m6250 && !BR2_mips_i6400 && !BR2_mips_p6600
	# musl mips64 unsupported
	depends on !(BR2_TOOLCHAIN_USES_MUSL && (BR2_mips64 || BR2_mips64el))
	select BR2_TOOLCHAIN_GCC_AT_LEAST_5

config BR2_GCC_VERSION_6_X
	bool "gcc 6.x"
	# Broken or unsupported architectures
	depends on !BR2_arc
	depends on !BR2_microblaze
	depends on !BR2_or1k
	# Unsupported MIPS cores
	depends on !BR2_mips_m6250 && !BR2_mips_p6600
	select BR2_TOOLCHAIN_GCC_AT_LEAST_6

endchoice

# Indicates if GCC for architecture supports --with-{arch,cpu,..}  to
# set default CFLAGS, otherwise values will be used by toolchain
# wrapper.
config BR2_GCC_ARCH_HAS_CONFIGURABLE_DEFAULTS
	bool
	default y if !BR2_bfin

config BR2_GCC_SUPPORTS_FINEGRAINEDMTUNE
	bool
	default y

config BR2_GCC_VERSION
	string
	default "4.8.5"     if BR2_GCC_VERSION_4_8_X
	default "4.9.4"     if BR2_GCC_VERSION_4_9_X
	default "5.4.0"     if BR2_GCC_VERSION_5_X
	default "6.3.0"     if BR2_GCC_VERSION_6_X
	default "arc-2017.03-rc1" if BR2_GCC_VERSION_ARC
	default "musl-5.4.0" if BR2_GCC_VERSION_OR1K

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.

comment "Fortran support needs a toolchain w/ wchar"
	depends on BR2_TOOLCHAIN_HAS_LIBQUADMATH
	depends on !BR2_USE_WCHAR # libquadmath

config BR2_TOOLCHAIN_BUILDROOT_FORTRAN
	bool "Enable Fortran support"
	# on architecture building libquadmath, wchar is required
	depends on !BR2_TOOLCHAIN_HAS_LIBQUADMATH || \
		(BR2_TOOLCHAIN_HAS_LIBQUADMATH && BR2_USE_WCHAR)
	select BR2_TOOLCHAIN_HAS_FORTRAN
	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_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_TOOLCHAIN_GCC_AT_LEAST_4_9
	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"
	help
	  This option enables the graphite optimizations in the
	  compiler.
