[PATCH 20/22] Coarray caf_shmem final patch set

Jerry D <[email protected]>
Newsgroups gmane.comp.gcc.patches,gmane.comp.gcc.fortran
Message-ID <[email protected]>
Ref: https://gcc.gnu.org/pipermail/fortran/2026-February/063551.html

See attached.

Awaiting approval.
caf_shmem-20-of-22.patch (text/x-patch, 4.2 KB)
From 8ab8ef18a57af6ef44e9f9acb904ff1358c6e3a0 Mon Sep 17 00:00:00 2001
From: Andre Vehreschild <[email protected]>
Date: Wed, 18 Feb 2026 10:14:58 +0100
Subject: [PATCH] Fortran: Make caf_shmem build pthread presence aware.

On some system pthreads needs special treatment.  Use the present
AX_PTHREADS macro to figure what is needed.

libgfortran/ChangeLog:

	* Makefile.am: Only build caf_shmem when pthreads is available.
	* configure.ac: Check for pthreads availability and needed
	flags.

gcc/testsuite/ChangeLog:

	* gfortran.dg/coarray/caf.exp: Only add caf_shmem to tests when
	is build.
---
 gcc/testsuite/gfortran.dg/coarray/caf.exp | 18 +++++++++++++-----
 libgfortran/Makefile.am                   |  5 ++++-
 libgfortran/configure.ac                  | 10 ++++++++++
 3 files changed, 27 insertions(+), 6 deletions(-)

diff --git a/gcc/testsuite/gfortran.dg/coarray/caf.exp b/gcc/testsuite/gfortran.dg/coarray/caf.exp
index 9cd99f8e0cb..02c3591f377 100644
--- a/gcc/testsuite/gfortran.dg/coarray/caf.exp
+++ b/gcc/testsuite/gfortran.dg/coarray/caf.exp
@@ -29,6 +29,7 @@
 # Load procedures from common libraries. 
 load_lib gfortran-dg.exp
 load_lib atomic-dg.exp
+load_lib target-libpath.exp
 
 # If a testcase doesn't have special options, use these.
 global DEFAULT_FFLAGS
@@ -48,6 +49,11 @@ global gfortran_test_path
 global gfortran_aux_module_flags
 set gfortran_test_path $srcdir/$subdir
 set gfortran_aux_module_flags $DEFAULT_FFLAGS
+global enable_caf_shmem
+set gccpath [get_multilibs]
+set shlib_ext [get_shlib_extension]
+set enable_caf_shmem [expr [file exists "${gccpath}/libgfortran/.libs/libcaf_shmem.a"] || \
+    [file exists "${gccpath}/libgfortran/.libs/libcaf_shmem.${shlib_ext}"] ]
 
 proc dg-compile-aux-modules { args } {
     global gfortran_test_path
@@ -110,11 +116,13 @@ foreach test [lsort [glob -nocomplain $srcdir/$subdir/*.\[fF\]{,90,95,03,08} ]]
 	cleanup-modules ""
     }
 
-    foreach flags $option_list {
-        verbose "Testing $nshort (libcaf_shmem), $flags" 1
-        set gfortran_aux_module_flags "-fcoarray=lib $flags -lcaf_shmem"
-        dg-test $test "-fcoarray=lib $flags -lcaf_shmem" {}
-        cleanup-modules ""
+    if "$enable_caf_shmem" {
+        foreach flags $option_list {
+            verbose "Testing $nshort (libcaf_shmem), $flags" 1
+            set gfortran_aux_module_flags "-fcoarray=lib $flags -lcaf_shmem"
+            dg-test $test "-fcoarray=lib $flags -lcaf_shmem" {}
+            cleanup-modules ""
+        }
     }
 }
 torture-finish
diff --git a/libgfortran/Makefile.am b/libgfortran/Makefile.am
index c5c0fa5717c..c57c5bec0e6 100644
--- a/libgfortran/Makefile.am
+++ b/libgfortran/Makefile.am
@@ -68,6 +68,8 @@ libcaf_single_la_LDFLAGS = -static
 libcaf_single_la_DEPENDENCIES = $(libcaf_shared_DEPS)
 libcaf_single_la_LINK = $(LINK) $(libcaf_single_la_LDFLAGS)
 
+if ENABLE_CAF_SHMEM
+libcaf_shmem_la_CFLAGS = $(CAF_SHMEM_CFLAGS)
 libcaf_shmem_la_SOURCES = $(libcaf_shared_SRCS) \
 	caf/shmem.c caf/shmem/alloc.c caf/shmem/allocator.c \
 	caf/shmem/collective_subroutine.c caf/shmem/counter_barrier.c \
@@ -80,7 +82,8 @@ libcaf_shmem_la_DEPENDENCIES = $(libcaf_shared_DEPS) caf/shmem/alloc.h \
 	caf/shmem/counter_barrier.h caf/shmem/hashmap.h \
 	caf/shmem/shared_memory.h caf/shmem/supervisor.h caf/shmem/sync.h \
 	caf/shmem/teams_mgmt.h caf/shmem/thread_support.h
-libcaf_shmem_la_LINK = $(LINK) $(libcaf_shmem_la_LDFLAGS)
+libcaf_shmem_la_LINK = $(LINK) $(libcaf_shmem_la_LDFLAGS) $(CAF_SHMEM_LIBS)
+endif
 
 if IEEE_SUPPORT
 fincludedir = $(libdir)/gcc/$(target_alias)/$(gcc_version)$(MULTISUBDIR)/finclude
diff --git a/libgfortran/configure.ac b/libgfortran/configure.ac
index b165dff1e05..fea8292225b 100644
--- a/libgfortran/configure.ac
+++ b/libgfortran/configure.ac
@@ -343,6 +343,16 @@ else
    freelocale uselocale strerror_l strtof128 strfromf128)
 fi
 
+# Check for existing and usable pthreads.
+AX_PTHREAD([
+  enable_caf_shmem=true
+  CAF_SHMEM_CFLAGS="$PTHREAD_CFLAGS"
+  CAF_SHMEM_LIBS="$PTHREAD_LIBS"
+  ], [
+  enable_caf_shmem=false
+  ])
+AM_CONDITIONAL([ENABLE_CAF_SHMEM], [test x$enable_caf_shmem = xtrue])
+
 # Check strerror_r, cannot be above as versions with two and three arguments exist
 LIBGFOR_CHECK_STRERROR_R
 
-- 
2.53.0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.