Andrew Geissler | c5535c9 | 2023-01-27 16:10:19 -0600 | [diff] [blame] | 1 | From 95e601ce116dd46ea7915c171976b85ea0905d58 Mon Sep 17 00:00:00 2001 |
| 2 | From: Lonnie Abelbeck <lonnie@abelbeck.com> |
| 3 | Date: Sun, 8 May 2022 14:05:56 -0500 |
| 4 | Subject: [PATCH] configure.ac: Link with -latomic only if no atomic builtins |
| 5 | |
| 6 | Follow-up to 561dbda, a check of GCC atomic builtins needs to be done |
| 7 | first. |
| 8 | |
| 9 | I'm no autoconf guru, but using this: |
| 10 | https://github.com/mesa3d/mesa/blob/0df485c285b73c34ba9062f0c27e55c3c702930d/configure.ac#L469 |
| 11 | as inspiration, I created a pre-check before calling AC_SEARCH_LIBS(...) |
| 12 | |
| 13 | Fixes #1135 |
| 14 | Closes #1139 |
| 15 | Upstream-Status: Backport [https://github.com/kraj/libusb/commit/95e601ce116dd46ea7915c171976b85ea0905d58] |
| 16 | Signed-off-by: Khem Raj <raj.khem@gmail.com> |
| 17 | --- |
| 18 | configure.ac | 16 +++++++++++++++- |
| 19 | libusb/version_nano.h | 2 +- |
| 20 | 2 files changed, 16 insertions(+), 2 deletions(-) |
| 21 | |
| 22 | --- a/configure.ac |
| 23 | +++ b/configure.ac |
| 24 | @@ -153,7 +153,21 @@ if test "x$platform" = xposix; then |
| 25 | AC_SEARCH_LIBS([pthread_create], [pthread], |
| 26 | [test "x$ac_cv_search_pthread_create" != "xnone required" && AC_SUBST(THREAD_LIBS, [-lpthread])], |
| 27 | [], []) |
| 28 | - AC_SEARCH_LIBS([__atomic_fetch_add_4], [atomic]) |
| 29 | + dnl Check for new-style atomic builtins. We first check without linking to -latomic. |
| 30 | + AC_MSG_CHECKING(whether __atomic_load_n is supported) |
| 31 | + AC_LINK_IFELSE([AC_LANG_SOURCE([[ |
| 32 | + #include <stdint.h> |
| 33 | + int main() { |
| 34 | + struct { |
| 35 | + uint64_t *v; |
| 36 | + } x; |
| 37 | + return (int)__atomic_load_n(x.v, __ATOMIC_ACQUIRE) & |
| 38 | + (int)__atomic_add_fetch(x.v, (uint64_t)1, __ATOMIC_ACQ_REL); |
| 39 | + }]])], GCC_ATOMIC_BUILTINS_SUPPORTED=yes, GCC_ATOMIC_BUILTINS_SUPPORTED=no) |
| 40 | + AC_MSG_RESULT($GCC_ATOMIC_BUILTINS_SUPPORTED) |
| 41 | + if test "x$GCC_ATOMIC_BUILTINS_SUPPORTED" != xyes; then |
| 42 | + AC_SEARCH_LIBS([__atomic_fetch_add_4], [atomic]) |
| 43 | + fi |
| 44 | elif test "x$platform" = xwindows; then |
| 45 | AC_DEFINE([PLATFORM_WINDOWS], [1], [Define to 1 if compiling for a Windows platform.]) |
| 46 | else |