From 8166256f3f0e5a849bd5a0098c9878167b06bf7a Mon Sep 17 00:00:00 2001 From: Izaak Beekman Date: Tue, 21 May 2019 13:03:08 -0400 Subject: [PATCH] Enable PSBLAS to find & build w/ OpenCoarrays --- CMakeLists.txt | 63 ++++++++++++++++++++++++++++++++++---------------- 1 file changed, 43 insertions(+), 20 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 34495bb32..09f732f0d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -34,6 +34,13 @@ project(psblas VERSION "${PSBLAS_Version}" LANGUAGES C Fortran) +#-------------------------------------------------- +# Set option to allow building against OpenCoarrays +#-------------------------------------------------- +if(CMAKE_Fortran_COMPILER_ID MATCHES "GNU") + option(PSBLAS_USE_OpenCoarrays "Build enabling linkage to programs using OpenCoarrays" OFF) +endif() + #----------------------------------------------------------------- # Define a target to create a checksummed & signed release archive #----------------------------------------------------------------- @@ -277,6 +284,14 @@ else() set(SERIAL_MPI ON) endif() +#------------------------------------------------------- +# Find and Use OpenCoarrays IFF gfortran AND options set +#------------------------------------------------------- + +if("${PSBLAS_USE_OpenCoarrays}" AND CMAKE_Fortran_COMPILER_ID MATCHES GNU) + find_package(OpenCoarrays) +endif() + #------------------------------ # Find Linear Algebra Libraries #------------------------------ @@ -347,25 +362,24 @@ install( "${CMAKE_INSTALL_LIBDIR}/cmake/psblas" ) +#------------------------------------------ +# Add portable unistall command to makefile +#------------------------------------------ +# Adapted from the CMake Wiki FAQ +configure_file ( "${CMAKE_SOURCE_DIR}/cmake/uninstall.cmake.in" "${CMAKE_BINARY_DIR}/uninstall.cmake" + @ONLY) + +add_custom_target ( uninstall + COMMAND ${CMAKE_COMMAND} -P "${CMAKE_BINARY_DIR}/uninstall.cmake" ) +add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND} --output-on-failure) +# See JSON-Fortran's CMakeLists.txt file to find out how to get the check target to depend +# on the test executables + +#---------------------------------- +# Determine if we're using Open MPI +#--------------------------------- if(MPI_FOUND) - #------------------------------------------ - # Add portable unistall command to makefile - #------------------------------------------ - # Adapted from the CMake Wiki FAQ - configure_file ( "${CMAKE_SOURCE_DIR}/cmake/uninstall.cmake.in" "${CMAKE_BINARY_DIR}/uninstall.cmake" - @ONLY) - - add_custom_target ( uninstall - COMMAND ${CMAKE_COMMAND} -P "${CMAKE_BINARY_DIR}/uninstall.cmake" ) - - add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND} --output-on-failure) - # See JSON-Fortran's CMakeLists.txt file to find out how to get the check target to depend - # on the test executables - - #---------------------------------- - # Determine if we're using Open MPI - #--------------------------------- execute_process(COMMAND ${MPIEXEC} --version OUTPUT_VARIABLE mpi_version_out) if (mpi_version_out MATCHES "[Oo]pen[ -][Mm][Pp][Ii]") @@ -409,9 +423,6 @@ set_target_properties(base target_include_directories(base PUBLIC $ $) -if(MPI_FOUND) - target_link_libraries(base PUBLIC ${MPI_C_LIBRARIES} ${MPI_Fortran_LIBRARIES}) -endif() target_link_libraries(base PUBLIC ${LAPACK_LINKER_FLAGS} ${LAPACK_LIBRARIES} ${LAPACK95_LIBRARIES} PUBLIC ${BLAS_LINKER_FLAGS} ${BLAS_LIBRARIES} ${BLAS95_LIBRARIES}) @@ -491,6 +502,18 @@ if(METIS_FOUND) PUBLIC HAVE_METIS) endif() +if(MPI_FOUND) + foreach(lib base prec krylov util) + target_link_libraries(${lib} PUBLIC ${MPI_C_LIBRARIES} ${MPI_Fortran_LIBRARIES}) + endforeach() +endif() + +if(OpenCoarrays_FOUND) + foreach(lib base prec krylov util) + target_link_libraries(${lib} PUBLIC OpenCoarrays::caf_mpi_static) + endforeach() +endif() + install(DIRECTORY "${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_INCLUDEDIR}/" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" FILES_MATCHING PATTERN "*.mod") install(TARGETS base prec krylov util