summaryrefslogtreecommitdiffstats
path: root/Modules/FindMPI.cmake
Commit message (Collapse)AuthorAgeFilesLines
* FindMPI: Discard IMPI boilerplate textChristian Pfeiffer2018-01-311-0/+4
| | | | | | Intel MPI on Windows prefixes all outputs with some boilerplate copyright text. By discarding it, we should prevent any potential clashes with our regex parsing.
* FindMPI: Support for IMPI's compiler checkChristian Pfeiffer2018-01-311-0/+27
| | | | | | Intel MPI has an optional feature to check compatibility with the compiler, given by I_MPI_CHECK_COMPILER. This commit adds support for executing that check.
* FindMPI: Set up environment variables for wrapperChristian Pfeiffer2018-01-311-5/+80
| | | | | | For MPICH derivates and Intel MPI, we can improve the compiler wrapper behavior and accuracy by defining certain environment variables if they haven't been set otherwise.
* FindMPI: Retain unused link pathsChristian Pfeiffer2018-01-301-6/+18
| | | | | | If our ``find_library`` step hasn't used a particular link directory at all, it's best to retain it in order to prevent issues from secondary dependencies not being found.
* FindMPI: Use more CMake variablesChristian Pfeiffer2018-01-301-59/+118
| | | | | | | | This replaces hardcoded expectations of flags like -l and -L with a dynamical solution based on CMake platform variables. Furthermore, the linker flag parsing is dynamified to support more forms and given linker paths are now removed properly from the linker flags.
* FindMPI: Improve link information parsingChristian Pfeiffer2018-01-251-53/+65
| | | | | | | | | The parsing of link information coming from the compiler wrapper has been improved: - Support MSVC /link argument separation properly and add support for potential VC++ link flags - Rely on the global import/static/shared library suffixes instead of hardcoded special values. This should improve compatibility with Cygwin and MinGW should any MPI implementation there need this behavior. - Don't use ``find_library`` if the full path of a library is known anyways.
* FindMPI: Move MSMPI/MPICH2 mpiexec searchChristian Pfeiffer2018-01-101-15/+45
| | | | | | | Move the logic to search mpiexec for MSMPI and MPICH2 guesses to their respective guessing logic. This way, we can prevent mix ups between their mpiexecs and other potential matches, for example from an Intel MPI installation.
* Merge topic 'findmpi-builtin-fix'Brad King2017-12-131-121/+168
|\ | | | | | | | | | | | | d1d8719f FindMPI: Fix various legacy problems Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !1569
| * FindMPI: Fix various legacy problemsChristian Pfeiffer2017-12-121-121/+168
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This MR fixes a number of bugs stemming from legacy variable handling, partially introduced by commit v3.10.0-rc1~103^2 (FindMPI: Add support for FreeBSD and SLES, 2017-08-09). * `MPI_COMPILE_OPTIONS` and `MPI_COMPILE_DEFINITIONS` legacy hints were not passed correctly. * Legacy variables could be parsed after they were set by `FindMPI` cause erroneous hinting on subsequent runs. * In the case of the compiler supporting MPI implicitly: * not all consumption variables would be correctly reset. * `MPI_<LANG>_HEADER_DIR` would be set unintentionally. * `MPI_<LANG>_LIB_NAMES` appeared in cache despite being ignored. * on subsequent passes, `MPI_<LANG>_COMPILER` could be corrupted. * the C-to-CXX copy logic would take place even if `MPI_SKIP_GUESSING` was turned on * if only some language compilers were given, inconsistent search behavior could be observed Issue: #17538
| * Merge branch 'findmpi-notfound-spam' into release-3.10Brad King2017-12-051-10/+16
| |\ | | | | | | | | | Merge-request: !1557
* | \ Merge topic 'findmpi-notfound-spam'Brad King2017-12-061-10/+16
|\ \ \ | | |/ | |/| | | | | | | | | | | | | bde7513d FindMPI: Correct legacy variable handling Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !1557
| * | FindMPI: Correct legacy variable handlingChristian Pfeiffer2017-12-051-10/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Due to a minor logic error, MPI_LIBRARY, MPI_EXTRA_LIBRARY and MPI_<LANG>_LIBRARIES hints are currently not correctly handled and discarded. Additionally, if either C or CXX aren't enabled, there subsequent calls to FindMPI will cause cache variables of the sort "MPI_MPI_EXTRA_LIBRARY-NOTFOUND" to appear due to an error in the compatibility handling. (Doesn't affect functionality)
* | | Merge topic 'findmpi-found-cond'Brad King2017-12-061-1/+1
|\ \ \ | | |/ | |/| | | | | | | | | | | | | 2047eb36 FindMPI: Fix multiple configure runs Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !1556
| * | FindMPI: Fix multiple configure runsChristian Pfeiffer2017-12-051-1/+1
| |/ | | | | | | | | | | | | | | | | | | Due to a erroneous logical dependency on a temporary variable, FindMPI would depend its FOUND status on the set of flags needed to support compiler-implicit MPI support after the first configure run. This behavior is especially causing a misreported NOT FOUND status after the first run on MPI implementations without MPI compiler like MS-MPI or MPICH2 on Windows.
* | FindMPI: Treat 'command not found' as an errorChristian Pfeiffer2017-11-151-1/+1
|/ | | | | | | | | If the compiler given in I_MPI_... could not be found, the Intel MPI wrappers emit an error like "line 590: ifort: command not found". The script should currently fail to match the output of this for information, but we should generally treat such an output as invalid, since the displayed configuration line can become a mixup between Intel and GNU compiler settings.
* FindMPI: Use physical cores for MPIEXEC_MAX_NUMPROCSChristian Pfeiffer2017-10-241-7/+2
| | | | | | | | | | | | | Since commit v3.9.0-rc1~224^2~1 (FindMPI: MPIEXEC handling improvements, 2017-04-21) the `ProcessorCount` module is being used to initialize `MPIEXEC_MAX_NUMPROCS`. However, this leads to the logical cores being counted rather than the physical ones, and some MPI implementations like OpenMPI will error if mpiexec is called with that number. Switch it to the number of physical cores using `cmake_host_system_information`. This ensures that if `MPIEXEC_MAX_NUMPROCS` is being used to set up MPI tests with CTest or similar that the tests won't spuriously fail due to OpenMPI refusing to start the application.
* FindMPI: Add support for FreeBSD and SLESChristian Pfeiffer2017-09-151-2/+29
| | | | Fixes: #17117
* FindMPI: Support components for various languagesChristian Pfeiffer2017-09-151-19/+71
|
* FindMPI: Modernization from ground upChristian Pfeiffer2017-09-151-480/+1154
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is a near-total rewrite of FindMPI implementing the following features: Environmental improvements: - C++ settings can now be picked from C settings if no dedicated C++ settings are found (some installs of IBM Platform MPI) - Fortran settings can now be found on MPICH-1, MVAPICH-1, Microsoft MPI and MPICH-2 on Windows. - Improved flag procession logic: Flags related to security enhancements of MPI itself, and unrelated to MPI usage (-fstack-protector-strong on e.g. RHEL 7 for MPICH and MVAPICH) will be filtered out properly now. -pthread is now being handled. -fno-strict-aliasing, which may be needed while compiling MVAPICH (e.g. RHEL 7's MVAPICH package) is also filtered. Features added: - MPI version can be determined for each language and is exposed as the package version - MPI functionality is being tested to ensure the correctness of settings - MPI-2 C++ bindings can be suppressed if desired by the project or user. For older MPIs, this often resolves issues and eliminated the infamous SEEK_SET trouble. - MPI-2 C++ bindings are now being searched for and exposed by a variable if detected. - Fortran support now does not make assumptions over the MPI present and works with ILP64 MPI implementations. - Fortran now exposes which bindings (mpif.h, mpi/mpi_f08 modules) are available - MPI detection can now work hybridly, which for example permits using the Fortran modules shipped with some compiler suites together with MPI (e.g. PGI on Windows shipping MSMPI modules) - Ability to determine MPI library version (*requires* try_run, caution) upon request - Ability to determine Fortran capabilities from MPI-3 for each of the bindings (subarrays, asynchronous attribute protecting entities) (also requires try_run) Fine grained control over the search process: - Possibility to selectively enable and disable steps like compiler wrapper search and guessing. Permits picking Microsoft MPI over Intel MPI if both are loaded (previously not possible without removing the IMPI compiler wrappers from the environment) - Ability to pick MPICH2 over MSMPI (previously the first one located was taken) - A user may now pass compiler flags to the compiler wrapper script, enabling much more flexibility. This permits for example linking the Intel MPI debug runtime, static linking, ILP64 with Fortran, linking tracing, ... - A user may define a suffix for all MPI binaries that are being looked for (useful on Debian/Ubuntu where the alternative MPI installs are each appended with their name, e.g. mpicc.mpich and mpicc.lam) Cache variable improvements - Instead of the previous plural cache variables a list-of-variables approach is now in place. Permits correcting individual variables instead of having to wade through a list, also speeds up the search process and increases comfort by eliminating duplicate entries in LIBRARIES over languages - MPIEXEC was corrected to MPIEXEC_EXECUTABLE in order to fix the grouping in the CMake GUI for the variable (previously ungrouped)
* separgs: Use NATIVE_COMMAND where appropriateChristian Pfeiffer2017-04-261-2/+1
|
* FindMPI: Modernize documentationChristian Pfeiffer2017-04-211-44/+45
|
* FindMPI: MPIEXEC handling improvementsChristian Pfeiffer2017-04-211-2/+13
|
* Merge topic 'findmpi-add-imported-targets'Brad King2017-04-191-0/+29
|\ | | | | | | | | | | | | | | 3ed9f635 FindMPI: Add test case 86979bb5 FindMPI: Add IMPORTED targets Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !707
| * FindMPI: Add IMPORTED targetsChristian Pfeiffer2017-04-151-0/+29
| |
* | FindMPI: Mark old MPI library entries as advancedChristian Pfeiffer2017-04-151-0/+1
|/
* Merge topic 'findmpi-flags-fix'Brad King2017-02-061-0/+4
|\ | | | | | | | | | | a2a73935 FindMPI: Remove leading spaces from flags 93f29be2 FindMPI: Reset MPI_INCLUDE_PATH_WORK before use
| * FindMPI: Remove leading spaces from flagsChristian Pfeiffer2017-02-021-0/+2
| |
| * FindMPI: Reset MPI_INCLUDE_PATH_WORK before useChristian Pfeiffer2017-02-011-0/+2
| |
* | FindMPI: Strip quotes from include path and convert to CMake path formatChristian Pfeiffer2017-01-231-0/+2
| |
* | FindMPI: Add Intel MPI wrapper names on WindowsChristian Pfeiffer2017-01-231-5/+6
|/
* Find*.cmake: drop the comments before including FPHSARolf Eike Beer2016-11-281-1/+0
| | | | | No need to explain this over and over again. While at it, do some other minor cleanups to whitespace and comments (i.e. delete them).
* Simplify CMake per-source license noticesBrad King2016-09-271-15/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | Per-source copyright/license notice headers that spell out copyright holder names and years are hard to maintain and often out-of-date or plain wrong. Precise contributor information is already maintained automatically by the version control tool. Ultimately it is the receiver of a file who is responsible for determining its licensing status, and per-source notices are merely a convenience. Therefore it is simpler and more accurate for each source to have a generic notice of the license name and references to more detailed information on copyright holders and full license terms. Our `Copyright.txt` file now contains a list of Contributors whose names appeared source-level copyright notices. It also references version control history for more precise information. Therefore we no longer need to spell out the list of Contributors in each source file notice. Replace CMake per-source copyright/license notice headers with a short description of the license and links to `Copyright.txt` and online information available from "https://cmake.org/licensing". The online URL also handles cases of modules being copied out of our source into other projects, so we can drop our notices about replacing links with full license text. Run the `Utilities/Scripts/filter-notices.bash` script to perform the majority of the replacements mechanically. Manually fix up shebang lines and trailing newlines in a few files. Manually update the notices in a few files that the script does not handle.
* Use string(APPEND) in ModulesDaniel Pfeifer2016-07-271-4/+4
| | | | | | | Automate with: find Modules -type f -print0 | xargs -0 perl -i -0pe \ 's/set\(([a-zA-Z0-9_]+)(\s+)"\$\{\1\}([^"])/string(APPEND \1\2"\3/g'
* FindMPI: Recognize `.lib` file names for specification of link librariesDominic Meiser2016-04-151-0/+11
| | | | | The Intel MPI compiler wrappers link against static MPI libraries simply by listing the libraries (no `-l`).
* FindMPI: Recognize /LIBPATH for specification of linker paths.Dominic Meiser2016-04-151-2/+2
| | | | The Intel MPI wrappers use this form of -L to specify library locations.
* FindMPI: Improve documentation formattingChristoph GrĂ¼ninger2016-04-111-12/+15
|
* FindMPI: Drop unnecessary and incorrect use of GetPrerequisitesBrad King2015-07-311-5/+3
| | | | | | | | | Since commit v2.8.5~121^2~2 (FindMPI: Handle multiple languages, 2010-12-29) we called the GetPrerequisites is_file_executable function but passed the name of a CMake variable instead of its value. Therefore the function has always failed and caused the search for the compiler name to run even with an absolute path. Switch to using if(IS_ABSOLUTE) instead and drop use of GetPrerequisites.
* FindMPI: Extend Intel-MPI 5+ workaround for recent GCCsSean Brennan2015-07-101-1/+1
| | | | | | Extend the workaround added by commit v3.2.0-rc1~278^2 (FindMPI: Workaround Intel MPI 5.0.1 exit code problem, 2014-12-04) with an additional/alternate keyword to recognize the case with recent GCCs.
* FindMPI: handle trailing slash from $MSMPI_BINBen Boeckel2015-01-141-1/+3
| | | | | | | | When installing, MSMPI puts a trailing backslash in the MSMPI_BIN environment variable. This causes trouble when concatenating in CMake since the list separator is now escaped and no longer a list separator due to the trailing backslash. Instead, use file(TO_CMAKE_PATH) to make the path CMake-friendly.
* FindMPI: MSMPI changed the subdirectories it usesBen Boeckel2015-01-061-3/+5
|
* FindMPI: add more search paths for MSMPIBen Boeckel2015-01-061-0/+4
| | | | Also comment what the various search paths are for.
* Merge topic 'FindMPI-parse-Xlinker-flags'Brad King2014-12-151-1/+1
|\ | | | | | | | | a0792c48 FindMPI: Extract -Xlinker options
| * FindMPI: Extract -Xlinker optionsAlin Marin Elena2014-12-121-1/+1
| | | | | | | | | | Extend the regex that mathces -Wl, linker options to match -Xlinker too. These are used by Intel MPI and perhaps others.
* | FindMPI: search for msmpi's mpiexec as wellBen Boeckel2014-12-111-0/+1
|/
* FindMPI: Workaround Intel MPI 5.0.1 exit code problem (#15182)Alin Marin Elena2014-12-041-0/+6
| | | | | | | This MPI compiler may return zero even in some error cases. Check the output to catch such cases. Suggested-by: Kelly Thompson <kgt@lanl.gov>
* FindMPI: Factor out compiler wrapper execution into helperAlin Marin Elena2014-12-041-21/+13
|
* Avoid if() quoted auto-dereferenceBen Boeckel2014-10-201-1/+1
| | | | | | | When testing CMAKE_<LANG>_COMPILER_ID values, do not explicitly dereference or quote the variable. We want if() to auto-dereference the variable and not its value. Also replace MATCHES with STREQUAL where equivalent.
* FindMPI: Honor MPI_HOME for MPIEXEC (#14347)Marcel Loose2014-08-111-1/+4
| | | | | | We already use MPI_HOME and ENV{MPI_HOME} as hints for the location of the MPI compilers. Do the same for mpiexec, and then use the location of mpiexec as a hint to find the compilers.
* Merge topic 'matches-cleanup'Brad King2014-04-151-2/+2
|\ | | | | | | | | | | | | | | | | | | f21ac16e Replace MATCHES test on numbers with EQUAL test 7eacbaed Replace MATCHES ".+" tests with NOT STREQUAL "" 3a71d34c Use CMAKE_SYSTEM_NAME instead of CMAKE_SYSTEM where sufficient b0b4b460 Remove .* expressions from beginning and end of MATCHES regexs 5bd48ac5 Replace string(REGEX REPLACE) with string(REPLACE) where possible 2622bc3f Clean up usage of if(... MATCHES regex) followed string(REGEX REPLACE regex)
| * Replace string(REGEX REPLACE) with string(REPLACE) where possibleRolf Eike Beer2014-04-141-2/+2
| | | | | | | | The simple replacement is much faster.