[cmake-developers] Proposed patch for FindMPI.cmake (Intel MPI)
Thompson, KT
kgt at lanl.gov
Thu Oct 30 10:41:31 EDT 2014
Please find below a proposed patch that addresses this bug: http://public.kitware.com/Bug/view.php?id=15182 (FindMPI.cmake fails to properly detect Intel MPI 5.0.1). Because the return code is unreliable for the Intel MPI compile wrappers (e.g.: 'mpiicpc -showme:compile'), the output text must be interrogated for possible issues. My choice of "undefined reference" may not be the best choice, but it works for all of my test cases.
I have tested this patch with OpenMPI, MPICH2 and Intel MPI on RHEL 6.4 and RHEL 6.4. I have also tested it on Win7 with VS2013 using Microsoft HPC Pack 2008 R2 MPI.
Would anyone like to provide feedback or test this modification? What do I need to do to get this into release code?
-kt
Kelly Thompson
======================================================================================
--- a/Modules/FindMPI.cmake
+++ b/Modules/FindMPI.cmake
@@ -226,6 +226,13 @@ function (interrogate_mpi_compiler lang try_libs)
ERROR_VARIABLE MPI_COMPILE_CMDLINE ERROR_STRIP_TRAILING_WHITESPACE
RESULT_VARIABLE MPI_COMPILER_RETURN)
+ # Intel MPI will return a zero return code even when the
+ # argument to the MPI compiler wrapper is unknown. Attempt to
+ # catch this case.
+ if( "${MPI_COMPILE_CMDLINE}" MATCHES "undefined reference" )
+ set( MPI_COMPILER_RETURN 255 )
+ endif()
+
if (MPI_COMPILER_RETURN EQUAL 0)
# If we appear to have -showme:compile, then we should
# also have -showme:link. Try it.
@@ -264,7 +271,15 @@ function (interrogate_mpi_compiler lang try_libs)
RESULT_VARIABLE MPI_COMPILER_RETURN)
endif()
+ # Intel MPI will return a zero return code even when the
+ # argument to the MPI compiler wrapper is unknown. Attempt to
+ # catch this case.
+ if( "${MPI_COMPILE_CMDLINE}" MATCHES "undefined reference" )
+ set( MPI_COMPILER_RETURN 255 )
+ endif()
+
# MVAPICH uses -compile-info and -link-info. Try them.
+ # Intel and Cray MPICH2 flavors will likely follow this path.
if (NOT MPI_COMPILER_RETURN EQUAL 0)
execute_process(
COMMAND ${MPI_${lang}_COMPILER} -compile-info
@@ -378,7 +393,6 @@ function (interrogate_mpi_compiler lang try_libs)
# Extract the set of libraries to link against from the link command
# line
string(REGEX MATCHALL "(^| )-l([^\" ]+|\"[^\"]+\")" MPI_LIBNAMES "${MPI_LINK_CMDLINE}")
-
# add the compiler implicit directories because some compilers
# such as the intel compiler have libraries that show up
# in the showme list that can only be found in the implicit
@@ -588,6 +602,7 @@ foreach (lang C CXX Fortran)
HINTS ${_MPI_BASE_DIR}/bin
PATHS ${_MPI_PREFIX_PATH}
)
+
interrogate_mpi_compiler(${lang} ${try_libs})
mark_as_advanced(MPI_${lang}_COMPILER)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/cmake-developers/attachments/20141030/88e937b1/attachment.html>
More information about the cmake-developers
mailing list