comment "GCC Options"

choice
	prompt "GCC compiler Version"
	default BR2_GCC_VERSION_ARC if BR2_GCC_VERSION_4_8_ARC # legacy
	default BR2_GCC_VERSION_ARC if BR2_arc
	default BR2_GCC_VERSION_POWERPC_SPE if BR2_POWERPC_CPU_HAS_SPE
	default BR2_GCC_VERSION_13_X
	help
	  Select the version of gcc you wish to use.

config BR2_GCC_VERSION_ARC
	bool "gcc arc (13.1)"
	# Only supported architecture
	depends on BR2_arc
	select BR2_TOOLCHAIN_GCC_AT_LEAST_13

config BR2_GCC_VERSION_POWERPC_SPE
	bool "gcc powerpc spe"
	# powerpc spe support has been deprecated since gcc 8.x.
	# https://gcc.gnu.org/ml/gcc/2018-04/msg00102.html
	depends on BR2_POWERPC_CPU_HAS_SPE
	select BR2_TOOLCHAIN_GCC_AT_LEAST_8

config BR2_GCC_VERSION_12_X
	bool "gcc 12.x"
	depends on !BR2_ARCH_NEEDS_GCC_AT_LEAST_13
	# powerpc spe support has been deprecated since gcc 8.x.
	# https://gcc.gnu.org/ml/gcc/2018-04/msg00102.html
	depends on !BR2_POWERPC_CPU_HAS_SPE
	# ARC HS48 rel 31 only supported by gcc arc fork.
	depends on !BR2_archs4x_rel31
	select BR2_TOOLCHAIN_GCC_AT_LEAST_12

config BR2_GCC_VERSION_13_X
	bool "gcc 13.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_CPU_HAS_SPE
	select BR2_TOOLCHAIN_GCC_AT_LEAST_13

config BR2_GCC_VERSION_14_X
	bool "gcc 14.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_CPU_HAS_SPE
	select BR2_TOOLCHAIN_GCC_AT_LEAST_14

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
	# "The D front-end is now itself written in D, in order to build GDC, you
	# will need a working GDC compiler (GCC version 9.1 or later)."
	# https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=5fee5ec362f7a243f459e6378fd49dfc89dc9fb5
	depends on !BR2_TOOLCHAIN_GCC_AT_LEAST_12

config BR2_GCC_VERSION
	string
	default "8.4.0"     if BR2_GCC_VERSION_POWERPC_SPE
	default "12.4.0"    if BR2_GCC_VERSION_12_X
	default "13.3.0"    if BR2_GCC_VERSION_13_X
	default "14.2.0"    if BR2_GCC_VERSION_14_X
	default "arc-2023.09-release" if BR2_GCC_VERSION_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.

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)
	# internal compiler error: in gen_reg_rtx, at emit-rtl.cc:1167
	# fixed in gcc 14.x, so disable gcc 12.x/13.x
	depends on !(BR2_microblaze && \
		(BR2_GCC_VERSION_12_X || BR2_GCC_VERSION_13_X))
	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_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
