1 cmake_minimum_required (VERSION 3.1)
2 set(CMAKE_CXX_STANDARD 11)
3 set(CMAKE_CXX_STANDARD_REQUIRED ON)
6 project (SOLVERLAB C CXX)
7 set (SOLVERLAB_VERSION_MAJOR 9)
8 set (SOLVERLAB_VERSION_MINOR 7)
9 set (SOLVERLAB_VERSION_SUBMINOR alpha)
11 option (SOLVERLAB_WITH_DOCUMENTATION "Generate SOLVERLAB documentation" ON)
12 option (SOLVERLAB_WITH_PYTHON "Compile Python interface of SOLVERLAB" ON)
13 option (SOLVERLAB_WITH_GUI "Compile a Graphic user Interface for SOLVERLAB" OFF)
14 option (SOLVERLAB_WITH_PACKAGE "Generate RPM, Debian and tarball packages" OFF)
15 option (SOLVERLAB_WITH_COREFLOWS "Generate COREFLOWS module" ON)
16 option (SOLVERLAB_WITH_TESTS "Generate SOLVERLAB example tests" ON)
18 #Path to installed libraries
19 set (PETSC_DIR OFF CACHE STRING "PETSc library path" )
20 set (SLEPC_DIR OFF CACHE STRING "SLEPc library path" )
21 set (HDF5_ROOT OFF CACHE STRING "HDF5 library path" )#For the compilation of MED with a specific version of HDF5
22 set (MEDFILE_ROOT_DIR OFF CACHE STRING "MED library path" )
23 set (MEDCOUPLING_ROOT_DIR OFF CACHE STRING "MEDCoupling library path" )
24 set (PYTHON_ROOT_DIR OFF CACHE STRING "Python library path" )
25 set (PARAVIEW_ROOT_DIR OFF CACHE STRING "PARAVIEW library path" )
27 #url of tarball librairies
28 set (DOWNLOAD_PETSC http://ftp.mcs.anl.gov/pub/petsc/release-snapshots/petsc-lite-3.14.2.tar.gz
29 CACHE STRING "PETSc tarball path/url" )
30 set (DOWNLOAD_SLEPC https://slepc.upv.es/download/distrib/slepc-3.14.1.tar.gz
31 CACHE STRING "SLEPC tarball path/url" )
32 set (DOWNLOAD_F2CBLASLAPACK https://www.mcs.anl.gov/petsc/mirror/externalpackages/f2cblaslapack-3.4.2.q4.tar.gz
33 CACHE STRING "F2CBLASLAPACK tarball path/url" )
34 set (DOWNLOAD_HDF5 https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.10/hdf5-1.10.3/src/hdf5-1.10.3.tar.gz
35 CACHE STRING "HDF5 tarball path/url" )
36 set (DOWNLOAD_MED http://files.salome-platform.org/Salome/other/med-4.1.0.tar.gz
37 CACHE STRING "MED tarball path/url")
38 set (DOWNLOAD_MEDCOUPLING http://files.salome-platform.org/Salome/other/medCoupling-9.6.0.tar.gz
39 CACHE STRING "MEDCoupling tarball path/url" )
40 set (DOWNLOAD_OPENMPI https://download.open-mpi.org/release/open-mpi/v3.1/openmpi-3.1.6.tar.gz
41 CACHE STRING "OPENMPI tarball path/url" )
42 set (DOWNLOAD_HYPRE https://github.com/hypre-space/hypre/archive/v2.20.0.zip
43 CACHE STRING "HYPRE tarball path/url" )
45 set (CMAKE_BUILD_TYPE Release CACHE STRING "Installation mode")
47 include(ExternalProject)#For PETSc, MED and MEDCoupling
49 list (APPEND CMAKE_MODULE_PATH "${SOLVERLAB_SOURCE_DIR}/cmake_files")
51 if( DEFINED ENV{MPI_HOME} OR DEFINED MPI_HOME )
52 set(SOLVERLAB_WITH_MPI ON)
54 if( ${MPI_LIBRARY} STREQUAL "MPI_LIBRARY-NOTFOUND")
55 set ( MPI_LIBRARY ${MPI_HOME}/lib/libmpi.so )
56 endif(${MPI_LIBRARY} STREQUAL "MPI_LIBRARY-NOTFOUND")
57 message ( STATUS "MPI executable is ${MPIEXEC}" )
58 else( DEFINED ENV{MPI_HOME} OR DEFINED MPI_HOME )
59 set(SOLVERLAB_WITH_MPI OFF)
60 endif( DEFINED ENV{MPI_HOME} OR DEFINED MPI_HOME )
62 ######################################################
63 # Detection or compilation of PETSc+SLEPc+HDF5 #
64 ######################################################
65 if ( DEFINED ENV{PETSC_DIR} OR PETSC_DIR)
67 set(PETSC_DIR $ENV{PETSC_DIR})
68 message ( STATUS "Checking variable PETSC_DIR : " $ENV{PETSC_DIR} )
70 message ( STATUS "Checking variable PETSC_DIR : " ${PETSC_DIR} )
73 find_package (PETSc 3.4 REQUIRED)
76 message ( STATUS "PETSc found. Version is ${PETSC_VERSION_MAJOR}.${PETSC_VERSION_MINOR}.${PETSC_VERSION_SUBMINOR}" )
77 message ( STATUS "PETSc compiler is ${PETSC_COMPILER}" )
78 message ( STATUS "PETSc executable is ${PETSC_MPIEXEC}")
80 set(PETSC_INSTALL ${PETSC_DIR})
82 #Define and search slepc variables
84 if ( DEFINED ENV{SLEPC_DIR} )
85 set(SLEPC_DIR $ENV{SLEPC_DIR})
86 else ( DEFINED ENV{SLEPC_DIR} )
87 set(SLEPC_DIR ${PETSC_DIR}/${PETSC_ARCH})
88 endif( DEFINED ENV{SLEPC_DIR} )
91 message ( STATUS "Checking variable SLEPC_DIR" )
92 if ( IS_DIRECTORY ${SLEPC_DIR}/include AND EXISTS ${SLEPC_DIR}/lib/libslepc.so)
93 set(SLEPC_INCLUDES ${SLEPC_DIR}/include)
94 set(SLEPC_LIBRARIES ${SLEPC_DIR}/lib/libslepc.so)
95 message( STATUS "SLEPc found at ${SLEPC_DIR}" )
97 message( FATAL_ERROR "SLEPc not found at ${SLEPC_DIR}" )
100 #define hdf5 variables
101 if ( NOT HDF5_ROOT )#hdf5 is not defined in cmake arguments
102 if ( DEFINED ENV{HDF5_ROOT} )#hdf5 is defined in the environment
103 set(HDF5_ROOT $ENV{HDF5_ROOT})
104 else( DEFINED ENV{HDF5_ROOT} )#hdf5 is not defined in the environment
105 #HDF5 to be found in petsc external packages
106 set(HDF5_ROOT ${PETSC_DIR}/${PETSC_ARCH})# define hint for hdf5/med installation in petsc external packages
107 endif( DEFINED ENV{HDF5_ROOT} )
108 endif( NOT HDF5_ROOT )
109 set(HDF5_LIBRARY_DIR ${HDF5_ROOT}/lib)
110 set(HDF5_INCLUDE_DIRS ${HDF5_ROOT}/include)
111 else ( DEFINED ENV{PETSC_DIR} OR PETSC_DIR )
112 message ( STATUS "PETSC_DIR not set, searching PETSc and SLEPc in the system" )
114 if ( IS_DIRECTORY "/usr/include/petsc/" AND EXISTS "/usr/lib64/libpetsc.so" ) #Case fedora/redhat system install
115 message ( STATUS "PETSC includes found in /usr/include/petsc/" )
116 message ( STATUS "PETSC library found in /usr/lib64" )
118 set(PETSC_INCLUDES /usr/include/petsc /usr/include/petsc/petsc/mpiuni)
119 set(PETSC_LIBRARIES /usr/lib64/libpetsc.so)
121 set(PETSC_VERSION "3.8") #3.8 for fedora 26 , 3.9 for fedora 29 , 3.10 for fedora 30, , 3.12 for fedora 32
123 set(CPACK_RPM_PACKAGE_REQUIRES "${CPACK_RPM_PACKAGE_REQUIRES}, petsc-devel (>= 3.4)") # This is not fully working yet.
124 set(PETSC_INSTALL ${PETSC_DIR})
126 #Define and search slepc variables
127 if ( IS_DIRECTORY "/usr/include/slepc/" AND EXISTS "/usr/lib64/libslepc.so" )
128 message( STATUS "SLEPc includes found in /usr/include/slepc/" )
129 message( STATUS "SLEPc library found in /usr/lib64/slepc/" )
131 set(SLEPC_INCLUDES ${SLEPC_DIR}/include)
132 set(SLEPC_LIBRARIES ${SLEPC_DIR}/lib/libslepc.so)
133 set (CPACK_RPM_PACKAGE_REQUIRES "${CPACK_RPM_PACKAGE_REQUIRES}, slepc-devel (>= 3.4)") # This is not fully working yet.
134 else ( IS_DIRECTORY "/usr/include/slepc/" AND EXISTS "/usr/lib64/libslepc.so" )
135 message( FATAL_ERROR "SLEPc not found in the system" )
136 endif( IS_DIRECTORY "/usr/include/slepc/" AND EXISTS "/usr/lib64/libslepc.so" )
138 #HDF5 to be found in the system
139 if ( NOT HDF5_ROOT AND NOT DEFINED ENV{HDF5_ROOT} )#hdf5 is not defined in the environment
140 find_package(HDF5 REQUIRED)
141 set(CPACK_DEBIAN_PACKAGE_DEPENDS "libhdf5-dev")
142 set(CPACK_RPM_PACKAGE_REQUIRES "hdf5-devel")
143 endif( NOT HDF5_ROOT AND NOT DEFINED ENV{HDF5_ROOT} )
145 #elseif ( IS_DIRECTORY "/usr/lib/petsc/include" AND EXISTS "/usr/lib/petsc/lib/libpetsc_real.so" ) #Case ubuntu/debian system install
146 # message ( STATUS "PETSc includes found in /usr/lib/petsc/include")
147 # message ( STATUS "PETSc library found in /usr/lib/petsc/lib/libpetsc_real.so")
148 # set(PETSC_DIR /usr/lib/petsc/)
149 # set(PETSC_INCLUDES ${PETSC_DIR}/include ${PETSC_DIR}/include/petsc/mpiuni)
150 # set(PETSC_LIBRARIES ${PETSC_DIR}/lib/libpetsc_real.so)
152 # find_package (PETSc 3.4 REQUIRED)
153 # petsc_get_version ()
154 # set (CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS}, petsc-dev (>= 3.4)") # This is not fully working yet.
156 # Define and search slepc variables
157 # if ( IS_DIRECTORY "/usr/lib/slepc/include" AND EXISTS "/usr/lib/slepc/lib/libslepc_real.so" )
158 # message( STATUS "SLEPc includes found in /usr/lib/slepc/include" )
159 # message( STATUS "SLEPc library found in /usr/lib/slepc/lib/libslepc_real.so" )
160 # set(SLEPC_DIR /usr/lib/slepc/)
161 # set(SLEPC_INCLUDES ${SLEPC_DIR}/include)
162 # set(SLEPC_LIBRARIES ${SLEPC_DIR}/lib/libslepc_real.so)
163 # set (CPACK_DEBIAN_PACKAGE_REQUIRES "${CPACK_DEBIAN_PACKAGE_REQUIRES}, slepc-devel (>= 3.4)") # This is not fully working yet.
164 # else ( IS_DIRECTORY "/usr/lib/slepc/include" AND EXISTS "/usr/lib/slepc/lib/libslepc_real.so" )
165 # message( FATAL_ERROR "SLEPc not found in the system" )
166 # endif( IS_DIRECTORY "/usr/lib/slepc/include" AND EXISTS "/usr/lib/slepc/lib/libslepc_real.so" )
168 #elseif ( IS_DIRECTORY "/usr/local/lib/python2.7/dist-packages/petsc") #Case ubuntu/debian system pip install
170 else ( IS_DIRECTORY "/usr/include/petsc/" AND EXISTS "/usr/lib64/libpetsc.so" ) # No petsc in system, do compile petsc along with slepc as an external package
171 message (STATUS "PETSC not found in the system")
172 message (STATUS "PETSC will be downloaded and compiled from ${DOWNLOAD_PETSC}" )
173 message (STATUS "SLEPC will be downloaded and compiled from ${DOWNLOAD_SLEPC}" )
174 message (STATUS "HDF5 will be downloaded and compiled from ${DOWNLOAD_HDF5}" )
176 #extract tarball name
177 string(LENGTH "${DOWNLOAD_PETSC}" tarball_url_length)#length of the tarball
178 string(FIND "${DOWNLOAD_PETSC}" "/" start_tarball_name REVERSE )# last occurence of "/"
179 MATH(EXPR start_tarball_name "${start_tarball_name}+1")#start after the occurence of "/"
180 MATH(EXPR tarball_name_length "${tarball_url_length}-${start_tarball_name}-7")#name ends before .tar.gz that counts for 7 characters
181 string(SUBSTRING ${DOWNLOAD_PETSC} ${start_tarball_name} ${tarball_name_length} PETSC_TARBALL_NAME)
183 set(PETSC_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis/${PETSC_TARBALL_NAME}) # Location of the final install
184 set(PETSC_ARCH arch-linux-c-opt)
185 set(PETSC_INSTALL ${CMAKE_INSTALL_PREFIX}/share/petsc)#folder to copy petsc libraries and include files
187 ExternalProject_Add (PETSc
188 URL ${DOWNLOAD_PETSC}
189 SOURCE_DIR ${PETSC_DIR}
191 CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix=${PETSC_INSTALL} --with-debugging=0 --download-f2cblaslapack=${DOWNLOAD_F2CBLASLAPACK} --with-fc=0 --download-slepc=${DOWNLOAD_SLEPC} --download-hdf5=${DOWNLOAD_HDF5} --with-mpi=0 # --download-openmpi=${DOWNLOAD_OPENMPI} --download-hypre=${DOWNLOAD_HYPRE}
192 BUILD_COMMAND make all
193 TEST_COMMAND make check
194 INSTALL_COMMAND make install
195 INSTALL_DIR ${PETSC_DIR}
196 STAMP_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis
197 LOG_DOWNLOAD TRUE # Wrap download in script to log output
198 LOG_UPDATE TRUE # Wrap update in script to log output
199 LOG_CONFIGURE TRUE # Wrap configure in script to log output
200 LOG_BUILD TRUE # Wrap build in script to log output
201 LOG_TEST TRUE # Wrap test in script to log output
202 LOG_INSTALL TRUE # Wrap install in script to log output
205 message( STATUS "PETSc, SLEPc and HDF5 will be installed at ${PETSC_INSTALL}")
207 string(LENGTH "${PETSC_TARBALL_NAME}" tarball_name_length)#length of the tarball
208 string(FIND "${PETSC_TARBALL_NAME}" "-" start_version_name REVERSE )# last occurence of "-"
209 MATH(EXPR start_version_name "${start_version_name}+1")#start after the occurence of "/"
210 string(SUBSTRING ${PETSC_TARBALL_NAME} ${start_version_name} ${tarball_name_length} PETSC_VERSION)
211 message( STATUS "PETSc version ${PETSC_VERSION} will be installed" )
213 set(PETSC_INCLUDES ${PETSC_DIR}/${PETSC_ARCH}/include ${PETSC_DIR}/include)
214 set(PETSC_LIBRARIES ${PETSC_DIR}/${PETSC_ARCH}/lib/libpetsc.so)
216 #define slepc variables
217 set(SLEPC_DIR ${PETSC_INSTALL})
218 set(SLEPC_INCLUDES ${SLEPC_DIR}/include ${PETSC_DIR}/${PETSC_ARCH}/externalpackages/slepc-3.14.1/include ${PETSC_DIR}/${PETSC_ARCH}/externalpackages/slepc-3.14.1/installed-arch-linux2-c-opt/include)
219 set(SLEPC_LIBRARIES ${PETSC_DIR}/${PETSC_ARCH}/externalpackages/slepc-3.14.1/installed-arch-linux2-c-opt/lib/libslepc.so)
220 message( STATUS "SLEPc includes ${SLEPC_INCLUDES}")
222 #define hdf5 variables
223 if ( NOT HDF5_ROOT )#hdf5 is not defined in cmake arguments
224 if ( DEFINED ENV{HDF5_ROOT} )#hdf5 is defined in the environment
225 set(HDF5_ROOT $ENV{HDF5_ROOT})
226 else( DEFINED ENV{HDF5_ROOT} )#hdf5 is not defined in the environment
227 set(HDF5_ROOT ${PETSC_INSTALL})#HDF5 to be found in petsc installation
228 endif( DEFINED ENV{HDF5_ROOT} )
229 endif( NOT HDF5_ROOT )
230 set(HDF5_LIBRARY_DIR ${HDF5_ROOT}/lib)
231 set(HDF5_INCLUDE_DIRS ${HDF5_ROOT}/include)
233 #define MPI variables
234 set(SOLVERLAB_WITH_MPI ON)
235 set(MPI_HOME ${PETSC_INSTALL} )
236 set(MPI_LIBRARY ${PETSC_INSTALL}/lib/libmpi.so)
237 set(MPIEXEC ${PETSC_INSTALL}/bin/mpiexec)
239 endif ( IS_DIRECTORY "/usr/include/petsc/" AND EXISTS "/usr/lib64/libpetsc.so" )
240 endif ( DEFINED ENV{PETSC_DIR} OR PETSC_DIR )
242 if ( ${PETSC_VERSION} VERSION_GREATER 3.5 )
243 add_definitions(-DPETSC_VERSION_GREATER_3_5)
244 endif( ${PETSC_VERSION} VERSION_GREATER 3.5 )
246 string(REPLACE ";" ":" PETSC_INCLUDES_INSTALL "${PETSC_INCLUDES}")# use colon instead of semicolon in environment file env_SOLVERLAB.sh
248 add_library(petsc SHARED IMPORTED)
249 set_property(TARGET petsc PROPERTY IMPORTED_LOCATION ${PETSC_LIBRARIES})
250 add_library(slepc SHARED IMPORTED)
251 set_property(TARGET slepc PROPERTY IMPORTED_LOCATION ${SLEPC_LIBRARIES})
253 ######################################################
254 # Detection or compilation of MEDFile #
255 ######################################################
256 if( MEDFILE_ROOT_DIR OR DEFINED ENV{MEDFILE_ROOT_DIR})
258 if ( NOT MEDFILE_ROOT_DIR )
259 set(MEDFILE_ROOT_DIR $ENV{MEDFILE_ROOT_DIR} )
260 endif( NOT MEDFILE_ROOT_DIR )
262 find_package (MEDFile REQUIRED)
264 else( MEDFILE_ROOT_DIR OR DEFINED ENV{MEDFILE_ROOT_DIR})
266 message(STATUS "MED will be downloaded and installed from ${DOWNLOAD_MED}")
268 set(MEDFILE_DEFINITIONS "-D${MACHINE} -DMEDFILE_INSTALL_DOC=OFF")#Comment ne pas compiler la doc ?
269 set(MEDFILE_ROOT_DIR ${CMAKE_INSTALL_PREFIX}/share/med) # Location of the final install
271 #extraction of the tarball archive name
272 string(LENGTH "${DOWNLOAD_MED}" tarball_url_length)#length of the name of the tarball
273 string(FIND "${DOWNLOAD_MED}" "/" start_tarball_name REVERSE )# last occurence of "/"
274 MATH(EXPR start_tarball_name "${start_tarball_name}+1")#start after the occurence of "/"
275 MATH(EXPR tarball_name_length "${tarball_url_length}-${start_tarball_name}-7")#name ends before .tar.gz that counts for 7 characters
276 string(SUBSTRING ${DOWNLOAD_MED} ${start_tarball_name} ${tarball_name_length} MED_TARBALL_NAME)
278 ExternalProject_Add (MED
279 URL ${DOWNLOAD_MED} #location of med tarball
280 SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis/${MED_TARBALL_NAME}
282 CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix=${MEDFILE_ROOT_DIR} --with-hdf5=${HDF5_ROOT} --with-hdf5-include=${HDF5_ROOT}/include --with-hdf5-lib=${HDF5_LIBRARY_DIR} --with-hdf5-bin=${HDF5_ROOT}/bin --with-swig=yes --disable-fortran #CC=${PETSC_INSTALL}/bin/mpicc
284 INSTALL_COMMAND make install
285 INSTALL_DIR ${MEDFILE_ROOT_DIR}
286 STAMP_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis
287 LOG_DOWNLOAD TRUE # Wrap download in script to log output
288 LOG_UPDATE TRUE # Wrap update in script to log output
289 LOG_CONFIGURE TRUE # Wrap configure in script to log output
290 LOG_BUILD TRUE # Wrap build in script to log output
291 LOG_TEST TRUE # Wrap test in script to log output
292 LOG_INSTALL TRUE # Wrap install in script to log output
295 set(MEDFILE_INCLUDE_DIRS ${MEDFILE_ROOT_DIR}/include)# Nécessaire pour le medloader et les sous-dossiers mesh, et IJKMesh
296 set(MEDFILE_LIBRARIES ${MEDFILE_ROOT_DIR}/lib)# Nécessaire pour le env_SOLVERLAB.sh
297 set(MEDFILE_C_LIBRARIES med medC)# Nécessaire pour le medloader
299 endif( MEDFILE_ROOT_DIR OR DEFINED ENV{MEDFILE_ROOT_DIR})
301 add_library(med SHARED IMPORTED)
302 set_property(TARGET med PROPERTY IMPORTED_LOCATION ${MEDFILE_ROOT_DIR}/lib/libmed.so)
303 add_library(medC SHARED IMPORTED)
304 set_property(TARGET medC PROPERTY IMPORTED_LOCATION ${MEDFILE_ROOT_DIR}/lib/libmedC.so)
306 string(REPLACE ";" ":" MEDFILE_LIBRARIES_INSTALL "${MEDFILE_LIBRARIES}")# use colon instead of semicolon in environment file env_SOLVERLAB.sh
308 ######################################################
309 # Detection or compilation of MEDCoupling #
310 ######################################################
311 if( MEDCOUPLING_ROOT_DIR OR DEFINED ENV{MEDCOUPLING_ROOT_DIR})
313 if( NOT MEDCOUPLING_ROOT_DIR )
314 set(MEDCOUPLING_ROOT_DIR $ENV{MEDCOUPLING_ROOT_DIR} )
315 endif( NOT MEDCOUPLING_ROOT_DIR )
317 message (STATUS "Seeking MEDCoupling library in ${MEDCOUPLING_ROOT_DIR}")
319 if( NOT EXISTS ${MEDCOUPLING_ROOT_DIR}/lib/libmedloader.so OR NOT EXISTS ${MEDCOUPLING_ROOT_DIR}/lib/libmedcoupling.so OR NOT EXISTS ${MEDCOUPLING_ROOT_DIR}/include/MEDCoupling.hxx)
320 message (FATAL_ERROR "MEDCoupling library not found in ${MEDCOUPLING_ROOT_DIR}")
321 else( NOT EXISTS ${MEDCOUPLING_ROOT_DIR}/lib/libmedloader.so OR NOT EXISTS ${MEDCOUPLING_ROOT_DIR}/lib/libmedcoupling.so OR NOT EXISTS ${MEDCOUPLING_ROOT_DIR}/include/MEDCoupling.hxx)
322 message (STATUS "MEDCoupling library found in ${MEDCOUPLING_ROOT_DIR}")
323 endif( NOT EXISTS ${MEDCOUPLING_ROOT_DIR}/lib/libmedloader.so OR NOT EXISTS ${MEDCOUPLING_ROOT_DIR}/lib/libmedcoupling.so OR NOT EXISTS ${MEDCOUPLING_ROOT_DIR}/include/MEDCoupling.hxx)
325 add_library(medloader SHARED IMPORTED )
326 set_property(TARGET medloader PROPERTY IMPORTED_LOCATION ${MEDCOUPLING_ROOT_DIR}/lib/libmedloader.so)
327 add_library(interpkernel SHARED IMPORTED )
328 set_property(TARGET interpkernel PROPERTY IMPORTED_LOCATION ${MEDCOUPLING_ROOT_DIR}/lib/libinterpkernel.so)
329 add_library(medcouplingremapper SHARED IMPORTED )
330 set_property(TARGET medcouplingremapper PROPERTY IMPORTED_LOCATION ${MEDCOUPLING_ROOT_DIR}/lib/libmedcouplingremapper.so)
331 add_library(medcouplingcpp SHARED IMPORTED )
332 set_property(TARGET medcouplingcpp PROPERTY IMPORTED_LOCATION ${MEDCOUPLING_ROOT_DIR}/lib/libmedcouplingcpp.so)
334 set(MEDCoupling_DIR ${MEDCOUPLING_ROOT_DIR}/cmake_files)
335 find_package(MEDCoupling CONFIG REQUIRED) # CONFIG is important !
336 message( STATUS "MEDCoupling found. Version is ${MEDCoupling_VERSION}")
338 else( DEFINED MEDCOUPLING_ROOT_DIR OR DEFINED ENV{MEDCOUPLING_ROOT_DIR})
339 message(STATUS "MEDCoupling will be downloaded and installed from ${DOWNLOAD_MEDCOUPLING}")
340 set(MEDCOUPLING_ROOT_DIR ${CMAKE_INSTALL_PREFIX}/share/medcoupling) # Location of the final install
341 SET(ENV{HDF5_ROOT} ${HDF5_ROOT})#MEDCoupling install process seems to require an environment variable
343 #extraction of the tarball archive name
344 string(LENGTH "${DOWNLOAD_MEDCOUPLING}" tarball_url_length)#length of the tarball
345 string(FIND "${DOWNLOAD_MEDCOUPLING}" "/" start_tarball_name REVERSE )# last occurence of "/"
346 MATH(EXPR start_tarball_name "${start_tarball_name}+1")#start after the occurence of "/"
347 MATH(EXPR tarball_name_length "${tarball_url_length}-${start_tarball_name}-7")#name ends before .tar.gz that counts for 7 characters
348 string(SUBSTRING ${DOWNLOAD_MEDCOUPLING} ${start_tarball_name} ${tarball_name_length} MEDCOUPLING_TARBALL_NAME)
349 string(SUBSTRING ${MEDCOUPLING_TARBALL_NAME} 12 ${tarball_name_length} MEDCoupling_VERSION)
351 message(STATUS "MEDCoupling version will be ${MEDCoupling_VERSION}")
353 ExternalProject_Add (MEDCoupling
354 URL ${DOWNLOAD_MEDCOUPLING} #location of medcoupling tarball
355 SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis/${MEDCOUPLING_TARBALL_NAME}
357 CONFIGURE_COMMAND cmake <SOURCE_DIR>/${MEDCOUPLING_TARBALL_NAME} -DCMAKE_INSTALL_PREFIX=${MEDCOUPLING_ROOT_DIR} -DCONFIGURATION_ROOT_DIR=<SOURCE_DIR>/configuration-${MEDCoupling_VERSION} -DMEDFILE_ROOT_DIR=${MEDFILE_ROOT_DIR} -DMEDCOUPLING_ENABLE_PARTITIONER=OFF -DMEDCOUPLING_PARTITIONER_METIS=OFF -DMEDCOUPLING_PARTITIONER_SCOTCH=OFF -DMEDCOUPLING_ENABLE_RENUMBER=OFF -DMEDCOUPLING_BUILD_DOC=OFF -DHDF5_ROOT_DIR=${HDF5_ROOT} -DMEDCOUPLING_USE_64BIT_IDS=ON -DMEDCOUPLING_ENABLE_PYTHON=ON#-DSALOME_USE_MPI=ON
359 INSTALL_COMMAND make install
360 INSTALL_DIR ${MEDCOUPLING_ROOT_DIR}
361 STAMP_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis
362 LOG_DOWNLOAD TRUE # Wrap download in script to log output
363 LOG_UPDATE TRUE # Wrap update in script to log output
364 LOG_CONFIGURE TRUE # Wrap configure in script to log output
365 LOG_BUILD TRUE # Wrap build in script to log output
366 LOG_TEST TRUE # Wrap test in script to log output
367 LOG_INSTALL TRUE # Wrap install in script to log output
370 add_library(medloader SHARED IMPORTED )
371 set_property(TARGET medloader PROPERTY IMPORTED_LOCATION ${MEDCOUPLING_ROOT_DIR}/lib/libmedloader.so)
373 endif( MEDCOUPLING_ROOT_DIR OR DEFINED ENV{MEDCOUPLING_ROOT_DIR} )
375 set(MEDCOUPLING_INCLUDE_DIR ${MEDCOUPLING_ROOT_DIR}/include)
376 set(MEDCOUPLING_LIBRARIES ${MEDCOUPLING_ROOT_DIR}/lib )#for environment file env_SOLVERLAB.sh
378 add_library(medcoupling SHARED IMPORTED )
379 set_property(TARGET medcoupling PROPERTY IMPORTED_LOCATION ${MEDCOUPLING_ROOT_DIR}/lib/libmedcoupling.so)
381 if ( ${MEDCoupling_VERSION} VERSION_GREATER 9.4 )
382 add_definitions(-DMEDCoupling_VERSION_VERSION_GREATER_9_4)
383 endif( ${MEDCoupling_VERSION} VERSION_GREATER 9.4 )
385 if (TARGET MED AND TARGET PETSc)
386 ExternalProject_Add_StepDependencies( MED build PETSc )#PETSc doit être compilé avant MED car c'est PETSc qui compile HDF5
387 endif(TARGET MED AND TARGET PETSc)
389 if (TARGET MED AND TARGET MEDCoupling)
390 ExternalProject_Add_StepDependencies( MEDCoupling build MED )#MED doit être compilé avant MEDCoupling
391 endif(TARGET MED AND TARGET MEDCoupling)
393 if (TARGET PETSc AND TARGET MEDCoupling)
394 ExternalProject_Add_StepDependencies( MEDCoupling build PETSc )#PETSc doit être compilé avant MEDCoupling (car il contient hdf5)
395 endif(TARGET PETSc AND TARGET MEDCoupling)
397 IF(MEDCOUPLING_USE_64BIT_IDS)
398 SET(CMAKE_SWIG_FLAGS ${CMAKE_SWIG_FLAGS} -DMEDCOUPLING_USE_64BIT_IDS)
399 ENDIF(MEDCOUPLING_USE_64BIT_IDS)
405 # Paraview variables to choose python version and for env_SOLVERLAB.sh
406 if ( PARAVIEW_ROOT_DIR OR DEFINED ENV{PARAVIEW_ROOT_DIR})
407 if ( PARAVIEW_ROOT_DIR )
408 set( PARAVIEW_INCLUDE_DIR ${PARAVIEW_ROOT_DIR}/include)
409 set( PARAVIEW_LIBRARIES_DIR ${PARAVIEW_ROOT_DIR}/lib)
410 else( PARAVIEW_ROOT_DIR )
411 set( PARAVIEW_ROOT_DIR $ENV{PARAVIEW_ROOT_DIR} )
412 set( PARAVIEW_INCLUDE_DIR $ENV{PARAVIEW_ROOT_DIR}/include)
413 set( PARAVIEW_LIBRARIES_DIR $ENV{PARAVIEW_ROOT_DIR}/lib)
414 endif( PARAVIEW_ROOT_DIR )
415 else( PARAVIEW_ROOT_DIR OR DEFINED ENV{PARAVIEW_ROOT_DIR})
416 message(STATUS "PARAVIEW_ROOT_DIR not set. Trying to detect paraview.")
417 set( PARAVIEW_INCLUDE_DIR /usr/include/paraview/)
418 set( PARAVIEW_LIBRARIES_DIR /usr/lib/paraview/:/usr/lib64/paraview/:/usr/lib64/vtk/:/usr/lib/vtk/)
419 endif( PARAVIEW_ROOT_DIR OR DEFINED ENV{PARAVIEW_ROOT_DIR})
421 if ( DEFINED PARAVIEW_VERSION OR DEFINED ENV{PARAVIEW_VERSION} )
422 if ( NOT DEFINED PARAVIEW_VERSION )
423 set( PARAVIEW_VERSION $ENV{PARAVIEW_VERSION})
424 endif( NOT DEFINED PARAVIEW_VERSION )
425 message(STATUS "ParaView version is ${PARAVIEW_VERSION}" )
426 else( DEFINED PARAVIEW_VERSION OR DEFINED ENV{PARAVIEW_VERSION} )
427 set( PARAVIEW_SUFFIXES paraview-5.0 paraview-5.1 paraview-5.2 paraview-5.3 paraview-5.4 paraview-5.5 paraview-5.6 paraview-5.7 paraview-5.8 paraview-5.9 )
428 find_file( vtkConfig_file vtkPVConfig.h HINTS ${PARAVIEW_INCLUDE_DIR} PATH_SUFFIXES ${PARAVIEW_SUFFIXES})
430 #extraction of the paraview version"
431 IF ( ${vtkConfig_file} STREQUAL "vtkConfig_file-NOTFOUND" )
432 message(WARNING "Could not find ParaView configuration file vtkPVConfig.h in folder ${PARAVIEW_INCLUDE_DIR} and subdirectories ${PARAVIEW_SUFFIXES}. Postprocessing may not work")
433 set( PARAVIEW_VERSION "5.0")
434 ELSE ( ${vtkConfig_file} STREQUAL "vtkConfig_file-NOTFOUND" )
435 message( STATUS "Found vtkPVConfig.h in ${vtkConfig_file}")
436 file(STRINGS ${vtkConfig_file} vtkConfig)
437 FOREACH(line ${vtkConfig})
438 string(FIND "${line}" "#define PARAVIEW_VERSION_FULL " pos)
439 IF(NOT ${pos} EQUAL -1)
440 string(LENGTH ${line} line_length)#length of the tarball
441 MATH(EXPR start_pv_version "${line_length}-6")#line ends with "x.y.z", that counts for 7 characters
442 string(SUBSTRING ${line} ${start_pv_version} 5 PARAVIEW_VERSION)
444 ENDIF(NOT ${pos} EQUAL -1)
445 ENDFOREACH(line ${vtkConfig})
446 message(STATUS "ParaView detected, version is ${PARAVIEW_VERSION}" )
447 ENDIF( ${vtkConfig_file} STREQUAL "vtkConfig_file-NOTFOUND" )
448 endif( DEFINED PARAVIEW_VERSION OR DEFINED ENV{PARAVIEW_VERSION} )
450 #Choose python 2 or 3
451 IF ( ${PARAVIEW_VERSION} STRGREATER "5.6" OR ${PARAVIEW_VERSION} STREQUAL "5.6" )#Use python 3, use VERSION_GREATER_EQUAL if cmake >=3.7
453 message(STATUS "PARAVIEW_VERSION greater than 5.6. We need python3 for postprocessing scripts.")
454 ELSE ( ${PARAVIEW_VERSION} STRGREATER "5.6" OR ${PARAVIEW_VERSION} STREQUAL "5.6" )#Use python 2
456 message(STATUS "PARAVIEW_VERSION smaller than 5.6. We need python2 for postprocessing scripts.")
457 ENDIF( ${PARAVIEW_VERSION} STRGREATER "5.6" OR ${PARAVIEW_VERSION} STREQUAL "5.6" )
460 IF ( PYTHON_ROOT_DIR OR ENV{PYTHON_ROOT_DIR})
461 IF ( PYTHON_ROOT_DIR )
462 set(Python_ROOT_DIR ${PYTHON_ROOT_DIR} )
463 ELSE( PYTHON_ROOT_DIR )
464 set(Python_ROOT_DIR $ENV{PYTHON_ROOT_DIR} )
465 ENDIF( PYTHON_ROOT_DIR)
466 ENDIF(PYTHON_ROOT_DIR OR ENV{PYTHON_ROOT_DIR})
468 IF (${CMAKE_VERSION} VERSION_GREATER "3.12.0")
469 find_package(Python ${PYTHON2OR3} REQUIRED COMPONENTS Interpreter Development )
470 SET(PYTHON_EXECUTABLE ${Python_EXECUTABLE})
471 ELSE (${CMAKE_VERSION} VERSION_GREATER "3.12.0")
472 find_package(PythonInterp ${PYTHON2OR3} REQUIRED )
473 find_package(PythonLibs ${PYTHON2OR3} REQUIRED )
474 set(Python_LIBRARIES ${PYTHON_LIBRARIES})
475 set(Python_INCLUDE_DIRS ${PYTHON_INCLUDE_DIRS})
476 set(Python_VERSION ${PYTHON_VERSION_STRING})
477 set(Python_VERSION_MAJOR ${PYTHON_VERSION_MAJOR})
478 set(Python_VERSION_MINOR ${PYTHON_VERSION_MINOR})
479 ENDIF(${CMAKE_VERSION} VERSION_GREATER "3.12.0")
482 IF ( NOT PYQT5_ROOT_DIR )
483 set(PYQT5_ROOT_DIR $ENV{PYQT5_ROOT_DIR} )
484 ENDIF( NOT PYQT5_ROOT_DIR )
487 IF ( NOT MATPLOTLIB_ROOT_DIR )
488 set(MATPLOTLIB_ROOT_DIR $ENV{MATPLOTLIB_ROOT_DIR} )
489 ENDIF( NOT MATPLOTLIB_ROOT_DIR )
492 IF ( NOT HDF5_ROOT_DIR )
493 IF ( ENV{HDF5_ROOT_DIR} )
494 set(HDF5_ROOT_DIR $ENV{HDF5_ROOT_DIR} )
495 ELSE( ENV{HDF5_ROOT_DIR} )
496 set(HDF5_ROOT_DIR ${HDF5_ROOT} )
497 ENDIF( ENV{HDF5_ROOT_DIR} )
498 ENDIF( NOT HDF5_ROOT_DIR )
500 #Paraview library paths
501 set (PV_LIB_DIR /usr/lib/python${Python_VERSION_MAJOR}.${Python_VERSION_MINOR}/dist-packages/paraview/:/usr/lib64/python${Python_VERSION_MAJOR}.${Python_VERSION_MINOR}/site-packages/vtk/:${MATPLOTLIB_ROOT_DIR}/lib/:${PARAVIEW_LIBRARIES_DIR})
502 set (PV_PYTHON_DIR /usr/lib/python${Python_VERSION_MAJOR}.${Python_VERSION_MINOR}/dist-packages/paraview/:/usr/lib64/python${Python_VERSION_MAJOR}.${Python_VERSION_MINOR}/site-packages/vtk/:/usr/lib64/paraview/site-packages/:/usr/lib64/paraview/site-packages/paraview/:/usr/lib64/paraview/site-packages/vtk/:/usr/lib64/paraview/python${Python_VERSION_MAJOR}.${Python_VERSION_MINOR}/site-packages/:/usr/lib64/paraview/python${Python_VERSION_MAJOR}.${Python_VERSION_MINOR}/site-packages/paraview/:/usr/lib64/paraview/python${Python_VERSION_MAJOR}.${Python_VERSION_MINOR}/site-packages/vtkmodules:/usr/lib/paraview/site-packages/paraview:/usr/lib/paraview/site-packages/paraview/vtk:${PARAVIEW_ROOT_DIR}/lib/:${PARAVIEW_ROOT_DIR}/lib/python${Python_VERSION_MAJOR}.${Python_VERSION_MINOR}/site-packages/:${PARAVIEW_ROOT_DIR}/lib/python${Python_VERSION_MAJOR}.${Python_VERSION_MINOR}/site-packages/vtkmodules/:${MATPLOTLIB_ROOT_DIR}/lib/python${Python_VERSION_MAJOR}.${Python_VERSION_MINOR}/site-packages:${PYQT5_ROOT_DIR}:${PYQT5_ROOT_DIR}/lib/python${Python_VERSION_MAJOR}.${Python_VERSION_MINOR}/site-packages)
504 message(STATUS "Python version found is ${Python_VERSION}")
505 find_package (SWIG 3.0 REQUIRED)
507 if (SOLVERLAB_WITH_DOCUMENTATION) #
508 find_package (Doxygen) #
509 set (CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS}, doxygen, graphviz, mscgen")
510 set (CPACK_RPM_PACKAGE_REQUIRES "${CPACK_RPM_PACKAGE_REQUIRES}, doxygen, graphviz, mscgen")
511 if (NOT DOXYGEN_FOUND)
512 message (FATAL_ERROR "Doxygen is needed to build the documentation. Please install it correctly.")
513 endif(NOT DOXYGEN_FOUND)
515 if (SOLVERLAB_WITH_TESTS) #
517 find_package (CPPUNIT REQUIRED)
519 find_package (XDR REQUIRED)
521 # Enter subdirectories
522 add_subdirectory (CDMATH)
523 if(SOLVERLAB_WITH_COREFLOWS)
524 add_subdirectory (CoreFlows)
525 endif(SOLVERLAB_WITH_COREFLOWS)
529 ${PROJECT_SOURCE_DIR}/env_SOLVERLAB.sh
530 ${CMAKE_INSTALL_PREFIX}/env_SOLVERLAB.sh