diff --git a/toolchain/toolchain-common.in b/toolchain/toolchain-common.in index 46970a68e3..0907c5e830 100644 --- a/toolchain/toolchain-common.in +++ b/toolchain/toolchain-common.in @@ -378,15 +378,30 @@ config BR2_TOOLCHAIN_HAS_SYNC_8 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. +config BR2_TOOLCHAIN_HAS_LIBATOMIC + bool + default y if BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 && \ + BR2_TOOLCHAIN_HAS_THREADS + # __atomic intrinsics are available: # - with gcc 4.8, either through built-ins or libatomic, on all -# architectures +# 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_GCC_AT_LEAST_4_8 + 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