renamed GMX_THREADS to GMX_THREAD_MPI
[alexxy/gromacs.git] / cmake / gmxManageMPI.cmake
1 # Manage the MPI setup, assuming that CMAKE_C_COMPILER is an MPI
2 # (wrapper) compiler.
3 if(GMX_MPI)
4   if(GMX_THREAD_MPI)
5     message(STATUS "MPI is not compatible with thread-MPI. Disabling thread-MPI.")
6     set(GMX_THREAD_MPI OFF CACHE BOOL
7         "Build a thread-MPI-based multithreaded version of GROMACS (not compatible with MPI)" FORCE)
8   endif(GMX_THREAD_MPI)
9
10   # Test the CMAKE_C_COMPILER for being an MPI (wrapper) compiler
11   TRY_COMPILE(MPI_FOUND ${CMAKE_BINARY_DIR}
12     "${CMAKE_SOURCE_DIR}/cmake/TestMPI.c"
13     COMPILE_DEFINITIONS )
14
15   if(MPI_FOUND)
16     if(GMX_FAHCORE)
17       add_definitions( -DMPI ) #for FAHCORE
18     endif()
19     include(gmxTestMPI_IN_PLACE)
20     if (GMX_MPI_IN_PLACE)
21       gmx_test_mpi_in_place(MPI_IN_PLACE_EXISTS)
22     endif()
23
24     # Test for and warn about unsuitable MPI versions
25     exec_program(ompi_info
26       ARGS -v ompi full
27       OUTPUT_VARIABLE OPENMPI_TYPE
28       RETURN_VALUE OPENMPI_EXEC_RETURN)
29     if(OPENMPI_EXEC_RETURN EQUAL 0)
30       string(REGEX REPLACE ".*Open MPI: \([0-9]+\\.[0-9]*\\.?[0-9]*\).*" "\\1" OPENMPI_VERSION ${OPENMPI_TYPE})
31       if(OPENMPI_VERSION VERSION_LESS "1.4.1")
32         MESSAGE(WARNING "
33              CMake found OpenMPI version ${OPENMPI_VERSION} on your system.
34              There are known problems with GROMACS and OpenMPI version < 1.4.1.
35              Please consider updating your OpenMPI if your MPI wrapper compilers
36              are using the above OpenMPI version.")
37       endif()
38       unset(OPENMPI_VERSION)
39       unset(OPENMPI_TYPE)
40       unset(OPENMPI_EXEC_RETURN)
41     endif()
42     exec_program(mpiname
43       ARGS -n -v
44       OUTPUT_VARIABLE MVAPICH2_TYPE
45       RETURN_VALUE MVAPICH2_EXEC_RETURN)
46     if(MVAPICH2_EXEC_RETURN EQUAL 0)
47       string(REGEX MATCH "MVAPICH2" MVAPICH2_NAME ${MVAPICH2_TYPE})
48       # Want to check for MVAPICH2 in case some other library supplies mpiname
49       string(REGEX REPLACE "MVAPICH2 \([0-9]+\\.[0-9]*[a-z]?\\.?[0-9]*\)" "\\1" MVAPICH2_VERSION ${MVAPICH2_TYPE})
50       if(${MVAPICH2_NAME} STREQUAL "MVAPICH2" AND MVAPICH2_VERSION VERSION_LESS "1.5")
51         # This test works correctly even with 1.5a1
52         MESSAGE(WARNING "
53              CMake found MVAPICH2 version ${MVAPICH2_VERSION} on your system.
54              There are known problems with GROMACS and MVAPICH2 version < 1.5.
55              Please consider updating your MVAPICH2 if your MPI wrapper compilers
56              are using the above MVAPICH2 version.")
57       endif()
58       unset(MVAPICH2_VERSION)
59       unset(MVAPICH2_NAME)
60       unset(MVAPICH2_TYPE)
61       unset(MVAPICH2_EXEC_RETURN)
62     endif()
63
64   else(MPI_FOUND)
65     message(FATAL_ERROR "MPI support requested, but no MPI compiler found.")
66   endif(MPI_FOUND)
67
68   include(gmxTestCatamount)
69   gmx_test_catamount(GMX_CRAY_XT3)
70   if(GMX_CRAY_XT3)
71     set(PKG_CFLAGS "${PKG_CFLAGS} -DGMX_CRAY_XT3")
72     set(GMX_NO_SYSTEM 1)
73     set(GMX_NO_NICE 1)
74   endif(GMX_CRAY_XT3)
75
76   set(GMX_LIB_MPI 1)
77   set(PKG_CFLAGS "${PKG_CFLAGS} -DGMX_LIB_MPI")
78 endif(GMX_MPI)