]> SALOME platform Git repositories - modules/kernel.git/blob - salome_adm/cmake_files/FindMPI.cmake
Salome HOME
*** empty log message ***
[modules/kernel.git] / salome_adm / cmake_files / FindMPI.cmake
1 #  Copyright (C) 2007-2010  CEA/DEN, EDF R&D, OPEN CASCADE
2 #
3 #  This library is free software; you can redistribute it and/or
4 #  modify it under the terms of the GNU Lesser General Public
5 #  License as published by the Free Software Foundation; either
6 #  version 2.1 of the License.
7 #
8 #  This library is distributed in the hope that it will be useful,
9 #  but WITHOUT ANY WARRANTY; without even the implied warranty of
10 #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11 #  Lesser General Public License for more details.
12 #
13 #  You should have received a copy of the GNU Lesser General Public
14 #  License along with this library; if not, write to the Free Software
15 #  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
16 #
17 #  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
18 #
19
20 # ------
21 #
22 MESSAGE(STATUS "Check for MPI ...")
23
24 # ------
25
26 SET(MPI_STATUS 1)
27
28 IF(WITH_MPI)
29   SET(MPI_ROOT_USER ${WITH_MPI})
30 ELSE(WITH_MPI)
31   SET(MPI_ROOT_USER $ENV{MPI_ROOT})
32 ENDIF(WITH_MPI)
33
34 IF(NOT MPI_ROOT_USER)
35   FIND_PROGRAM(MPICC mpicc)
36   IF(MPICC)
37     MESSAGE(STATUS "mpicc found: ${MPICC}")
38     SET(MPI_ROOT ${MPICC})
39     GET_FILENAME_COMPONENT(MPI_ROOT ${MPI_ROOT} PATH)
40     GET_FILENAME_COMPONENT(MPI_ROOT ${MPI_ROOT} PATH)
41     IF(MPICC STREQUAL /usr/bin/mpicc)
42     ELSE(MPICC STREQUAL /usr/bin/mpicc)
43       SET(MPI_ROOT_USER ${MPI_ROOT})
44     ENDIF(MPICC STREQUAL /usr/bin/mpicc)
45   ENDIF(MPICC)
46 ELSE(NOT MPI_ROOT_USER)
47   SET(MPI_ROOT ${MPI_ROOT_USER})
48 ENDIF(NOT MPI_ROOT_USER)
49
50 # ------
51
52 IF(NOT MPI_ROOT)
53   MESSAGE(STATUS "MPI not found, try to use WITH_MPI option or MPI_ROOT environment variable.")
54   SET(MPI_STATUS 0)
55 ENDIF(NOT MPI_ROOT)
56
57 # ------
58
59 IF(MPI_STATUS)
60   MESSAGE(STATUS "Check MPI in ${MPI_ROOT}")
61
62   SET(MPI_INCLUDE_TO_FIND mpi.h)
63   
64   IF(MPI_ROOT_USER)
65     SET(MPI_ROOT ${MPI_ROOT_USER})
66     SET(MPI_INCLUDE_PATHS ${MPI_ROOT} ${MPI_ROOT}/include)
67     FIND_PATH(MPI_INCLUDES ${MPI_INCLUDE_TO_FIND} PATHS ${MPI_INCLUDE_PATHS} NO_DEFAULT_PATH)
68     IF(NOT MPI_INCLUDES)
69       MESSAGE(STATUS "MPI include ${MPI_INCLUDE_TO_FIND} not found in ${MPI_INCLUDE_PATHS}, check your MPI installation.")
70       SET(MPI_STATUS 0)
71     ENDIF(NOT MPI_INCLUDES)
72   ELSE(MPI_ROOT_USER)
73     FIND_PATH(MPI_INCLUDES ${MPI_INCLUDE_TO_FIND})
74     IF(NOT MPI_INCLUDES)
75       MESSAGE(STATUS "MPI include ${MPI_INCLUDE_TO_FIND} not found on system, try to use WITH_MPI option or MPI_ROOT environment variable.")
76       SET(MPI_STATUS 0)
77     ENDIF(NOT MPI_INCLUDES)
78     GET_FILENAME_COMPONENT(MPI_ROOT ${MPI_INCLUDES} PATH)
79   ENDIF(MPI_ROOT_USER)
80   
81   MESSAGE(STATUS "MPI include ${MPI_INCLUDE_TO_FIND} found in ${MPI_INCLUDES}")
82
83   SET(MPI_INCLUDE_DIR ${MPI_INCLUDES})
84   SET(MPI_INCLUDES -I${MPI_INCLUDES})
85   
86   # ------
87   
88   IF(WINDOWS)
89     FIND_LIBRARY(MPI_LIB_THREAD libboost_thread-vc90-mt-gd-1_35 ${MPI_ROOT}/lib)
90     FIND_LIBRARY(MPI_LIB_DATE_TIME libboost_date_time-vc90-mt-gd-1_35 ${MPI_ROOT}/lib)
91   ELSE(WINDOWS)
92     FOREACH(lib mpi_cxx mpi mpich)
93       FIND_LIBRARY(MPI_LIB ${lib} ${MPI_ROOT}/lib)
94       IF(MPI_LIB)
95         IF(lib STREQUAL mpi_cxx)
96           SET(MPI_INCLUDES ${MPI_INCLUDES} -DOMPI_IGNORE_CXX_SEEK)
97         ENDIF(lib STREQUAL mpi_cxx)
98         IF(lib STREQUAL mpich)
99           SET(MPI_INCLUDES ${MPI_INCLUDES} -DMPICH_IGNORE_CXX_SEEK)
100         ENDIF(lib STREQUAL mpich)
101         BREAK()
102       ENDIF(MPI_LIB)
103     ENDFOREACH(lib mpi_cxx mpi mpich)
104     IF(NOT MPI_LIB)
105       MESSAGE(STATUS "MPI lib not found, check your MPI installation.")
106       SET(MPI_STATUS 0)
107     ENDIF(NOT MPI_LIB)
108     MESSAGE(STATUS "MPI lib : ${MPI_LIB}")
109   ENDIF(WINDOWS)
110   
111   SET(MPI_LIBS ${MPI_LIB})
112   
113   MESSAGE(STATUS "MPI libs: ${MPI_LIBS}")
114 ENDIF(MPI_STATUS)
115   
116 # ------
117
118 IF(MPI_STATUS)
119   include(CheckSymbolExists)
120   SET(CMAKE_REQUIRED_LIBRARIES ${MPI_LIBS})
121   CHECK_SYMBOL_EXISTS(MPI_Publish_name ${MPI_INCLUDE_DIR}/mpi.h MPI2_IS_OK)
122   IF(MPI2_IS_OK)
123     MESSAGE(STATUS "Your mpi implemtentation is compatible with mpi2 ... adding -DHAVE_MPI2")
124     SET(MPI_INCLUDES ${MPI_INCLUDES} -DHAVE_MPI2)
125   ENDIF(MPI2_IS_OK)
126 ENDIF(MPI_STATUS)
127
128 # ------
129
130 IF(MPI_STATUS)
131   SET(MPI_IS_OK ON)
132 ELSE(MPI_STATUS)
133   IF(MPI_IS_MANDATORY)
134     MESSAGE(FATAL_ERROR "MPI not found but mandatory")
135   ELSE(MPI_IS_MANDATORY)
136     MESSAGE(STATUS "MPI not found. Build procedure depending of mpi will be disable")
137   ENDIF(MPI_IS_MANDATORY)
138 ENDIF(MPI_STATUS)