From c929797115b3c7a0da5c6ecae2ccfb12057f51d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20M=C3=BCtzel?= Date: Tue, 27 Aug 2024 23:00:08 +0200 Subject: [PATCH 1/2] Fix error in configuration test for MPI_IN_PLACE. Almost all MPI functions in Fortran need an additional argument for returning an error code. Add that argument when calling `MPI_AllReduce` in the test program. --- cmake/Modules/testMPIcapabilities.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/Modules/testMPIcapabilities.cmake b/cmake/Modules/testMPIcapabilities.cmake index 685d585940..7f4a02bff0 100644 --- a/cmake/Modules/testMPIcapabilities.cmake +++ b/cmake/Modules/testMPIcapabilities.cmake @@ -27,7 +27,7 @@ else() PRINT *, \"test1 =\", test1 CALL MPI_Init(ierr) - CALL MPI_Allreduce(MPI_IN_PLACE, test1, 3, MPI_DOUBLE_PRECISION, MPI_SUM, MPI_COMM_WORLD) + CALL MPI_Allreduce(MPI_IN_PLACE, test1, 3, MPI_DOUBLE_PRECISION, MPI_SUM, MPI_COMM_WORLD, ierr) CALL MPI_Finalize(ierr) PRINT *, \"test1 =\", test1 From c8e0aecb17f3cbe537ed0e5cb0d0b4078c1446af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20M=C3=BCtzel?= Date: Wed, 28 Aug 2024 14:05:29 +0200 Subject: [PATCH 2/2] Link to imported target `MPI::MPI_Fortran` in test for MPI_IN_PLACE Overriding `CMAKE_Fortran_COMPILER` doesn't have an effect for `try_run`. Instead, link to the imported target `MPI::MPI_Fortran` which should contain all settings that are needed to build a Fortran file using MPI functions. Also, check if compilation of the test program failed. --- cmake/Modules/testMPIcapabilities.cmake | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/cmake/Modules/testMPIcapabilities.cmake b/cmake/Modules/testMPIcapabilities.cmake index 7f4a02bff0..9a51e9bc82 100644 --- a/cmake/Modules/testMPIcapabilities.cmake +++ b/cmake/Modules/testMPIcapabilities.cmake @@ -5,13 +5,12 @@ if(CMAKE_CROSSCOMPILING) # assume it is working - message(STATUS "Checking whether MPI_IN_PLACE is supported with ${CMAKE_Fortran_COMPILER} -- assuming yes") + message(STATUS "Checking whether MPI_IN_PLACE is supported with ${MPI_Fortran_COMPILER} -- assuming yes") set(CHECK_MPI_IN_PLACE_RUN_ERROR OFF) + set(CHECK_MPI_IN_PLACE_COMPILE ON) else() - set(save_CMAKE_Fortran_COMPILER ${CMAKE_Fortran_COMPILER}) - set(CMAKE_Fortran_COMPILER ${MPI_Fortran_COMPILER}) - message(STATUS "Checking whether MPI_IN_PLACE is supported with ${CMAKE_Fortran_COMPILER}") + message(STATUS "Checking whether MPI_IN_PLACE is supported with ${MPI_Fortran_COMPILER}") file(WRITE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testMPI_IN_PLACE.f90 " @@ -38,17 +37,14 @@ else() END PROGRAM TEST_MPI_IN_PLACE ") try_run(CHECK_MPI_IN_PLACE_RUN_ERROR CHECK_MPI_IN_PLACE_COMPILE ${CMAKE_BINARY_DIR} - SOURCES ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testMPI_IN_PLACE.f90) + SOURCES ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testMPI_IN_PLACE.f90 + LINK_LIBRARIES MPI::MPI_Fortran) endif() -if(CHECK_MPI_IN_PLACE_RUN_ERROR) - message(STATUS "Checking whether MPI_IN_PLACE is supported with ${CMAKE_Fortran_COMPILER} -- no") +if(CHECK_MPI_IN_PLACE_RUN_ERROR OR NOT CHECK_MPI_IN_PLACE_COMPILE) + message(STATUS "Checking whether MPI_IN_PLACE is supported with ${MPI_Fortran_COMPILER} -- no") set(ELMER_BROKEN_MPI_IN_PLACE ON CACHE INTERNAL "") else() - message(STATUS "Checking whether MPI_IN_PLACE is supported with ${CMAKE_Fortran_COMPILER} -- yes") + message(STATUS "Checking whether MPI_IN_PLACE is supported with ${MPI_Fortran_COMPILER} -- yes") set(ELMER_BROKEN_MPI_IN_PLACE OFF CACHE INTERNAL "") endif() - -if(NOT CMAKE_CROSSCOMPILING) - set(CMAKE_Fortran_COMPILER ${save_CMAKE_Fortran_COMPILER}) -endif()