menu "Toolchain"

# Invisible option that makes sure the toolchain package always gets
# built
config BR2_TOOLCHAIN
	bool
	default y

# Should be selected for glibc or eglibc
config BR2_TOOLCHAIN_USES_GLIBC
	bool
	select BR2_USE_WCHAR
	select BR2_ENABLE_LOCALE
	select BR2_TOOLCHAIN_HAS_FULL_GETTEXT
	select BR2_TOOLCHAIN_HAS_THREADS
	select BR2_TOOLCHAIN_HAS_THREADS_DEBUG
	select BR2_TOOLCHAIN_HAS_THREADS_NPTL
	select BR2_TOOLCHAIN_HAS_UCONTEXT
	select BR2_TOOLCHAIN_SUPPORTS_PIE

config BR2_TOOLCHAIN_USES_UCLIBC
	bool
	# ucontext is only available for a subset of the supported
	# architectures
	select BR2_TOOLCHAIN_HAS_UCONTEXT if BR2_ARM_CPU_HAS_ARM || BR2_i386 \
		|| BR2_mips || BR2_mipsel || BR2_mips64 || BR2_mips64el \
		|| BR2_sparc || BR2_x86_64
	select BR2_TOOLCHAIN_SUPPORTS_PIE if !BR2_m68k && !BR2_microblaze && !BR2_STATIC_LIBS

config BR2_TOOLCHAIN_USES_MUSL
	bool
	select BR2_USE_WCHAR
	select BR2_ENABLE_LOCALE
	select BR2_TOOLCHAIN_HAS_THREADS
	select BR2_TOOLCHAIN_HAS_THREADS_DEBUG
	select BR2_TOOLCHAIN_HAS_THREADS_NPTL
	select BR2_TOOLCHAIN_HAS_UCONTEXT
	select BR2_TOOLCHAIN_SUPPORTS_PIE if !BR2_STATIC_LIBS

choice
	prompt "Toolchain type"
	help
	  Select whether to use the toolchain provided by buildroot
	  or an external toolchain.

	  Some vendors provide toolchains in binary form, some in
	  source form.

config BR2_TOOLCHAIN_BUILDROOT
	bool "Buildroot toolchain"
	depends on BR2_ARCH_HAS_TOOLCHAIN_BUILDROOT

config BR2_TOOLCHAIN_EXTERNAL
	bool "External toolchain"
	help
	  Select if you want to use an existing cross-compiling
	  toolchain. Buildroot can either download automatically a
	  toolchain, or use an already installed toolchain.

endchoice

source "toolchain/toolchain-buildroot/Config.in"
source "toolchain/toolchain-external/Config.in"

# Generic toolchain options

# we want gdb config in the middle of both source and external
# toolchains, but mconf won't let us source the same file twice,
# so put it here instead
source "package/gdb/Config.in.host"

comment "Toolchain Generic Options"

# https://sourceware.org/bugzilla/show_bug.cgi?id=19615
# Affect toolchains built with binutils 2.26 (fixed in binutils 2.26.1).
config BR2_TOOLCHAIN_HAS_BINUTILS_BUG_19615
	bool

# https://sourceware.org/bugzilla/show_bug.cgi?id=20006
# Affect toolchains built with binutils 2.26 (fixed in binutils 2.26.1).
config BR2_TOOLCHAIN_HAS_BINUTILS_BUG_20006
	bool

# Atomic types can be:
#  - never lock-free
#  - sometimes lock-free
#  - always lock-free
# see https://en.cppreference.com/w/c/atomic/ATOMIC_LOCK_FREE_consts
#
# On most architectures, gcc provides "always lock-free" atomic types,
# but a few architectures are limited to "sometimes lock-free"
# types. This hidden option allows to know if the architecture
# provides "always lock-free" atomic types.
config BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS
	bool
	default y
	depends on !BR2_nios2
	depends on !BR2_ARM_CPU_ARMV4
	depends on !BR2_ARM_CPU_ARMV5
	depends on !BR2_sparc_v8
	depends on !BR2_m68k_cf5208

# GCC uses thunk functions to adjust the 'this' pointer when calling
# C++ member functions in classes derived with multiple inheritance.
# Generation of thunk functions requires support from the compiler
# back end. In the absence of that support target-independent code
# in the C++ front end is used to generate thunk functions, but it
# does not support vararg functions.
# or1k will support it in the gcc mainline starting with gcc-9.
config BR2_TOOLCHAIN_SUPPORTS_VARIADIC_MI_THUNK
	bool
	default y
	depends on !BR2_or1k
	depends on !BR2_xtensa

# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63261. This bug no
# longer exists in gcc 8.x.
config BR2_TOOLCHAIN_HAS_GCC_BUG_63261
	bool
	default y if BR2_microblaze
	depends on !BR2_TOOLCHAIN_GCC_AT_LEAST_8

# Prior to gcc 7.x, exception_ptr, nested_exception and future from
# libstdc++ would only be provided on architectures that support
# always lock-free atomic ints. See
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64735. This issue has
# been removed in GCC 7.x, where exception propagation is now
# supported without lock-free atomic int.
config BR2_TOOLCHAIN_HAS_GCC_BUG_64735
	bool
	default y if !BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS && \
		!BR2_TOOLCHAIN_GCC_AT_LEAST_7

# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68485. This bug still
# exists in gcc 9.x
config BR2_TOOLCHAIN_HAS_GCC_BUG_68485
	bool
	default y if BR2_microblaze

# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85180. This bug no
# longer exists in gcc 8.x.
config BR2_TOOLCHAIN_HAS_GCC_BUG_85180
	bool
	default y if BR2_microblaze
	depends on !BR2_TOOLCHAIN_GCC_AT_LEAST_8

# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85862
# An infinite loop exists in the find_base_term() logic of 6.x
# on microblaze.  http://autobuild.buildroot.net/results/158e8ebb39713e1b436a5cc1a1916f46c30694df/
config BR2_TOOLCHAIN_HAS_GCC_BUG_85862
	bool
	default y if BR2_microblaze
	depends on !BR2_TOOLCHAIN_GCC_AT_LEAST_7

# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90620
# ICE: in do_output_reload, at reload1.c:7978 on microblaze.
# It's still not fixed in gcc 9.x
config BR2_TOOLCHAIN_HAS_GCC_BUG_90620
	bool
	default y if BR2_microblaze

# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93847
# ICE: compiler error: Segmentation fault on Nios II. This bug
# no longer exists in gcc 9.x.
config BR2_TOOLCHAIN_HAS_GCC_BUG_93847
	bool
	default y if BR2_nios2 && !BR2_TOOLCHAIN_GCC_AT_LEAST_9

config BR2_TOOLCHAIN_HAS_NATIVE_RPC
	bool

config BR2_USE_WCHAR
	bool

config BR2_ENABLE_LOCALE
	bool

config BR2_INSTALL_LIBSTDCPP
	bool

config BR2_TOOLCHAIN_HAS_DLANG
	bool

config BR2_TOOLCHAIN_HAS_FORTRAN
	bool

config BR2_TOOLCHAIN_HAS_THREADS
	bool

config BR2_TOOLCHAIN_HAS_THREADS_DEBUG
	bool

config BR2_TOOLCHAIN_HAS_THREADS_NPTL
	bool

config BR2_TOOLCHAIN_HAS_SSP
	bool

config BR2_TOOLCHAIN_HAS_SSP_STRONG
	bool
	default y if BR2_TOOLCHAIN_HAS_SSP && BR2_TOOLCHAIN_GCC_AT_LEAST_4_9

config BR2_TOOLCHAIN_HAS_UCONTEXT
	bool

config BR2_TOOLCHAIN_HAS_OPENMP
	bool

config BR2_TOOLCHAIN_SUPPORTS_PIE
	bool

config BR2_TOOLCHAIN_GLIBC_GCONV_LIBS_COPY
	bool "Copy gconv libraries"
	depends on BR2_TOOLCHAIN_USES_GLIBC
	help
	  The gconv libraries are used to convert between different
	  character sets (charsets).

	  Say 'y' if you need to store and/or display different
	  charsets.

config BR2_TOOLCHAIN_GLIBC_GCONV_LIBS_LIST
	string "Gconv libraries to copy"
	depends on BR2_TOOLCHAIN_GLIBC_GCONV_LIBS_COPY
	help
	  Set to the list of gconv libraries to copy.
	  Leave empty to copy all gconv libraries.

	  Specify only the basename of the libraries, leave
	  out the .so extension. Eg.:
	    IBM850 ISO8859-15 UNICODE

	  Note: the full set of gconv libs are ~8MiB (on ARM).

config BR2_TOOLCHAIN_EXTRA_LIBS
	string "Extra toolchain libraries to be copied to target"
	default BR2_TOOLCHAIN_EXTRA_EXTERNAL_LIBS if BR2_TOOLCHAIN_EXTRA_EXTERNAL_LIBS != "" # legacy
	depends on !BR2_STATIC_LIBS
	help
	  If your toolchain provides extra libraries that need to be
	  copied to the target filesystem, enter them here, separated
	  by spaces. The library should not include a suffix or any
	  type of pre/post wildcard.

	  Examples where this can be useful is for adding debug
	  libraries to the target like the GCC libsanitizer.
	  e.g. "libasan liblsan libtsan libubsan"

# This boolean is true if the toolchain provides a built-in full
# featured gettext implementation (glibc), and false if only a stub
# gettext implementation is provided (uclibc, musl)
config BR2_TOOLCHAIN_HAS_FULL_GETTEXT
	bool

config BR2_USE_MMU
	bool "Enable MMU support" if BR2_ARCH_HAS_MMU_OPTIONAL
	default y if BR2_ARCH_HAS_MMU_OPTIONAL || BR2_ARCH_HAS_MMU_MANDATORY
	help
	  If your target has a MMU, you should say Y here.  If you
	  are unsure, just say Y.

config BR2_TARGET_OPTIMIZATION
	string "Target Optimizations"
	default ""
	help
	  Optimizations to use when building for the target host.
	  NOTE: gcc optimization level is defined in build options.

config BR2_TARGET_LDFLAGS
	string "Target linker options"
	help
	  Extra options to pass to the linker when building for the
	  target.

	  Note that options with a '$' sign (eg.
	  -Wl,-rpath='$ORIGIN/../lib') are not supported.

config BR2_ECLIPSE_REGISTER
	bool "Register toolchain within Eclipse Buildroot plug-in"
	help
	  This options tells Buildroot to generate the necessary
	  configuration files to make your toolchain appear within
	  Eclipse, through the Eclipse Buildroot plugin.

# Options for packages to depend on, if they require at least a
# specific version of the kernel headers.
# Toolchains should choose the adequate option (ie. the highest
# version, not all of them).
config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0
	bool

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_1
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_2
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_1

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_3
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_2

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_3

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_5
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_6
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_5

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_7
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_6

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_8
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_7

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_9
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_8

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_9

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_11
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_11

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_13
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_14
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_13

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_15
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_14

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_16
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_15

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_17
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_16

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_18
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_17

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_19
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_18

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_0
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_19

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_1
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_0

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_2
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_1

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_3
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_2

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_4
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_3

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_5
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_4

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_6
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_5

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_7
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_6

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_8
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_7

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_9
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_8

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_10
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_9

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_11
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_10

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_12
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_11

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_13
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_12

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_14
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_13

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_15
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_14

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_16
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_15

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_17
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_16

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_18
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_17

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_19
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_18

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_20
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_19

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_0
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_20

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_1
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_0

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_2
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_1

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_3
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_2

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_4
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_3

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_5
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_4

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_6
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_5

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_7
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_6

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_8
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_7

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_9
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_8
	select BR2_TOOLCHAIN_HEADERS_LATEST

# This should be selected by the latest version, above, to indicate that
# Buildroot does not know of more recent headers than the ones selected.
# This allows using toolchains with headers more recent than Buildroot
# knows about, while still enforcing strict check for older headers.
config BR2_TOOLCHAIN_HEADERS_LATEST
	bool

# This order guarantees that the highest version is set, as kconfig
# stops affecting a value on the first matching default.
config BR2_TOOLCHAIN_HEADERS_AT_LEAST
	string
	default "5.9"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_9
	default "5.8"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_8
	default "5.7"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_7
	default "5.6"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_6
	default "5.5"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_5
	default "5.4"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_4
	default "5.3"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_3
	default "5.2"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_2
	default "5.1"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_1
	default "5.0"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_0
	default "4.20" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_20
	default "4.19" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_19
	default "4.18" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_18
	default "4.17" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_17
	default "4.16" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_16
	default "4.15" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_15
	default "4.14" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_14
	default "4.13" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_13
	default "4.12" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_12
	default "4.11" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_11
	default "4.10" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_10
	default "4.9"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_9
	default "4.8"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_8
	default "4.7"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_7
	default "4.6"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_6
	default "4.5"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_5
	default "4.4"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_4
	default "4.3"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_3
	default "4.2"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_2
	default "4.1"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_1
	default "4.0"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_0
	default "3.19" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_19
	default "3.18" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_18
	default "3.17" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_17
	default "3.16" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_16
	default "3.15" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_15
	default "3.14" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_14
	default "3.13" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_13
	default "3.12" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12
	default "3.11" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_11
	default "3.10" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10
	default "3.9"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_9
	default "3.8"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_8
	default "3.7"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_7
	default "3.6"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_6
	default "3.5"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_5
	default "3.4"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4
	default "3.3"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_3
	default "3.2"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_2
	default "3.1"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_1
	default "3.0"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0
	default "2.6"

config BR2_TOOLCHAIN_GCC_AT_LEAST_4_3
	bool

config BR2_TOOLCHAIN_GCC_AT_LEAST_4_4
	bool
	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_3

config BR2_TOOLCHAIN_GCC_AT_LEAST_4_5
	bool
	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_4

config BR2_TOOLCHAIN_GCC_AT_LEAST_4_6
	bool
	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_5

config BR2_TOOLCHAIN_GCC_AT_LEAST_4_7
	bool
	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_6

config BR2_TOOLCHAIN_GCC_AT_LEAST_4_8
	bool
	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_7

config BR2_TOOLCHAIN_GCC_AT_LEAST_4_9
	bool
	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_8

config BR2_TOOLCHAIN_GCC_AT_LEAST_5
	bool
	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_9

config BR2_TOOLCHAIN_GCC_AT_LEAST_6
	bool
	select BR2_TOOLCHAIN_GCC_AT_LEAST_5

config BR2_TOOLCHAIN_GCC_AT_LEAST_7
	bool
	select BR2_TOOLCHAIN_GCC_AT_LEAST_6

config BR2_TOOLCHAIN_GCC_AT_LEAST_8
	bool
	select BR2_TOOLCHAIN_GCC_AT_LEAST_7

config BR2_TOOLCHAIN_GCC_AT_LEAST_9
	bool
	select BR2_TOOLCHAIN_GCC_AT_LEAST_8

config BR2_TOOLCHAIN_GCC_AT_LEAST_10
	bool
	select BR2_TOOLCHAIN_GCC_AT_LEAST_9

# This order guarantees that the highest version is set, as kconfig
# stops affecting a value on the first matching default.
config BR2_TOOLCHAIN_GCC_AT_LEAST
	string
	default "10"	if BR2_TOOLCHAIN_GCC_AT_LEAST_10
	default "9"	if BR2_TOOLCHAIN_GCC_AT_LEAST_9
	default "8"	if BR2_TOOLCHAIN_GCC_AT_LEAST_8
	default "7"	if BR2_TOOLCHAIN_GCC_AT_LEAST_7
	default "6"	if BR2_TOOLCHAIN_GCC_AT_LEAST_6
	default "5"	if BR2_TOOLCHAIN_GCC_AT_LEAST_5
	default "4.9"	if BR2_TOOLCHAIN_GCC_AT_LEAST_4_9
	default "4.8"	if BR2_TOOLCHAIN_GCC_AT_LEAST_4_8
	default "4.7"	if BR2_TOOLCHAIN_GCC_AT_LEAST_4_7
	default "4.6"	if BR2_TOOLCHAIN_GCC_AT_LEAST_4_6
	default "4.5"	if BR2_TOOLCHAIN_GCC_AT_LEAST_4_5
	default "4.4"	if BR2_TOOLCHAIN_GCC_AT_LEAST_4_4
	default "4.3"	if BR2_TOOLCHAIN_GCC_AT_LEAST_4_3

config BR2_TOOLCHAIN_HAS_MNAN_OPTION
	bool
	default y if BR2_TOOLCHAIN_GCC_AT_LEAST_4_9

config BR2_TOOLCHAIN_HAS_SYNC_1
	bool
	default y
	depends on !BR2_m68k_cf
	depends on !BR2_microblaze
	depends on !BR2_sparc
	depends on !(BR2_arc && !BR2_ARC_ATOMIC_EXT)

config BR2_TOOLCHAIN_HAS_SYNC_2
	bool
	default y if BR2_TOOLCHAIN_HAS_SYNC_1

config BR2_TOOLCHAIN_HAS_SYNC_4
	bool
	default y
	depends on !BR2_m68k_cf
	depends on !BR2_sparc
	depends on !(BR2_arc && !BR2_ARC_ATOMIC_EXT)

# The availability of __sync for 8-byte types on ARM is somewhat
# complicated:
#
#  - It appeared in gcc starting with gcc 4.7.
#
#  - On ARMv7, there is no problem, it can be directly implemented in
#    userspace.
#
#  - On < ARMv7, it requires help from the kernel. Unfortunately, the
#    libgcc code implementing 8-byte __sync with the help from the
#    kernel calls __write() when a failure occurs, which is a function
#    internal to glibc, not available in uClibc and musl. This means
#    that the 8-byte __sync operations are not available on < ARMv7
#    with uClibc and musl. This problem was fixed as part of gcc
#    PR68059, which was backported to the gcc 5 branch, but isn't yet
#    part of any gcc 5.x release.
#
config BR2_TOOLCHAIN_ARM_HAS_SYNC_8
	bool
	default y
	depends on BR2_arm || BR2_armeb
	depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_7
	depends on BR2_TOOLCHAIN_USES_GLIBC || BR2_ARM_CPU_ARMV7A

# 8-byte intrinsics available on most x86 CPUs, except a few old ones
config BR2_TOOLCHAIN_X86_HAS_SYNC_8
	bool
	default y
	depends on BR2_i386
	depends on !BR2_x86_i486
	depends on !BR2_x86_c3
	depends on !BR2_x86_winchip_c6
	depends on !BR2_x86_winchip2

# 8-byte intrinsics available:
#  - On all 64 bits architecture
#  - On a certain combinations of ARM platforms
#  - On certain x86 32 bits CPUs
config BR2_TOOLCHAIN_HAS_SYNC_8
	bool
	default y if BR2_ARCH_IS_64
	default y if BR2_TOOLCHAIN_ARM_HAS_SYNC_8
	default y if BR2_TOOLCHAIN_X86_HAS_SYNC_8

# libatomic is available since gcc 4.8, when thread support is
# enabled. Also, libatomic doesn't recognize "uclinux" as a valid OS
# part of the tuple, and is therefore not build on uclinux targets,
# which is why BR2_BINFMT_FLAT configurations are excluded.
config BR2_TOOLCHAIN_HAS_LIBATOMIC
	bool
	default y if BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 && \
		BR2_TOOLCHAIN_HAS_THREADS && \
		!BR2_BINFMT_FLAT

# __atomic intrinsics are available:
# - with gcc 4.8, either through built-ins or libatomic, on all
#   architectures. Since we don't want to separate the cases where
#   libatomic is needed vs. not needed, we simplify thing and only
#   support situations where libatomic is available, even if on some
#   architectures libatomic is not strictly needed as all __atomic
#   intrinsics might be built-in. The only case where libatomic is
#   missing entirely is when the toolchain does not have support for
#   threads. However, a package that does not need threads but still
#   uses atomics is quite a corner case, which does not warrant the
#   added complexity.
# - with gcc 4.7, libatomic did not exist, so only built-ins are
#   available. This means that __atomic can only be used in a subset
#   of the architectures
config BR2_TOOLCHAIN_HAS_ATOMIC
	bool
	default y if BR2_TOOLCHAIN_HAS_LIBATOMIC
	default y if BR2_TOOLCHAIN_GCC_AT_LEAST_4_7 && BR2_arm
	default y if BR2_TOOLCHAIN_GCC_AT_LEAST_4_7 && BR2_armeb
	default y if BR2_TOOLCHAIN_GCC_AT_LEAST_4_7 && BR2_xtensa
	default y if BR2_TOOLCHAIN_GCC_AT_LEAST_4_7 && BR2_ARCH_IS_64

# - libquadmath is not needed/available on all architectures (but gcc
#   correctly handles this already).
# - At least, libquadmath is available on:
#   - i*86
#   - x86_64
# - When available, libquadmath requires wchar support.
config BR2_TOOLCHAIN_HAS_LIBQUADMATH
	bool
	default y if BR2_i386 || BR2_x86_64

endmenu
