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"
	# or1k needs binutils >= 2.32
	depends on !(BR2_or1k && \
		(BR2_BINUTILS_VERSION_2_30_X || BR2_BINUTILS_VERSION_2_31_X))
	# uClibc doesn't build with upstream or1k gcc
	# https://mailman.uclibc-ng.org/pipermail/devel/2019-August/001885.html
	depends on !(BR2_or1k && BR2_TOOLCHAIN_USES_UCLIBC)
	# 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
