config/libatomic: require -latomic iff atomic.c doesn't link w/o it
In absence of LTO, and dynamic libatomic, la.so ends up in the needs section of every toolchain executable; some consider this an issue. Reviewed-by: Ryan Moeller <ryan@iXsystems.com> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Ahelenia Ziemiańska <nabijaczleweli@nabijaczleweli.xyz> Closes #12345 Closes #12359
This commit is contained in:
parent
960a5a557b
commit
968dc13572
|
@ -1,34 +1,28 @@
|
|||
dnl #
|
||||
dnl # If -latomic exists, it's needed for __atomic intrinsics.
|
||||
dnl #
|
||||
dnl # Some systems (like FreeBSD 13) don't have a libatomic at all because
|
||||
dnl # their toolchain doesn't ship it – they obviously don't need it.
|
||||
dnl #
|
||||
dnl # Others (like sufficiently ancient CentOS) have one,
|
||||
dnl # but terminally broken or unlinkable (e.g. it's a dangling symlink,
|
||||
dnl # or a linker script that points to a nonexistent file) –
|
||||
dnl # most arches affected by this don't actually need -latomic (and if they do,
|
||||
dnl # then they should have libatomic that actually exists and links,
|
||||
dnl # so don't fall into this category).
|
||||
dnl #
|
||||
dnl # Technically, we could check if the platform *actually* needs -latomic,
|
||||
dnl # or if it has native support for all the intrinsics we use,
|
||||
dnl # but it /really/ doesn't matter, and C11 recommends to always link it.
|
||||
dnl # If -latomic exists and atomic.c doesn't link without it,
|
||||
dnl # it's needed for __atomic intrinsics.
|
||||
dnl #
|
||||
AC_DEFUN([ZFS_AC_CONFIG_USER_LIBATOMIC], [
|
||||
AC_MSG_CHECKING([whether -latomic is present])
|
||||
AC_MSG_CHECKING([whether -latomic is required])
|
||||
|
||||
saved_libs="$LIBS"
|
||||
LIBS="$LIBS -latomic"
|
||||
LIBATOMIC_LIBS=""
|
||||
|
||||
AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])], [
|
||||
LIBATOMIC_LIBS="-latomic"
|
||||
AC_MSG_RESULT([yes])
|
||||
], [
|
||||
LIBATOMIC_LIBS=""
|
||||
AC_MSG_RESULT([no])
|
||||
LIBS="$saved_libs"
|
||||
saved_cflags="$CFLAGS"
|
||||
CFLAGS="$CFLAGS -isystem lib/libspl/include"
|
||||
AC_LINK_IFELSE([AC_LANG_PROGRAM([#include "lib/libspl/atomic.c"], [])], [], [LIBATOMIC_LIBS="-latomic"])
|
||||
CFLAGS="$saved_cflags"
|
||||
])
|
||||
|
||||
if test -n "$LIBATOMIC_LIBS"; then
|
||||
AC_MSG_RESULT([yes])
|
||||
else
|
||||
AC_MSG_RESULT([no])
|
||||
fi
|
||||
|
||||
LIBS="$saved_libs"
|
||||
AC_SUBST([LIBATOMIC_LIBS])
|
||||
])
|
||||
|
|
Loading…
Reference in New Issue