latomic-subword
authorDebian Haskell Group <pkg-haskell-maintainers@lists.alioth.debian.org>
Tue, 19 Sep 2023 23:00:36 +0000 (00:00 +0100)
committerRaspbian forward porter <root@raspbian.org>
Tue, 19 Sep 2023 23:00:36 +0000 (00:00 +0100)
commit 90f06a0e015e18c066fe1569fb2add318bec72ca
Author: Haochen Tong <i@hexchain.org>
Date:   Mon Oct 11 11:40:56 2021 +0800

    Check for libatomic dependency for atomic operations

    Some platforms (e.g. RISC-V) require linking against libatomic for some
    (e.g. sub-word-sized) atomic operations.

    Fixes #19119.

Gbp-Pq: Name latomic-subword

configure.ac
rts/package.conf.in
rts/rts.cabal.in

index 20911ae43f32c5c04e4b2865ba316a20843889e4..2fe23d3b9d05dc94cacbf6e6776e08d10f4ee7be 100644 (file)
@@ -1286,6 +1286,32 @@ AC_LINK_IFELSE([
   AC_MSG_RESULT(no)
 )
 
+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_SUBST([CabalNeedLibatomic],[False])
+                AC_MSG_ERROR([sub-word-sized atomic operations not available.])
+                need_latomic=0
+            ])
+        LIBS=$_save_LIBS
+    ])
+AC_DEFINE_UNQUOTED([NEED_ATOMIC_LIB], [$need_latomic],
+    [Define to 1 if we need -latomic for sub-word atomic operations.])
+
 dnl ** check for eventfd which is needed by the I/O manager
 AC_CHECK_HEADERS([sys/eventfd.h])
 AC_CHECK_FUNCS([eventfd])
index 5e0af88fb6277f1678ad96a4a69d09a0487922e1..b2d9120184d8dcf813561c2a75143bd36d7cffc9 100644 (file)
@@ -63,6 +63,9 @@ extra-libraries:
                              , "elf"
                              , "dw"             /* for backtraces */
 #endif
+#if NEED_ATOMIC_LIB
+                             , "atomic"
+#endif
 
 #if defined(INSTALLING)
 include-dirs:           INCLUDE_DIR FFI_INCLUDE_DIR
index 90325dc689bfa444e48e54e56f3d0ff8f68ab684..5bebb4718ffd4677a9f36bb9499b715eeacbc603 100644 (file)
@@ -20,6 +20,8 @@ flag libbfd
   default: @CabalHaveLibbfd@
 flag mingwex
   default: @CabalMingwex@
+flag need-atomic
+  default: @CabalNeedLibatomic@
 flag libdw
   default: @CabalHaveLibdw@
 flag libnuma
@@ -126,6 +128,9 @@ library
     if flag(need-pthread)
        -- for pthread_getthreadid_np, pthread_create, ...
        extra-libraries: pthread
+    if flag(need-atomic)
+       -- for sub-word-sized atomic operations (#19119)
+       extra-libraries: atomic
     if flag(libbfd)
        -- for debugging
        extra-libraries: bfd iberty