libusb1: Link with latomic only if compiler has no atomic builtins

This makes build use compiler to decide from where to get atomics
instead of assuming that it should always come from libatomic, helps
sharing build artifacts with OSes which may not have libatomic installed
because it is not required on those hosts.

(From OE-Core rev: f66b0fd1ba7c017e9db7bb94d767d8becb41a455)

Signed-off-by: Khem Raj <raj.khem@gmail.com>
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit a026d9afcbe07a8324ca951ba3439373dcb3771c)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Khem Raj
2023-01-20 17:23:45 -08:00
committed by Richard Purdie
parent 4e02e9cfbb
commit 90c818e400
2 changed files with 47 additions and 0 deletions

View File

@@ -0,0 +1,46 @@
From 95e601ce116dd46ea7915c171976b85ea0905d58 Mon Sep 17 00:00:00 2001
From: Lonnie Abelbeck <lonnie@abelbeck.com>
Date: Sun, 8 May 2022 14:05:56 -0500
Subject: [PATCH] configure.ac: Link with -latomic only if no atomic builtins
Follow-up to 561dbda, a check of GCC atomic builtins needs to be done
first.
I'm no autoconf guru, but using this:
https://github.com/mesa3d/mesa/blob/0df485c285b73c34ba9062f0c27e55c3c702930d/configure.ac#L469
as inspiration, I created a pre-check before calling AC_SEARCH_LIBS(...)
Fixes #1135
Closes #1139
Upstream-Status: Backport [https://github.com/kraj/libusb/commit/95e601ce116dd46ea7915c171976b85ea0905d58]
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
configure.ac | 16 +++++++++++++++-
libusb/version_nano.h | 2 +-
2 files changed, 16 insertions(+), 2 deletions(-)
--- a/configure.ac
+++ b/configure.ac
@@ -153,7 +153,21 @@ if test "x$platform" = xposix; then
AC_SEARCH_LIBS([pthread_create], [pthread],
[test "x$ac_cv_search_pthread_create" != "xnone required" && AC_SUBST(THREAD_LIBS, [-lpthread])],
[], [])
- AC_SEARCH_LIBS([__atomic_fetch_add_4], [atomic])
+ dnl Check for new-style atomic builtins. We first check without linking to -latomic.
+ AC_MSG_CHECKING(whether __atomic_load_n is supported)
+ AC_LINK_IFELSE([AC_LANG_SOURCE([[
+ #include <stdint.h>
+ int main() {
+ struct {
+ uint64_t *v;
+ } x;
+ return (int)__atomic_load_n(x.v, __ATOMIC_ACQUIRE) &
+ (int)__atomic_add_fetch(x.v, (uint64_t)1, __ATOMIC_ACQ_REL);
+ }]])], GCC_ATOMIC_BUILTINS_SUPPORTED=yes, GCC_ATOMIC_BUILTINS_SUPPORTED=no)
+ AC_MSG_RESULT($GCC_ATOMIC_BUILTINS_SUPPORTED)
+ if test "x$GCC_ATOMIC_BUILTINS_SUPPORTED" != xyes; then
+ AC_SEARCH_LIBS([__atomic_fetch_add_4], [atomic])
+ fi
elif test "x$platform" = xwindows; then
AC_DEFINE([PLATFORM_WINDOWS], [1], [Define to 1 if compiling for a Windows platform.])
else

View File

@@ -11,6 +11,7 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=fbc093901857fcd118f065f900982c24"
BBCLASSEXTEND = "native nativesdk"
SRC_URI = "${GITHUB_BASE_URI}/download/v${PV}/libusb-${PV}.tar.bz2 \
file://0001-configure.ac-Link-with-latomic-only-if-no-atomic-bui.patch \
file://run-ptest \
"