summaryrefslogtreecommitdiff
path: root/m4
diff options
context:
space:
mode:
authorHaochen Tong <i@hexchain.org>2021-10-12 02:07:45 +0800
committerMarge Bot <ben+marge-bot@smart-cactus.org>2021-10-12 19:17:53 -0400
commit234bf3688b14299ad8cebc20206c1a5df34139d4 (patch)
tree7d80044a2f8009aa1763e4c36cd44754bd45147a /m4
parent90f06a0e015e18c066fe1569fb2add318bec72ca (diff)
downloadhaskell-234bf3688b14299ad8cebc20206c1a5df34139d4.tar.gz
Move libatomic check into m4/fp_gcc_supports_atomics.m4
Diffstat (limited to 'm4')
-rw-r--r--m4/fp_gcc_supports__atomics.m452
1 files changed, 38 insertions, 14 deletions
diff --git a/m4/fp_gcc_supports__atomics.m4 b/m4/fp_gcc_supports__atomics.m4
index 81fc44c500..6aa3c9dc93 100644
--- a/m4/fp_gcc_supports__atomics.m4
+++ b/m4/fp_gcc_supports__atomics.m4
@@ -1,17 +1,41 @@
-# FP_GCC_SUPPORTS__ATOMICS
-# ------------------------
-# Does gcc support the __atomic_* family of builtins?
+dnl FP_GCC_SUPPORTS__ATOMICS
+dnl ------------------------
+dnl Does gcc support the __atomic_* family of builtins?
AC_DEFUN([FP_GCC_SUPPORTS__ATOMICS],
[
- AC_REQUIRE([AC_PROG_CC])
- AC_MSG_CHECKING([whether GCC supports __atomic_ builtins])
- echo 'int test(int *x) { int y; __atomic_load(x, &y, __ATOMIC_SEQ_CST); return y; }' > conftest.c
- if $CC -c conftest.c > /dev/null 2>&1; then
- CONF_GCC_SUPPORTS__ATOMICS=YES
- AC_MSG_RESULT([yes])
- else
- CONF_GCC_SUPPORTS__ATOMICS=NO
- AC_MSG_RESULT([no])
- fi
- rm -f conftest.c conftest.o
+ AC_REQUIRE([AC_PROG_CC])
+ AC_MSG_CHECKING([whether GCC supports __atomic_ builtins])
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[int x, y;]], [[__atomic_load(&x, &y, __ATOMIC_SEQ_CST); return y]])],
+ [
+ AC_MSG_RESULT(yes)
+ AC_MSG_CHECKING(whether -latomic is needed for sub-word-sized atomic operations)
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[unsigned char a;]], [[__atomic_fetch_or(&a, 1, __ATOMIC_RELAXED);]])],
+ [
+ AC_MSG_RESULT(no)
+ AC_SUBST([CabalNeedLibatomic],[False])
+ need_latomic=0
+ ],
+ [
+ _save_LIBS=$LIBS
+ LIBS="-latomic"
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[unsigned char a;]], [[__atomic_fetch_or(&a, 1, __ATOMIC_RELAXED);]])],
+ [
+ AC_MSG_RESULT(yes)
+ AC_SUBST([CabalNeedLibatomic],[True])
+ need_latomic=1
+ ],
+ [
+ AC_MSG_RESULT(failed)
+ AC_MSG_ERROR([sub-word-sized atomic operations are not available.])
+ ])
+ LIBS=$_save_LIBS
+ ])
+ ],
+ [
+ AC_MSG_RESULT(no)
+ AC_MSG_ERROR([C compiler needs to support __atomic primitives.])
+ ])
+ AC_DEFINE([HAVE_C11_ATOMICS], [1], [Does GCC support __atomic primitives?])
+ AC_DEFINE_UNQUOTED([NEED_ATOMIC_LIB], [$need_latomic],
+ [Define to 1 if we need -latomic for sub-word atomic operations.])
])