Message ID | 20240512100524.15346-1-fontaine.fabrice@gmail.com |
---|---|
State | Accepted |
Headers | show |
Series | [v2,1/1] toolchain/Config.in: update BR2_TOOLCHAIN_HAS_LIBATOMIC dependencies | expand |
Hello, On Sun, 12 May 2024 12:05:24 +0200 Fabrice Fontaine <fontaine.fabrice@gmail.com> wrote: > Update BR2_TOOLCHAIN_HAS_LIBATOMIC dependencies to avoid the following > build failure with libopenssl and > BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_ARMV7M_UCLIBC_STABLE: > > /home/buildroot/autobuild/run/instance-2/output-1/host/opt/ext-toolchain/arm-buildroot-uclinux-uclibcgnueabi/bin/ld.real: ./libcrypto.a(libcrypto-lib-threads_pthread.o): in function `CRYPTO_atomic_or': > threads_pthread.c:(.text+0xfa): undefined reference to `__atomic_is_lock_free' Thanks, I have applied because the patch makes sense. However, what about other noMMU architectures that use BR2_BINFMT_FLAT, but don't produce a libatomic? For example m68k noMMU? Won't they still be broken with this undefined reference to `__atomic_is_lock_free' ? Thanks, Thomas
>>>>> "Fabrice" == Fabrice Fontaine <fontaine.fabrice@gmail.com> writes: > Update BR2_TOOLCHAIN_HAS_LIBATOMIC dependencies to avoid the following > build failure with libopenssl and > BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_ARMV7M_UCLIBC_STABLE: > /home/buildroot/autobuild/run/instance-2/output-1/host/opt/ext-toolchain/arm-buildroot-uclinux-uclibcgnueabi/bin/ld.real: ./libcrypto.a(libcrypto-lib-threads_pthread.o): in function `CRYPTO_atomic_or': > threads_pthread.c:(.text+0xfa): undefined reference to `__atomic_is_lock_free' > libatomic is available since gcc 4.8, when thread support is enabled. > However, the gcc logic in libatomic/configure.tgt does not recognize > "uclinux" as a valid OS part of the target tuple, and therefore it > does not build libatomic. The "uclinux" part of the tuple is used by > Buildroot when BR2_BINFMT_FLAT=y [1]. This broken logic has only been > fixed for arm since gcc 10.1.0 [2]. > Indeed, bootlin armv7m is an uclibc toolchain compiled with atomic > support through libatomic. > [1] https://git.buildroot.net/buildroot/commit/?id=b3d1fb26dcadd8c570e2c415ce05398ecc810b32 > [2] https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=b1e21e5a5d19b436f948710e09157c5b3244f541 > Fixes: > - http://autobuild.buildroot.org/results/d25e898f9715bf6a21284807361a57735a7a2e1d > - http://autobuild.buildroot.org/results/e37ed5ad6ba41d610bffe9c234f699e203ef5069 > Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com> > --- > Changes v1 -> v2 (after review of Thomas Petazzoni): > - Update dependencies to enable libatomic with uclibc only on arm with > gcc 10 Committed to 2024.02.x, thanks.
diff --git a/toolchain/Config.in b/toolchain/Config.in index 655f1a53dc..ef8a8ba381 100644 --- a/toolchain/Config.in +++ b/toolchain/Config.in @@ -888,15 +888,19 @@ 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. 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. +# libatomic is available since gcc 4.8, when thread support is enabled. +# However, the gcc logic in libatomic/configure.tgt does not recognize +# "uclinux" as a valid OS part of the target tuple, and therefore it +# does not build libatomic. The "uclinux" part of the tuple is used by +# Buildroot when BR2_BINFMT_FLAT=y. This broken logic has only been +# fixed for arm since gcc 10.1.0. config BR2_TOOLCHAIN_HAS_LIBATOMIC bool - default y if BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 && \ - BR2_TOOLCHAIN_HAS_THREADS && \ - !BR2_BINFMT_FLAT + default y if BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_BINFMT_ELF || \ + (BR2_BINFMT_FLAT && BR2_arm && \ + BR2_TOOLCHAIN_GCC_AT_LEAST_10) # __atomic intrinsics are available: # - with gcc 4.8, either through built-ins or libatomic, on all
Update BR2_TOOLCHAIN_HAS_LIBATOMIC dependencies to avoid the following build failure with libopenssl and BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_ARMV7M_UCLIBC_STABLE: /home/buildroot/autobuild/run/instance-2/output-1/host/opt/ext-toolchain/arm-buildroot-uclinux-uclibcgnueabi/bin/ld.real: ./libcrypto.a(libcrypto-lib-threads_pthread.o): in function `CRYPTO_atomic_or': threads_pthread.c:(.text+0xfa): undefined reference to `__atomic_is_lock_free' libatomic is available since gcc 4.8, when thread support is enabled. However, the gcc logic in libatomic/configure.tgt does not recognize "uclinux" as a valid OS part of the target tuple, and therefore it does not build libatomic. The "uclinux" part of the tuple is used by Buildroot when BR2_BINFMT_FLAT=y [1]. This broken logic has only been fixed for arm since gcc 10.1.0 [2]. Indeed, bootlin armv7m is an uclibc toolchain compiled with atomic support through libatomic. [1] https://git.buildroot.net/buildroot/commit/?id=b3d1fb26dcadd8c570e2c415ce05398ecc810b32 [2] https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=b1e21e5a5d19b436f948710e09157c5b3244f541 Fixes: - http://autobuild.buildroot.org/results/d25e898f9715bf6a21284807361a57735a7a2e1d - http://autobuild.buildroot.org/results/e37ed5ad6ba41d610bffe9c234f699e203ef5069 Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com> --- Changes v1 -> v2 (after review of Thomas Petazzoni): - Update dependencies to enable libatomic with uclibc only on arm with gcc 10 toolchain/Config.in | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-)