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_9_X
	help
	  Select the version of gcc you wish to use.

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

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_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"
	depends on !BR2_ARCH_NEEDS_GCC_AT_LEAST_10
	# 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. C-SKY gcc upstream support not tested
	# with upstream binutils and glibc.
	depends on !BR2_csky
	select BR2_TOOLCHAIN_GCC_AT_LEAST_9

config BR2_GCC_VERSION_10_X
	bool "gcc 10.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. C-SKY gcc upstream support not tested
	# with upstream binutils and glibc.
	depends on !BR2_csky
	select BR2_TOOLCHAIN_GCC_AT_LEAST_10

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_SUPPORTS_DLANG
	bool
	default y if BR2_aarch64
	default y if BR2_arm
	default y if BR2_i386
	default y if BR2_mips || BR2_mipsel
	default y if BR2_mips64 || BR2_mips64el
	default y if BR2_powerpc || BR2_powerpc64 || BR2_powerpc64le
	default y if BR2_x86_64
	default y if BR2_riscv && !BR2_RISCV_64
	depends on BR2_TOOLCHAIN_GCC_AT_LEAST_9
	depends on BR2_TOOLCHAIN_USES_GLIBC

config BR2_GCC_VERSION
	string
	default "7.5.0"     if BR2_GCC_VERSION_7_X
	default "8.4.0"     if BR2_GCC_VERSION_8_X
	default "9.3.0"     if BR2_GCC_VERSION_9_X
	default "10.2.0"    if BR2_GCC_VERSION_10_X
	default "arc-2020.03-release" if BR2_GCC_VERSION_ARC
	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_TOOLCHAIN_BUILDROOT_DLANG
	bool "Enable D language support"
	depends on BR2_GCC_SUPPORTS_DLANG
	select BR2_TOOLCHAIN_HAS_DLANG
	help
	  Enable this option if you want your toolchain to support the
	  D language and you want D 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
