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

# 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=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

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_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_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).

# 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

# 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.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

# 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 "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
