diff options
author | Ben Gamari <ben@smart-cactus.org> | 2021-02-09 23:13:24 -0500 |
---|---|---|
committer | Ben Gamari <ben@smart-cactus.org> | 2021-02-09 23:17:35 -0500 |
commit | b5c4820e813aaedb490a9de212c4da8ceb94e2e1 (patch) | |
tree | 46b5a74dc7aabab9f4996477513298d9ca7508e8 | |
parent | 17a89b1bdc2a30116c0efba71d93314b85358c6a (diff) | |
download | haskell-b5c4820e813aaedb490a9de212c4da8ceb94e2e1.tar.gz |
Check for libatomic dependency for atomic operationswip/T19119
Some platforms (e.g. RISC-V) require linking against libatomic for some
(e.g. sub-word-sized) atomic operations.
Fixes #19119.
-rw-r--r-- | configure.ac | 21 | ||||
-rw-r--r-- | rts/rts.cabal.in | 5 |
2 files changed, 26 insertions, 0 deletions
diff --git a/configure.ac b/configure.ac index d69ff312b8..67c645a3d0 100644 --- a/configure.ac +++ b/configure.ac @@ -1211,6 +1211,27 @@ AC_CHECK_FUNC(pthread_create, AC_DEFINE_UNQUOTED([NEED_PTHREAD_LIB], [$need_lpthread], [Define 1 if we need to link code using pthreads with -lpthread]) +AC_MSG_CHECKING(whether -latomic is needed for sub-word-sized atomic operations) +AC_CHECK_FUNC(atomic_fetch_or, + [ + AC_MSG_RESULT(no) + AC_SUBST([CabalNeedAtomic],[False]) + need_latomic=0 + ], + [ + AC_CHECK_LIB(atomic, atomic_fetch_or, + [ + AC_MSG_RESULT(yes) + AC_SUBST([CabalNeedAtomic],[True]) + need_latomic=1 + ], + [ + AC_SUBST([CabalNeedAtomic],[False]) + AC_MSG_ERROR([sub-word-sized atomic operations not available.]) + need_latomic=0 + ]) + ]) + dnl ** pthread_setname_np is a recent addition to glibc, and OS X has dnl a different single-argument version. AC_CHECK_LIB(pthread, pthread_setname_np) diff --git a/rts/rts.cabal.in b/rts/rts.cabal.in index ed727111ca..b41e3538b0 100644 --- a/rts/rts.cabal.in +++ b/rts/rts.cabal.in @@ -18,6 +18,8 @@ flag libbfd default: @CabalHaveLibbfd@ flag mingwex default: @CabalMingwex@ +flag need-atomic + default: @CabalNeedLibatomic@ flag libdw default: @CabalHaveLibdw@ flag libnuma @@ -120,6 +122,9 @@ library if flag(need-pthread) -- for pthread_getthreadid_np, pthread_create, ... extra-libraries: pthread + if flag(need-libatomic) + -- for sub-word-sized atomic operations (#19119) + extra-libraries: atomic if flag(libbfd) -- for debugging extra-libraries: bfd iberty |