<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Exchange Server">
<!-- converted from rtf -->
<style><!-- .EmailQuote { margin-left: 1pt; padding-left: 4pt; border-left: #800000 2px solid; } --></style>
</head>
<body>
<font face="Arial, sans-serif" size="2">
<div>Hello,</div>
<div>&nbsp;</div>
<div>What is the origin of the current FindMPI.cmake module?&nbsp; I am not very happy with this module and I don't even fully understand why is was written the way that it is.</div>
<div>&nbsp;</div>
<div>Specific issues that I have are:</div>
<div>&nbsp;</div>
<div>1) It does not really take advantage of MPI compiler wrappers like it should.&nbsp; The whole purpose of having an MPI compiler wrapper is to avoid having to explicitly match up the C/C&#43;&#43;/Fortran compilers, get the compiler flags, and list the link libraries.&nbsp;
Trying to match the raw C, C&#43;&#43;, and Fortran compilers with the MPI compiler wrappers is asking for trouble and will result in subtle bugs.</div>
<div>&nbsp;</div>
<div>2) It does not provide or differentiate C, C&#43;&#43;, and Fortran compilers.&nbsp; It just specifies MPI_COMPILER.&nbsp; Is that a C or C&#43;&#43; compiler?&nbsp; This matter to many projects.</div>
<div>&nbsp;</div>
<div>3) Getting MPI setup when it is in a non-standard location is very hard (or at least I have not figured out the easy way).</div>
<div>&nbsp;</div>
<div>I am seriously considering completely writing our own version of FindMPI.cmake for Trilinos (called FindTPLMPI.cmake).&nbsp; The major features of a new MPI find module would be:</div>
<div>&nbsp;</div>
<div>1) It will differentiate C, C&#43;&#43;, and Fortran MPI compilers</div>
<div>&nbsp;</div>
<div>2) It will keep the MPI compilers intact and not try to extract out compile options and MPI libraries.</div>
<div>&nbsp;</div>
<div>3) The MPI compilers will automatically be set as CMAKE_[C,CXX,Fortran]_COMPILER *before* the languages are enabled and the compilers are checked.&nbsp; This will make sure that every bit of code is built and linked in a consistent way (including during the
various configure-time checks).&nbsp; The trouble that you might have is with try_run(...) commands and some MPI implementations that require an explicit boot (like LAM MPI).&nbsp; Most MPI implementations allow you to just run the executable without mpirun or mpiexec
and it will run correctly for a single process.</div>
<div>&nbsp;</div>
<div>4) The standard MPI install structure of many MPI implementations (e.g. MPICH, OpenMPI, LAM MPI etc.) of prefix/[include, bin] will be exploited and searching from MPI_BASE_DIR (which is set by the client) will be done.&nbsp; In this way, you can just set a
single cache variable on most systems and get MPI totally set up.</div>
<div>&nbsp;</div>
<div>These days, I don't know if anyone still uses raw compilers and then tries to manually pass in the compiler options and link libraries.&nbsp; We can still support such a thing but I think this is the 1% exception instead of the rule.&nbsp; Am I wrong about this?</div>
<div>&nbsp;</div>
<div>Does anyone else have similar frustrations with FindMPI.cmake and would like to see a new implementation as described above?&nbsp; How many CMake projects have a serious MPI component that use FindMPI.cmake?</div>
<div>&nbsp;</div>
<div>Cheers,</div>
<div>&nbsp;</div>
<div>- Ross</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
</font>
</body>
</html>