From 61b83d2586c2a19eadeb517f898792727febd230 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jakub=20Klinkovsk=C3=BD?= <klinkjak@fjfi.cvut.cz>
Date: Sun, 16 Sep 2018 17:44:51 +0200
Subject: [PATCH] Improved detection of MPI using mpicxx instead of mpic++ to
 catch Intel-MPI

---
 CMakeLists.txt                                |  7 +--
 build                                         | 11 ++--
 src/TNL/CMakeLists.txt                        | 53 ++++++++++---------
 .../Meshes/DistributedMeshes/CMakeLists.txt   |  2 +-
 4 files changed, 38 insertions(+), 35 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 033984a89f..851e28ec2e 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -123,10 +123,11 @@ endif()
 #####
 # Check for MPI -- poznej podle vraperu compileru -- da se testovat preklad bez MPI
 #
-if( ${CXX_COMPILER_NAME} STREQUAL "mpic++" )
+if( ${CXX_COMPILER_NAME} STREQUAL "mpicxx" )
    message( "MPI compiler detected."    )
    set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DHAVE_MPI" )
-   set( CUDA_HOST_COMPILER "mpic++" )
+   set( CUDA_HOST_COMPILER "mpicxx" )
+   set( BUILD_MPI ON )
 endif()
 
 ####
@@ -164,7 +165,7 @@ if( ${WITH_CUDA} )
             endif()
         endif()
         # An extra CUDA_ARCH_HOST_COMPILER variable for compiling tnl-cuda-arch alone,
-        # because it SHOULD NOT be compiled using mpic++, which would cause weird
+        # because it SHOULD NOT be compiled using mpicxx, which would cause weird
         # RPATH_CHANGE error in cmake.
         # FIXME: find better solution to switch between MPI-enabled and MPI-disabled binaries in cmake
         if( NOT $ENV{CUDA_ARCH_HOST_COMPILER} STREQUAL "" )
diff --git a/build b/build
index 69f01cb406..13929b2025 100755
--- a/build
+++ b/build
@@ -114,17 +114,18 @@ if [[ ${WITH_CLANG} == "yes" ]]; then
 fi
 
 if [[ ${WITH_MPI} == "yes" ]]; then
-    if [[ ! -x  "$(command -v mpic++)" ]]; then
-       echo "Warning:mpic++ is not installed on this system. MPI support is turned off." 
+    # NOTE: OpenMPI provides mpic++, but Intel MPI does not
+    if [[ ! -x  "$(command -v mpicxx)" ]]; then
+       echo "Warning: mpicxx is not installed on this system. MPI support is turned off."
     else
        # instruct OpenMPI to use the original compiler
        # reference: https://www.open-mpi.org/faq/?category=mpi-apps#override-wrappers-after-v1.0
-       # FIXME: this does not work with CUDA_HOST_COMPILER=mpic++
+       # FIXME: this does not work with CUDA_HOST_COMPILER=mpicxx
 #       if [ -n "$CXX" ]; then
 #          export OMPI_CXX="$CXX"
 #       fi
-       export CXX=mpic++
-       export CUDA_HOST_COMPILER=mpic++
+       export CXX=mpicxx
+       export CUDA_HOST_COMPILER=mpicxx
     fi
     if [[ ! -x  "$(command -v mpicc)" ]]; then
        echo "Warning: mpicc is not installed on this system." 
diff --git a/src/TNL/CMakeLists.txt b/src/TNL/CMakeLists.txt
index f56960b7de..cd07ae6591 100644
--- a/src/TNL/CMakeLists.txt
+++ b/src/TNL/CMakeLists.txt
@@ -100,31 +100,32 @@ TARGET_LINK_LIBRARIES( tnl
 
 INSTALL( TARGETS tnl DESTINATION lib )
 
-IF( BUILD_MPI )
-
-   ADD_LIBRARY( tnl-mpi_static STATIC ${tnl_SOURCES} )
-   INSTALL( TARGETS tnl-mpi_static DESTINATION lib )
-
-   if( BUILD_CUDA )
-      CUDA_ADD_LIBRARY( tnl-mpi SHARED ${tnl_CUDA__SOURCES}
-                        OPTIONS ${CUDA_ADD_LIBRARY_OPTIONS} )
-      # the static library with CUDA support has to be built separately
-      CUDA_ADD_LIBRARY( tnl-mpi-cuda_static STATIC ${tnl_CUDA__SOURCES} )
-      INSTALL( TARGETS tnl-mpi-cuda_static DESTINATION lib )
-   else( BUILD_CUDA )
-      ADD_LIBRARY( tnl-mpi SHARED ${tnl_SOURCES} )
-   endif( BUILD_CUDA )
-
-   SET_TARGET_PROPERTIES( tnl-mpi PROPERTIES
-                          VERSION ${tnlVersion} )
-#   SET_TARGET_PROPERTIES( tnl-mpi
-#                          LINK_INTERFACE_LIBRARIES "")
-
-
-   TARGET_LINK_LIBRARIES( tnl-mpi
-                          ${MPI_LIBRARIES} )
-   INSTALL( TARGETS tnl-mpi DESTINATION lib )
-
-endif()
+# NOTE: this is not necessary until something in the library file actually depends on MPI
+#IF( BUILD_MPI )
+#
+#   ADD_LIBRARY( tnl-mpi_static STATIC ${tnl_SOURCES} )
+#   INSTALL( TARGETS tnl-mpi_static DESTINATION lib )
+#
+#   if( BUILD_CUDA )
+#      CUDA_ADD_LIBRARY( tnl-mpi SHARED ${tnl_CUDA__SOURCES}
+#                        OPTIONS ${CUDA_ADD_LIBRARY_OPTIONS} )
+#      # the static library with CUDA support has to be built separately
+#      CUDA_ADD_LIBRARY( tnl-mpi-cuda_static STATIC ${tnl_CUDA__SOURCES} )
+#      INSTALL( TARGETS tnl-mpi-cuda_static DESTINATION lib )
+#   else( BUILD_CUDA )
+#      ADD_LIBRARY( tnl-mpi SHARED ${tnl_SOURCES} )
+#   endif( BUILD_CUDA )
+#
+#   SET_TARGET_PROPERTIES( tnl-mpi PROPERTIES
+#                          VERSION ${tnlVersion} )
+##   SET_TARGET_PROPERTIES( tnl-mpi
+##                          LINK_INTERFACE_LIBRARIES "")
+#
+#
+#   TARGET_LINK_LIBRARIES( tnl-mpi
+#                          ${MPI_LIBRARIES} )
+#   INSTALL( TARGETS tnl-mpi DESTINATION lib )
+#
+#endif()
 
 INSTALL( FILES ${headers} DESTINATION ${TNL_TARGET_INCLUDE_DIRECTORY} )
diff --git a/src/UnitTests/Meshes/DistributedMeshes/CMakeLists.txt b/src/UnitTests/Meshes/DistributedMeshes/CMakeLists.txt
index 71cca245d1..ad4127dbd7 100644
--- a/src/UnitTests/Meshes/DistributedMeshes/CMakeLists.txt
+++ b/src/UnitTests/Meshes/DistributedMeshes/CMakeLists.txt
@@ -20,7 +20,7 @@ ADD_TEST( NAME DirectionsTest COMMAND ${EXECUTABLE_OUTPUT_PATH}/DirectionsTest${
 ADD_TEST( NAME CopyEntitesTest COMMAND ${EXECUTABLE_OUTPUT_PATH}/CopyEntitesTest${CMAKE_EXECUTABLE_SUFFIX} )
 ADD_TEST( NAME CutMeshFunctionTest COMMAND ${EXECUTABLE_OUTPUT_PATH}/CutMeshFunctionTest${CMAKE_EXECUTABLE_SUFFIX} )
 
-if( ${CXX_COMPILER_NAME} STREQUAL "mpic++" )
+if( BUILD_MPI )
 ADD_EXECUTABLE( DistributedGridTest_1D DistributedGridTest_1D.cpp )
    TARGET_COMPILE_OPTIONS( DistributedGridTest_1D PRIVATE ${CXX_TESTS_FLAGS} )
    TARGET_LINK_LIBRARIES( DistributedGridTest_1D
-- 
GitLab