mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2024-11-24 02:34:17 +08:00
configure: check if -latomic is needed for __atomic_*
On some platforms, gcc generates library calls when __atomic_* functions
are used, but does not link the required library (libatomic) automatically
(supposedly to allow the app to use some other atomics implementation?).
Detect this at configure time and add the library when needed. Tested
on armel (library was added) and on x86_64 (was not, as expected).
Some documentation on this is provided in GCC wiki:
https://gcc.gnu.org/wiki/Atomic/GCCMM
Fixes: 8915f0c0
"util: use GCC atomic intrinsics with explicit memory model"
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=102573
Signed-off-by: Grazvydas Ignotas <notasas@gmail.com>
Reviewed-by: Matt Turner <mattst88@gmail.com>
Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
This commit is contained in:
parent
6ace0b8bc8
commit
2ef7f23820
13
configure.ac
13
configure.ac
@ -379,8 +379,21 @@ int main() {
|
|||||||
}]])], GCC_ATOMIC_BUILTINS_SUPPORTED=1)
|
}]])], GCC_ATOMIC_BUILTINS_SUPPORTED=1)
|
||||||
if test "x$GCC_ATOMIC_BUILTINS_SUPPORTED" = x1; then
|
if test "x$GCC_ATOMIC_BUILTINS_SUPPORTED" = x1; then
|
||||||
DEFINES="$DEFINES -DUSE_GCC_ATOMIC_BUILTINS"
|
DEFINES="$DEFINES -DUSE_GCC_ATOMIC_BUILTINS"
|
||||||
|
dnl On some platforms, new-style atomics need a helper library
|
||||||
|
AC_MSG_CHECKING(whether -latomic is needed)
|
||||||
|
AC_LINK_IFELSE([AC_LANG_SOURCE([[
|
||||||
|
#include <stdint.h>
|
||||||
|
uint64_t v;
|
||||||
|
int main() {
|
||||||
|
return (int)__atomic_load_n(&v, __ATOMIC_ACQUIRE);
|
||||||
|
}]])], GCC_ATOMIC_BUILTINS_NEED_LIBATOMIC=no, GCC_ATOMIC_BUILTINS_NEED_LIBATOMIC=yes)
|
||||||
|
AC_MSG_RESULT($GCC_ATOMIC_BUILTINS_NEED_LIBATOMIC)
|
||||||
|
if test "x$GCC_ATOMIC_BUILTINS_NEED_LIBATOMIC" = xyes; then
|
||||||
|
LIBATOMIC_LIBS="-latomic"
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
AM_CONDITIONAL([GCC_ATOMIC_BUILTINS_SUPPORTED], [test x$GCC_ATOMIC_BUILTINS_SUPPORTED = x1])
|
AM_CONDITIONAL([GCC_ATOMIC_BUILTINS_SUPPORTED], [test x$GCC_ATOMIC_BUILTINS_SUPPORTED = x1])
|
||||||
|
AC_SUBST([LIBATOMIC_LIBS])
|
||||||
|
|
||||||
dnl Check if host supports 64-bit atomics
|
dnl Check if host supports 64-bit atomics
|
||||||
dnl note that lack of support usually results in link (not compile) error
|
dnl note that lack of support usually results in link (not compile) error
|
||||||
|
@ -48,7 +48,8 @@ libmesautil_la_SOURCES = \
|
|||||||
|
|
||||||
libmesautil_la_LIBADD = \
|
libmesautil_la_LIBADD = \
|
||||||
$(CLOCK_LIB) \
|
$(CLOCK_LIB) \
|
||||||
$(ZLIB_LIBS)
|
$(ZLIB_LIBS) \
|
||||||
|
$(LIBATOMIC_LIBS)
|
||||||
|
|
||||||
libxmlconfig_la_SOURCES = $(XMLCONFIG_FILES)
|
libxmlconfig_la_SOURCES = $(XMLCONFIG_FILES)
|
||||||
libxmlconfig_la_CFLAGS = \
|
libxmlconfig_la_CFLAGS = \
|
||||||
|
Loading…
Reference in New Issue
Block a user