From cadba6b200a3a1f0335edd93c0bd1166dc5a7af2 Mon Sep 17 00:00:00 2001 From: Matthias Maier Date: Fri, 15 Mar 2019 12:14:45 -0500 Subject: [PATCH] CMake: Reorganize MPI sanity check --- cmake/configure/configure_1_mpi.cmake | 80 +++++++++++++++++++-------- 1 file changed, 58 insertions(+), 22 deletions(-) diff --git a/cmake/configure/configure_1_mpi.cmake b/cmake/configure/configure_1_mpi.cmake index f5e349b112..f3f27eb92e 100644 --- a/cmake/configure/configure_1_mpi.cmake +++ b/cmake/configure/configure_1_mpi.cmake @@ -39,42 +39,78 @@ MACRO(FEATURE_MPI_FIND_EXTERNAL var) SET(${var} FALSE) ENDIF() + # + # Check that we can link with the full MPI interface: + # + + SET(_linker_flags "${DEAL_II_LINKER_FLAGS}") + CHECK_COMPILER_SETUP( "${DEAL_II_CXX_FLAGS} ${DEAL_II_CXX_FLAGS_SAVED} ${MPI_CXX_FLAGS}" - "${DEAL_II_LINKER_FLAGS} ${DEAL_II_LINKER_FLAGS_SAVED} ${MPI_LINKER_FLAGS}" + "${_linker_flags} ${DEAL_II_LINKER_FLAGS_SAVED} ${MPI_LINKER_FLAGS}" MPI_WORKING_COMPILER ${DEAL_II_LIBRARIES} ${MPI_LIBRARIES} ) - IF(NOT MPI_WORKING_COMPILER) - # - # Try a workaround and drop "-fuse-ld=gold" (if present) from the - # linker invocation - # - MESSAGE(STATUS "Unable to compile a simple test program. " - "Try to drop \"-fuse-ld=gold\" from the linker flags." + IF(NOT MPI_WORKING_COMPILER AND DEAL_II_COMPILER_HAS_FUSE_LD_LLD) + MESSAGE(STATUS + "Unable to compile a simple test program. " + "Trying to drop \"-fuse-ld=lld\" from the linker flags." ) - STRING(REPLACE "-fuse-ld=gold" "" _filtered_flags "${DEAL_II_LINKER_FLAGS}") + + IF(DEAL_II_COMPILER_HAS_FUSE_LD_GOLD) + STRING(REPLACE "-fuse-ld=lld" "-fuse-ld=gold" + _linker_flags "${_linker_flags}" + ) + ELSE() + STRING(REPLACE "-fuse-ld=lld" "" + _linker_flags "${_linker_flags}" + ) + ENDIF() + + SET(DEAL_II_COMPILER_HAS_FUSE_LD_LLD FALSE CACHE INTERNAL "" FORCE) + SET(DEAL_II_COMPILER_HAS_FUSE_LD_LLD FALSE) CHECK_COMPILER_SETUP( "${DEAL_II_CXX_FLAGS} ${DEAL_II_CXX_FLAGS_SAVED} ${MPI_CXX_FLAGS}" - "${_filtered_flags} ${DEAL_II_LINKER_FLAGS_SAVED} ${MPI_LINKER_FLAGS}" + "${_linker_flags} ${DEAL_II_LINKER_FLAGS_SAVED} ${MPI_LINKER_FLAGS}" MPI_WORKING_COMPILER ${DEAL_II_LIBRARIES} ${MPI_LIBRARIES} ) + ENDIF() - IF(MPI_WORKING_COMPILER) - SET(DEAL_II_LINKER_FLAGS "${_filtered_flags}") - ELSE() - MESSAGE(STATUS "Could not find a sufficient MPI installation: " - "Unable to compile a simple test program." - ) - SET(MPI_ADDITIONAL_ERROR_STRING - ${MPI_ADDITIONAL_ERROR_STRING} - "Unable to compile and link a simple test program with your MPI installation. \n" - ) - SET(${var} FALSE) - ENDIF() + IF(NOT MPI_WORKING_COMPILER AND DEAL_II_COMPILER_HAS_FUSE_LD_GOLD) + MESSAGE(STATUS + "Unable to compile a simple test program. " + "Trying to drop \"-fuse-ld=gold\" from the linker flags." + ) + + STRING(REPLACE "-fuse-ld=gold" "" + _linker_flags "${_linker_flags}" + ) + + SET(DEAL_II_COMPILER_HAS_FUSE_LD_GOLD FALSE CACHE INTERNAL "" FORCE) + SET(DEAL_II_COMPILER_HAS_FUSE_LD_GOLD FALSE) + + CHECK_COMPILER_SETUP( + "${DEAL_II_CXX_FLAGS} ${DEAL_II_CXX_FLAGS_SAVED} ${MPI_CXX_FLAGS}" + "${_linker_flags} ${DEAL_II_LINKER_FLAGS_SAVED} ${MPI_LINKER_FLAGS}" + MPI_WORKING_COMPILER + ${DEAL_II_LIBRARIES} ${MPI_LIBRARIES} + ) + ENDIF() + + IF(MPI_WORKING_COMPILER) + SET(DEAL_II_LINKER_FLAGS "${_linker_flags}") + ELSE() + MESSAGE(STATUS "Could not find a sufficient MPI installation: " + "Unable to compile a simple test program." + ) + SET(MPI_ADDITIONAL_ERROR_STRING + ${MPI_ADDITIONAL_ERROR_STRING} + "Unable to compile and link a simple test program with your MPI installation. \n" + ) + SET(${var} FALSE) ENDIF() ENDIF() -- 2.39.5