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_8_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"
	# or1k needs binutils >= 2.32
	depends on !(BR2_or1k && BR2_BINUTILS_VERSION_2_31_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_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_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 "arc-2019.09-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
