Skip to content

Commit a65958c

Browse files
committed
Improve windows support: find pthreads & use in caf
Use CMakes FindThreads feature/module to find pthreads since they are used in the mpi opencoarrays library. As a result the caf wrapper script should also link in/build with pthreads
1 parent 0abce5a commit a65958c

File tree

2 files changed

+28
-17
lines changed

2 files changed

+28
-17
lines changed

src/extensions/caf.in

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ set -o pipefail
5252
#
5353
# CAF_VERSION, opencoarrays_aware_compiler, Fortran_COMPILER, CAF_MODDIR,
5454
# CAF_MPI_Fortran_LINK_FLAGS, CAF_MPI_Fortran_COMPILE_FLAGS,
55-
# CAF_LIBS, CAF_MPI_LIBS
55+
# CAF_LIBS, THREADS_LIB, CAF_MPI_LIBS
5656
#
5757

5858
caf_version='@CAF_VERSION@' # fetched from `git describe` and/or
@@ -87,6 +87,7 @@ mpi_link_flags=(@CAF_MPI_Fortran_LINK_FLAGS@) # e.g. `pkg-config
8787
# --libs-only-L`
8888
mpi_compile_flags=(@CAF_MPI_Fortran_COMPILE_FLAGS@)
8989
caf_libs=(@CAF_LIBS@) # e.g. "libcaf_mpi" "libcaf_extensions",
90+
threads_lib=@THREADS_LIB@ # pthreads or compatible, needed for windows
9091
# preferably full paths, but could be
9192
# combination of -L... and -lcaf_mpi...
9293
mpi_libs=(@CAF_MPI_LIBS@) # e.g. `pkg-config --libs-only-l` or full paths
@@ -235,6 +236,11 @@ if [[ -n "${caf_libs[*]:-}" ]]; then
235236
caf_added_libs+=("$(substitute_lib "${prefix%/}/${lib}")")
236237
done
237238
fi
239+
240+
if [[ -n "${threads_lib}" ]]; then
241+
caf_added_libs+=("${threads_lib}")
242+
fi
243+
238244
if [[ -n "${mpi_libs[*]:-}" ]]; then
239245
for lib in "${mpi_libs[@]:-}"; do
240246
caf_added_libs+=("$(substitute_lib "${lib}")")

src/mpi/CMakeLists.txt

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -46,20 +46,23 @@ target_link_libraries(caf_mpi_static
4646
set_target_properties(caf_mpi_static
4747
PROPERTIES
4848
POSITION_INDEPENDENT_CODE TRUE)
49-
if(WIN32)
50-
target_compile_options(caf_mpi
51-
PUBLIC -pthread)
52-
target_link_libraries(caf_mpi
53-
PRIVATE pthread)
54-
set_target_properties(caf_mpi
55-
PROPERTIES LINKER_LANGUAGE Fortran)
56-
target_compile_options(caf_mpi_static
57-
PUBLIC -pthread)
58-
target_link_options(caf_mpi_static
59-
PUBLIC -pthread)
60-
target_link_libraries(caf_mpi_static
61-
PRIVATE gfortran)
62-
endif()
49+
50+
set(THREADS_PREFER_PTHREAD_FLAG TRUE)
51+
find_package(Threads REQUIRED)
52+
53+
message(STATUS "Threads found? ${Threads_FOUND}")
54+
message(STATUS "Thread library to use: ${CMAKE_THREAD_LIBS_INIT}")
55+
message(STATUS "Found threads library pthread compatible? ${CMAKE_USE_PTHREADS_INIT}")
56+
57+
target_link_libraries(caf_mpi
58+
PUBLIC Threads::Threads)
59+
set_target_properties(caf_mpi
60+
PROPERTIES LINKER_LANGUAGE Fortran)
61+
target_link_libraries(caf_mpi_static
62+
PUBLIC Threads::Threads)
63+
target_link_libraries(caf_mpi_static
64+
PRIVATE gfortran)
65+
6366
target_include_directories(caf_mpi PUBLIC
6467
$<$<COMPILE_LANGUAGE:C>:${MPI_C_INCLUDE_PATH}>
6568
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/src>
@@ -305,13 +308,14 @@ set(CMAKE_REQUIRED_INCLUDES ${old_cmake_required_includes})
305308
#
306309
# @CAF_VERSION@ @opencoarrays_aware_compiler@ @Fortran_COMPILER@ @CAF_MODDIR@
307310
# @CAF_MPI_Fortran_LINK_FLAGS@ @CAF_MPI_Fortran_COMPILE_FLAGS@
308-
# @CAF_LIBS@ @CAF_MPI_LIBS@
311+
# @CAF_LIBS@ @THREADS_LIB@ @CAF_MPI_LIBS@
309312
#
310313

311314
set(CAF_VERSION "${full_git_describe}")
312315
set(Fortran_COMPILER "${CMAKE_Fortran_COMPILER}")
313316
set(CAF_MODDIR "${CMAKE_INSTALL_INCLUDEDIR}/${mod_dir_tail}")
314317
set(MOD_DIR_FLAG "${CMAKE_Fortran_MODDIR_FLAG}")
318+
set(THREADS_LIB "${CMAKE_THREAD_LIBS_INIT}")
315319
set(CAF_MPI_LIBS "")
316320
foreach( lib IN LISTS MPI_Fortran_LIBRARIES)
317321
set(CAF_MPI_LIBS "${CAF_MPI_LIBS} \"${lib}\"")
@@ -330,7 +334,8 @@ string(STRIP "${CAF_MPI_Fortran_COMPILE_FLAGS}" CAF_MPI_Fortran_COMPILE_FLAGS)
330334
set_target_properties(caf_mpi_static
331335
PROPERTIES OUTPUT_NAME caf_mpi)
332336
get_target_property(libcaf_static caf_mpi_static OUTPUT_NAME)
333-
set(CAF_LIBS "${CMAKE_INSTALL_LIBDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}${libcaf_static}${CMAKE_STATIC_LIBRARY_SUFFIX}")
337+
set(CAF_LIBS
338+
"${CMAKE_INSTALL_LIBDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}${libcaf_static}${CMAKE_STATIC_LIBRARY_SUFFIX}")
334339

335340
configure_file("${CMAKE_SOURCE_DIR}/src/extensions/caf.in" "${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}/caf"
336341
@ONLY)

0 commit comments

Comments
 (0)