comment "GCC Options"

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

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

config BR2_GCC_VERSION_CSKY
	bool "gcc csky"
	# Only supported architecture
	depends on BR2_csky
	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_5_X
	bool "gcc 5.x"
	depends on !BR2_ARCH_NEEDS_GCC_AT_LEAST_6
	# Broken or unsupported architectures
	depends on !BR2_arc
	depends on !BR2_or1k
	# musl on ppc64 and mips64 unsupported
	depends on !(BR2_TOOLCHAIN_USES_MUSL && (BR2_powerpc64 || BR2_powerpc64le))
	depends on !(BR2_TOOLCHAIN_USES_MUSL && (BR2_mips64 || BR2_mips64el))
	# glibc >= 2.26 needs gcc >= 6.2
	depends on !(BR2_TOOLCHAIN_USES_GLIBC && BR2_powerpc64le)
	select BR2_TOOLCHAIN_GCC_AT_LEAST_5

config BR2_GCC_VERSION_7_X
	bool "gcc 7.x"
	depends on !BR2_ARCH_NEEDS_GCC_AT_LEAST_8
	# Broken or unsupported architectures
	depends on !BR2_or1k
	select BR2_TOOLCHAIN_GCC_AT_LEAST_7

config BR2_GCC_VERSION_8_X
	bool "gcc 8.x"
	depends on !BR2_ARCH_NEEDS_GCC_AT_LEAST_9
	# Broken or unsupported architectures
	depends on !BR2_or1k
	# powerpc spe support has been deprecated since gcc 8.x.
	# https://gcc.gnu.org/ml/gcc/2018-04/msg00102.html
	depends on !BR2_powerpc_SPE
	select BR2_TOOLCHAIN_GCC_AT_LEAST_8

config BR2_GCC_VERSION_9_X
	bool "gcc 9.x"
	# powerpc spe support has been deprecated since gcc 8.x.
	# https://gcc.gnu.org/ml/gcc/2018-04/msg00102.html
	depends on !BR2_powerpc_SPE
	# C-SKY sk610 needs abiv1, which is not supported in
	# upstream gcc
	depends on !BR2_ck610
	select BR2_TOOLCHAIN_GCC_AT_LEAST_9

endchoice

# libcilkrts was introduced in gcc 4.9 and removed in gcc 8.x
config BR2_GCC_SUPPORTS_LIBCILKRTS
	bool
	default y if !BR2_TOOLCHAIN_GCC_AT_LEAST_8

config BR2_GCC_VERSION
	string
	default "5.5.0"     if BR2_GCC_VERSION_5_X
	default "7.4.0"     if BR2_GCC_VERSION_7_X
	default "8.3.0"     if BR2_GCC_VERSION_8_X
	default "9.1.0"     if BR2_GCC_VERSION_9_X
	default "arc-2019.03-release" if BR2_GCC_VERSION_ARC
	default "or1k-musl-5.4.0-20170218" if BR2_GCC_VERSION_OR1K
	default "48152afb96c59733d5bc79e3399bb7b3d4b44266" if BR2_GCC_VERSION_CSKY

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
	select BR2_TOOLCHAIN_HAS_OPENMP
	help
	  Enable OpenMP support for the compiler

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

comment "graphite support needs gcc >= 5.x"
	depends on !BR2_TOOLCHAIN_GCC_AT_LEAST_5
