Salome HOME
Merge from V5_1_main 10/06/2010
[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_INCLUDES -I${MPI_INCLUDES})
84   
85   # ------
86   
87   IF(WINDOWS)
88     FIND_LIBRARY(MPI_LIB_THREAD libboost_thread-vc90-mt-gd-1_35 ${MPI_ROOT}/lib)
89     FIND_LIBRARY(MPI_LIB_DATE_TIME libboost_date_time-vc90-mt-gd-1_35 ${MPI_ROOT}/lib)
90   ELSE(WINDOWS)
91     FOREACH(lib mpi_cxx mpi mpich)
92       FIND_LIBRARY(MPI_LIB ${lib} ${MPI_ROOT}/lib)
93       IF(MPI_LIB)
94         IF(lib STREQUAL mpich)
95           SET(MPI_INCLUDES ${MPI_INCLUDES} -DMPICH_IGNORE_CXX_SEEK)
96         ENDIF(lib STREQUAL mpich)
97       ENDIF(MPI_LIB)
98     ENDFOREACH(lib mpi_cxx mpi mpich)
99     IF(NOT MPI_LIB)
100       MESSAGE(STATUS "MPI lib not found, check your MPI installation.")
101       SET(MPI_STATUS 0)
102     ENDIF(NOT MPI_LIB)
103     MESSAGE(STATUS "MPI lib : ${MPI_LIB}")
104   ENDIF(WINDOWS)
105   
106   SET(MPI_LIBS ${MPI_LIB})
107   
108   MESSAGE(STATUS "MPI libs: ${MPI_LIBS}")
109 ENDIF(MPI_STATUS)
110   
111 # ------
112
113 IF(MPI_STATUS)
114   SET(MPI_IS_OK ON)
115 ELSE(MPI_STATUS)
116   IF(MPI_IS_MANDATORY)
117     MESSAGE(FATAL_ERROR "MPI not found but mandatory")
118   ELSE(MPI_IS_MANDATORY)
119     MESSAGE(STATUS "MPI not found. Build procedure depending of mpi will be disable")
120   ENDIF(MPI_IS_MANDATORY)
121 ENDIF(MPI_STATUS)