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")
55 if ( DEFINED ENV{MPI_ROOT_DIR} OR DEFINED MPI_ROOT_DIR )
56 if ( DEFINED ENV{MPI_ROOT_DIR} )
57 set(MPI_HOME $ENV{MPI_ROOT_DIR})
58 else ( DEFINED ENV{MPI_ROOT_DIR} )
59 set(MPI_HOME ${MPI_ROOT_DIR})
60 endif( DEFINED ENV{MPI_ROOT_DIR} )
61 endif( DEFINED ENV{MPI_ROOT_DIR} OR DEFINED MPI_ROOT_DIR )
63 if( DEFINED ENV{MPI_HOME} OR MPI_HOME )
64 set(SOLVERLAB_WITH_MPI ON)
66 if( ${MPI_LIBRARY} STREQUAL "MPI_LIBRARY-NOTFOUND")
67 set ( MPI_LIBRARY ${MPI_HOME}/lib/libmpi.so )
68 endif(${MPI_LIBRARY} STREQUAL "MPI_LIBRARY-NOTFOUND")
69 message ( STATUS "MPI executable is ${MPIEXEC}" )
70 else( DEFINED ENV{MPI_HOME} OR MPI_HOME )
71 set(SOLVERLAB_WITH_MPI OFF)
72 endif( DEFINED ENV{MPI_HOME} OR MPI_HOME )
74 ############################
75 # Definition of HDF5_HOME #
76 ############################
77 if ( DEFINED ENV{HDF5_ROOT_DIR} OR DEFINED HDF5_ROOT_DIR )
78 if ( DEFINED ENV{HDF5_ROOT_DIR} )
79 set(HDF5_ROOT $ENV{HDF5_ROOT_DIR})
80 else ( DEFINED ENV{HDF5_ROOT_DIR} )
81 set(HDF5_ROOT ${HDF5_ROOT_DIR})
82 endif( DEFINED ENV{HDF5_ROOT_DIR} )
83 endif( DEFINED ENV{HDF5_ROOT_DIR} OR DEFINED HDF5_ROOT_DIR )
85 ######################################################
86 # Detection or compilation of PETSc+SLEPc+HDF5 #
87 ######################################################
88 if ( DEFINED ENV{PETSC_DIR} OR PETSC_DIR)
90 set(PETSC_DIR $ENV{PETSC_DIR})
91 message ( STATUS "Checking variable PETSC_DIR : " $ENV{PETSC_DIR} )
93 message ( STATUS "Checking variable PETSC_DIR : " ${PETSC_DIR} )
96 find_package (PETSc 3.4 REQUIRED)
99 message ( STATUS "PETSc found. Version is ${PETSC_VERSION_MAJOR}.${PETSC_VERSION_MINOR}.${PETSC_VERSION_SUBMINOR}" )
100 message ( STATUS "PETSc compiler is ${PETSC_COMPILER}" )
101 message ( STATUS "PETSc executable is ${PETSC_MPIEXEC}")
103 set(PETSC_INSTALL ${PETSC_DIR})
105 #Define and search slepc variables
107 if ( DEFINED ENV{SLEPC_DIR} )
108 set(SLEPC_DIR $ENV{SLEPC_DIR})
109 else ( DEFINED ENV{SLEPC_DIR} )
110 set(SLEPC_DIR ${PETSC_DIR}/${PETSC_ARCH})
111 endif( DEFINED ENV{SLEPC_DIR} )
112 endif( NOT SLEPC_DIR)
114 message ( STATUS "Checking variable SLEPC_DIR" )
115 if ( IS_DIRECTORY ${SLEPC_DIR}/include AND EXISTS ${SLEPC_DIR}/lib/libslepc.so)
116 set(SLEPC_INCLUDES ${SLEPC_DIR}/include)
117 set(SLEPC_LIBRARIES ${SLEPC_DIR}/lib/libslepc.so)
118 message( STATUS "SLEPc found at ${SLEPC_DIR}" )
120 message( FATAL_ERROR "SLEPc not found at ${SLEPC_DIR}" )
123 #define hdf5 variables
124 if ( NOT HDF5_ROOT )#hdf5 is not defined in cmake arguments
125 if ( DEFINED ENV{HDF5_ROOT} )#hdf5 is defined in the environment
126 set(HDF5_ROOT $ENV{HDF5_ROOT})
127 else( DEFINED ENV{HDF5_ROOT} )#hdf5 is not defined in the environment
128 #HDF5 to be found in petsc external packages
129 set(HDF5_ROOT ${PETSC_DIR}/${PETSC_ARCH})# define hint for hdf5/med installation in petsc external packages
130 endif( DEFINED ENV{HDF5_ROOT} )
131 endif( NOT HDF5_ROOT )
133 find_package(HDF5 COMPONENTS CXX HL)
135 set(HDF5_LIBRARY_DIR ${HDF5_ROOT}/lib)
136 set(HDF5_INCLUDE_DIRS ${HDF5_ROOT}/include)
137 endif( NOT HDF5_FOUND)
139 else ( DEFINED ENV{PETSC_DIR} OR PETSC_DIR )
140 message ( STATUS "PETSC_DIR not set, searching PETSc and SLEPc in the system" )
142 if ( IS_DIRECTORY "/usr/include/petsc/" AND EXISTS "/usr/lib64/libpetsc.so" ) #Case fedora/redhat system install
143 message ( STATUS "PETSC includes found in /usr/include/petsc/" )
144 message ( STATUS "PETSC library found in /usr/lib64" )
146 set(PETSC_INCLUDES /usr/include/petsc /usr/include/petsc/petsc/mpiuni)
147 set(PETSC_LIBRARIES /usr/lib64/libpetsc.so)
149 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
151 set(CPACK_RPM_PACKAGE_REQUIRES "${CPACK_RPM_PACKAGE_REQUIRES}, petsc-devel (>= 3.4)") # This is not fully working yet.
152 set(PETSC_INSTALL ${PETSC_DIR})
154 #Define and search slepc variables
155 if ( IS_DIRECTORY "/usr/include/slepc/" AND EXISTS "/usr/lib64/libslepc.so" )
156 message( STATUS "SLEPc includes found in /usr/include/slepc/" )
157 message( STATUS "SLEPc library found in /usr/lib64/slepc/" )
159 set(SLEPC_INCLUDES ${SLEPC_DIR}/include)
160 set(SLEPC_LIBRARIES ${SLEPC_DIR}/lib/libslepc.so)
161 set (CPACK_RPM_PACKAGE_REQUIRES "${CPACK_RPM_PACKAGE_REQUIRES}, slepc-devel (>= 3.4)") # This is not fully working yet.
162 else ( IS_DIRECTORY "/usr/include/slepc/" AND EXISTS "/usr/lib64/libslepc.so" )
163 message( FATAL_ERROR "SLEPc not found in the system" )
164 endif( IS_DIRECTORY "/usr/include/slepc/" AND EXISTS "/usr/lib64/libslepc.so" )
166 #HDF5 to be found in the system
167 if ( NOT HDF5_ROOT AND NOT DEFINED ENV{HDF5_ROOT} )#hdf5 is not defined in the environment
168 find_package(HDF5 REQUIRED)
169 set(CPACK_DEBIAN_PACKAGE_DEPENDS "libhdf5-dev")
170 set(CPACK_RPM_PACKAGE_REQUIRES "hdf5-devel")
171 endif( NOT HDF5_ROOT AND NOT DEFINED ENV{HDF5_ROOT} )
173 #elseif ( IS_DIRECTORY "/usr/lib/petsc/include" AND EXISTS "/usr/lib/petsc/lib/libpetsc_real.so" ) #Case ubuntu/debian system install
174 # message ( STATUS "PETSc includes found in /usr/lib/petsc/include")
175 # message ( STATUS "PETSc library found in /usr/lib/petsc/lib/libpetsc_real.so")
176 # set(PETSC_DIR /usr/lib/petsc/)
177 # set(PETSC_INCLUDES ${PETSC_DIR}/include ${PETSC_DIR}/include/petsc/mpiuni)
178 # set(PETSC_LIBRARIES ${PETSC_DIR}/lib/libpetsc_real.so)
180 # find_package (PETSc 3.4 REQUIRED)
181 # petsc_get_version ()
182 # set (CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS}, petsc-dev (>= 3.4)") # This is not fully working yet.
184 # Define and search slepc variables
185 # if ( IS_DIRECTORY "/usr/lib/slepc/include" AND EXISTS "/usr/lib/slepc/lib/libslepc_real.so" )
186 # message( STATUS "SLEPc includes found in /usr/lib/slepc/include" )
187 # message( STATUS "SLEPc library found in /usr/lib/slepc/lib/libslepc_real.so" )
188 # set(SLEPC_DIR /usr/lib/slepc/)
189 # set(SLEPC_INCLUDES ${SLEPC_DIR}/include)
190 # set(SLEPC_LIBRARIES ${SLEPC_DIR}/lib/libslepc_real.so)
191 # set (CPACK_DEBIAN_PACKAGE_REQUIRES "${CPACK_DEBIAN_PACKAGE_REQUIRES}, slepc-devel (>= 3.4)") # This is not fully working yet.
192 # else ( IS_DIRECTORY "/usr/lib/slepc/include" AND EXISTS "/usr/lib/slepc/lib/libslepc_real.so" )
193 # message( FATAL_ERROR "SLEPc not found in the system" )
194 # endif( IS_DIRECTORY "/usr/lib/slepc/include" AND EXISTS "/usr/lib/slepc/lib/libslepc_real.so" )
196 #elseif ( IS_DIRECTORY "/usr/local/lib/python2.7/dist-packages/petsc") #Case ubuntu/debian system pip install
198 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
199 message (STATUS "PETSC not found in the system")
200 message (STATUS "PETSC will be downloaded and compiled from ${DOWNLOAD_PETSC}" )
201 message (STATUS "SLEPC will be downloaded and compiled from ${DOWNLOAD_SLEPC}" )
202 message (STATUS "HDF5 will be downloaded and compiled from ${DOWNLOAD_HDF5}" )
204 #extract petsc tarball name
205 string(LENGTH "${DOWNLOAD_PETSC}" tarball_url_length)#length of the tarball
206 string(FIND "${DOWNLOAD_PETSC}" "/" start_tarball_name REVERSE )# last occurence of "/"
207 MATH(EXPR start_tarball_name "${start_tarball_name}+1")#start after the occurence of "/"
208 MATH(EXPR tarball_name_length "${tarball_url_length}-${start_tarball_name}-7")#name ends before .tar.gz that counts for 7 characters
209 string(SUBSTRING ${DOWNLOAD_PETSC} ${start_tarball_name} ${tarball_name_length} PETSC_TARBALL_NAME)
211 set(PETSC_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis/${PETSC_TARBALL_NAME}) # Location of the final install
212 set(PETSC_ARCH arch-linux-c-opt)
213 set(PETSC_INSTALL ${CMAKE_INSTALL_PREFIX}/lib/petsc)#folder to copy petsc libraries and include files
215 ExternalProject_Add (PETSc
216 URL ${DOWNLOAD_PETSC}
217 SOURCE_DIR ${PETSC_DIR}
219 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}
220 BUILD_COMMAND make all
221 TEST_COMMAND make check
222 INSTALL_COMMAND make install
223 INSTALL_DIR ${PETSC_DIR}
224 STAMP_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis
225 LOG_DOWNLOAD TRUE # Wrap download in script to log output
226 LOG_UPDATE TRUE # Wrap update in script to log output
227 LOG_CONFIGURE TRUE # Wrap configure in script to log output
228 LOG_BUILD TRUE # Wrap build in script to log output
229 LOG_TEST TRUE # Wrap test in script to log output
230 LOG_INSTALL TRUE # Wrap install in script to log output
233 message( STATUS "PETSc, SLEPc and HDF5 will be installed at ${PETSC_INSTALL}")
235 string(LENGTH "${PETSC_TARBALL_NAME}" tarball_name_length)#length of the tarball
236 string(FIND "${PETSC_TARBALL_NAME}" "-" start_version_name REVERSE )# last occurence of "-"
237 MATH(EXPR start_version_name "${start_version_name}+1")#start after the occurence of "/"
238 string(SUBSTRING ${PETSC_TARBALL_NAME} ${start_version_name} ${tarball_name_length} PETSC_VERSION)
239 message( STATUS "PETSc version ${PETSC_VERSION} will be installed" )
241 set(PETSC_INCLUDES ${PETSC_DIR}/${PETSC_ARCH}/include ${PETSC_DIR}/include)
242 set(PETSC_LIBRARIES ${PETSC_DIR}/${PETSC_ARCH}/lib/libpetsc.so)
244 #extract slepc tarball name
245 string(LENGTH "${DOWNLOAD_SLEPC}" tarball_url_length)#length of the tarball
246 string(FIND "${DOWNLOAD_SLEPC}" "/" start_tarball_name REVERSE )# last occurence of "/"
247 MATH(EXPR start_tarball_name "${start_tarball_name}+1")#start after the occurence of "/"
248 MATH(EXPR tarball_name_length "${tarball_url_length}-${start_tarball_name}-7")#name ends before .tar.gz that counts for 7 characters
249 string(SUBSTRING ${DOWNLOAD_SLEPC} ${start_tarball_name} ${tarball_name_length} SLEPC_TARBALL_NAME)
251 #extract slepc version
252 string(LENGTH "${SLEPC_TARBALL_NAME}" tarball_name_length)#length of the tarball
253 string(FIND "${SLEPC_TARBALL_NAME}" "-" start_version_name REVERSE )# last occurence of "-"
254 MATH(EXPR start_version_name "${start_version_name}+1")#start after the occurence of "/"
255 string(SUBSTRING ${SLEPC_TARBALL_NAME} ${start_version_name} ${tarball_name_length} SLEPC_VERSION)
256 message( STATUS "SLEPc version ${SLEPC_VERSION} will be installed" )
258 #define slepc variables
259 set(SLEPC_DIR ${PETSC_INSTALL})
260 set(SLEPC_INCLUDES ${SLEPC_DIR}/include ${PETSC_DIR}/${PETSC_ARCH}/externalpackages/${SLEPC_TARBALL_NAME}/include )
261 set(SLEPC_LIBRARIES ${PETSC_DIR}/${PETSC_ARCH}/externalpackages/${SLEPC_TARBALL_NAME}/installed-arch-linux2-c-opt/lib/libslepc.so)
262 message( STATUS "SLEPc includes ${SLEPC_INCLUDES}")
264 #define hdf5 variables
265 if ( NOT HDF5_ROOT )#hdf5 is not defined in cmake arguments
266 if ( DEFINED ENV{HDF5_ROOT} )#hdf5 is defined in the environment
267 set(HDF5_ROOT $ENV{HDF5_ROOT})
268 else( DEFINED ENV{HDF5_ROOT} )#hdf5 is not defined in the environment
269 set(HDF5_ROOT ${PETSC_INSTALL})#HDF5 to be found in petsc installation
270 endif( DEFINED ENV{HDF5_ROOT} )
271 endif( NOT HDF5_ROOT )
272 set(HDF5_LIBRARY_DIR ${HDF5_ROOT}/lib)
273 set(HDF5_INCLUDE_DIRS ${HDF5_ROOT}/include)
275 #define MPI variables
276 #set(SOLVERLAB_WITH_MPI ON)
277 #set(MPI_HOME ${PETSC_INSTALL} )
278 #set(MPI_LIBRARY ${PETSC_INSTALL}/lib/libmpi.so)
279 #set(MPIEXEC ${PETSC_INSTALL}/bin/mpiexec)
281 endif ( IS_DIRECTORY "/usr/include/petsc/" AND EXISTS "/usr/lib64/libpetsc.so" )
282 endif ( DEFINED ENV{PETSC_DIR} OR PETSC_DIR )
284 if ( ${PETSC_VERSION} VERSION_GREATER 3.5 )
285 add_definitions(-DPETSC_VERSION_GREATER_3_5)
286 endif( ${PETSC_VERSION} VERSION_GREATER 3.5 )
288 string(REPLACE ";" ":" PETSC_INCLUDES_INSTALL "${PETSC_INCLUDES}")# use colon instead of semicolon in environment file env_SOLVERLAB.sh
290 add_library(petsc SHARED IMPORTED)
291 set_property(TARGET petsc PROPERTY IMPORTED_LOCATION ${PETSC_LIBRARIES})
292 add_library(slepc SHARED IMPORTED)
293 set_property(TARGET slepc PROPERTY IMPORTED_LOCATION ${SLEPC_LIBRARIES})
295 ######################################################
296 # Detection or compilation of MEDFile #
297 ######################################################
298 if( MEDFILE_ROOT_DIR OR DEFINED ENV{MEDFILE_ROOT_DIR})
300 if ( NOT MEDFILE_ROOT_DIR )
301 set(MEDFILE_ROOT_DIR $ENV{MEDFILE_ROOT_DIR} )
302 endif( NOT MEDFILE_ROOT_DIR )
304 find_package (MEDFile REQUIRED)
306 else( MEDFILE_ROOT_DIR OR DEFINED ENV{MEDFILE_ROOT_DIR})
308 message(STATUS "MED will be downloaded and installed from ${DOWNLOAD_MED}")
310 set(MEDFILE_DEFINITIONS "-D${MACHINE} -DMEDFILE_INSTALL_DOC=OFF")#Comment ne pas compiler la doc ?
311 set(MEDFILE_ROOT_DIR ${CMAKE_INSTALL_PREFIX}/lib/med) # Location of the final install
313 #extraction of the tarball archive name
314 string(LENGTH "${DOWNLOAD_MED}" tarball_url_length)#length of the name of the tarball
315 string(FIND "${DOWNLOAD_MED}" "/" start_tarball_name REVERSE )# last occurence of "/"
316 MATH(EXPR start_tarball_name "${start_tarball_name}+1")#start after the occurence of "/"
317 MATH(EXPR tarball_name_length "${tarball_url_length}-${start_tarball_name}-7")#name ends before .tar.gz that counts for 7 characters
318 string(SUBSTRING ${DOWNLOAD_MED} ${start_tarball_name} ${tarball_name_length} MED_TARBALL_NAME)
320 ExternalProject_Add (MED
321 URL ${DOWNLOAD_MED} #location of med tarball
322 SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis/${MED_TARBALL_NAME}
324 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
326 INSTALL_COMMAND make install
327 INSTALL_DIR ${MEDFILE_ROOT_DIR}
328 STAMP_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis
329 LOG_DOWNLOAD TRUE # Wrap download in script to log output
330 LOG_UPDATE TRUE # Wrap update in script to log output
331 LOG_CONFIGURE TRUE # Wrap configure in script to log output
332 LOG_BUILD TRUE # Wrap build in script to log output
333 LOG_TEST TRUE # Wrap test in script to log output
334 LOG_INSTALL TRUE # Wrap install in script to log output
337 set(MEDFILE_INCLUDE_DIRS ${MEDFILE_ROOT_DIR}/include)# Nécessaire pour le medloader et les sous-dossiers mesh, et IJKMesh
338 set(MEDFILE_LIBRARIES ${MEDFILE_ROOT_DIR}/lib)# Nécessaire pour le env_SOLVERLAB.sh
339 set(MEDFILE_C_LIBRARIES med medC)# Nécessaire pour le medloader
341 endif( MEDFILE_ROOT_DIR OR DEFINED ENV{MEDFILE_ROOT_DIR})
343 add_library(med SHARED IMPORTED)
344 set_property(TARGET med PROPERTY IMPORTED_LOCATION ${MEDFILE_ROOT_DIR}/lib/libmed.so)
345 add_library(medC SHARED IMPORTED)
346 set_property(TARGET medC PROPERTY IMPORTED_LOCATION ${MEDFILE_ROOT_DIR}/lib/libmedC.so)
348 string(REPLACE ";" ":" MEDFILE_LIBRARIES_INSTALL "${MEDFILE_LIBRARIES}")# use colon instead of semicolon in environment file env_SOLVERLAB.sh
350 ######################################################
351 # Detection or compilation of MEDCoupling #
352 ######################################################
353 if( MEDCOUPLING_ROOT_DIR OR DEFINED ENV{MEDCOUPLING_ROOT_DIR})
355 if ( NOT MEDCOUPLING_ROOT_DIR )
356 set(MEDCOUPLING_ROOT_DIR $ENV{MEDCOUPLING_ROOT_DIR} )
357 endif( NOT MEDCOUPLING_ROOT_DIR )
359 message (STATUS "Seeking MEDCoupling library in ${MEDCOUPLING_ROOT_DIR}")
361 set(MEDCoupling_DIR ${MEDCOUPLING_ROOT_DIR}/cmake_files)
362 find_package(MEDCoupling CONFIG REQUIRED) # CONFIG is important !
363 message( STATUS "MEDCoupling found. Version is ${MEDCoupling_VERSION}")
365 else( DEFINED MEDCOUPLING_ROOT_DIR OR DEFINED ENV{MEDCOUPLING_ROOT_DIR})
366 message(STATUS "MEDCoupling will be downloaded and installed from ${DOWNLOAD_MEDCOUPLING}")
367 set(MEDCOUPLING_ROOT_DIR ${CMAKE_INSTALL_PREFIX}/lib/medcoupling) # Location of the final install
368 SET(ENV{HDF5_ROOT} ${HDF5_ROOT})#MEDCoupling install process seems to require an environment variable
370 #extraction of the tarball archive name
371 string(LENGTH "${DOWNLOAD_MEDCOUPLING}" tarball_url_length)#length of the tarball
372 string(FIND "${DOWNLOAD_MEDCOUPLING}" "/" start_tarball_name REVERSE )# last occurence of "/"
373 MATH(EXPR start_tarball_name "${start_tarball_name}+1")#start after the occurence of "/"
374 MATH(EXPR tarball_name_length "${tarball_url_length}-${start_tarball_name}-7")#name ends before .tar.gz that counts for 7 characters
375 string(SUBSTRING ${DOWNLOAD_MEDCOUPLING} ${start_tarball_name} ${tarball_name_length} MEDCOUPLING_TARBALL_NAME)
376 string(SUBSTRING ${MEDCOUPLING_TARBALL_NAME} 12 ${tarball_name_length} MEDCoupling_VERSION)
378 message(STATUS "MEDCoupling will be installed at ${MEDCOUPLING_ROOT_DIR}")
380 ExternalProject_Add (MEDCoupling
381 URL ${DOWNLOAD_MEDCOUPLING} #location of medcoupling tarball
382 SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis/${MEDCOUPLING_TARBALL_NAME}
384 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 #-DSALOME_USE_MPI=ON
386 INSTALL_COMMAND make install
387 INSTALL_DIR ${MEDCOUPLING_ROOT_DIR}
388 STAMP_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis
389 LOG_DOWNLOAD TRUE # Wrap download in script to log output
390 LOG_UPDATE TRUE # Wrap update in script to log output
391 LOG_CONFIGURE TRUE # Wrap configure in script to log output
392 LOG_BUILD TRUE # Wrap build in script to log output
393 LOG_TEST TRUE # Wrap test in script to log output
394 LOG_INSTALL TRUE # Wrap install in script to log output
397 add_library(medloader SHARED IMPORTED )
398 set_property(TARGET medloader PROPERTY IMPORTED_LOCATION ${MEDCOUPLING_ROOT_DIR}/lib/libmedloader.so)
400 SET(MEDCOUPLING_USE_64BIT_IDS ON)
402 endif( MEDCOUPLING_ROOT_DIR OR DEFINED ENV{MEDCOUPLING_ROOT_DIR} )
404 set(MEDCOUPLING_INCLUDE_DIR ${MEDCOUPLING_ROOT_DIR}/include)
405 set(MEDCOUPLING_LIBRARIES ${MEDCOUPLING_ROOT_DIR}/lib )#for environment file env_SOLVERLAB.sh
407 add_library(medcoupling SHARED IMPORTED )
408 set_property(TARGET medcoupling PROPERTY IMPORTED_LOCATION ${MEDCOUPLING_ROOT_DIR}/lib/libmedcoupling.so)
410 if ( ${MEDCoupling_VERSION} VERSION_GREATER 9.4 )
411 add_definitions(-DMEDCoupling_VERSION_VERSION_GREATER_9_4)
412 endif( ${MEDCoupling_VERSION} VERSION_GREATER 9.4 )
414 if (TARGET MED AND TARGET PETSc)
415 ExternalProject_Add_StepDependencies( MED build PETSc )#PETSc doit être compilé avant MED car c'est PETSc qui compile HDF5
416 endif(TARGET MED AND TARGET PETSc)
418 if (TARGET MED AND TARGET MEDCoupling)
419 ExternalProject_Add_StepDependencies( MEDCoupling build MED )#MED doit être compilé avant MEDCoupling
420 endif(TARGET MED AND TARGET MEDCoupling)
422 if (TARGET PETSc AND TARGET MEDCoupling)
423 ExternalProject_Add_StepDependencies( MEDCoupling build PETSc )#PETSc doit être compilé avant MEDCoupling (car il contient hdf5)
424 endif(TARGET PETSc AND TARGET MEDCoupling)
426 IF(MEDCOUPLING_USE_64BIT_IDS)
427 SET(CMAKE_SWIG_FLAGS ${CMAKE_SWIG_FLAGS} -DMEDCOUPLING_USE_64BIT_IDS)
428 ENDIF(MEDCOUPLING_USE_64BIT_IDS)
434 # Paraview variables to choose python version and for env_SOLVERLAB.sh
435 if ( PARAVIEW_ROOT_DIR OR DEFINED ENV{PARAVIEW_ROOT_DIR})
436 if ( PARAVIEW_ROOT_DIR )
437 set( PARAVIEW_INCLUDE_DIR ${PARAVIEW_ROOT_DIR}/include)
438 set( PARAVIEW_LIBRARIES_DIR ${PARAVIEW_ROOT_DIR}/lib)
439 else( PARAVIEW_ROOT_DIR )
440 set( PARAVIEW_ROOT_DIR $ENV{PARAVIEW_ROOT_DIR} )
441 set( PARAVIEW_INCLUDE_DIR $ENV{PARAVIEW_ROOT_DIR}/include)
442 set( PARAVIEW_LIBRARIES_DIR $ENV{PARAVIEW_ROOT_DIR}/lib)
443 endif( PARAVIEW_ROOT_DIR )
444 else( PARAVIEW_ROOT_DIR OR DEFINED ENV{PARAVIEW_ROOT_DIR})
445 message(STATUS "PARAVIEW_ROOT_DIR not set. Trying to detect paraview.")
446 set( PARAVIEW_INCLUDE_DIR /usr/include/paraview/)
447 set( PARAVIEW_LIBRARIES_DIR /usr/lib/paraview/:/usr/lib64/paraview/:/usr/lib64/vtk/:/usr/lib/vtk/)
448 endif( PARAVIEW_ROOT_DIR OR DEFINED ENV{PARAVIEW_ROOT_DIR})
450 if ( DEFINED PARAVIEW_VERSION OR DEFINED ENV{PARAVIEW_VERSION} )
451 if ( NOT DEFINED PARAVIEW_VERSION )
452 set( PARAVIEW_VERSION $ENV{PARAVIEW_VERSION})
453 endif( NOT DEFINED PARAVIEW_VERSION )
454 message(STATUS "ParaView version is ${PARAVIEW_VERSION}" )
455 else( DEFINED PARAVIEW_VERSION OR DEFINED ENV{PARAVIEW_VERSION} )
456 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 )
457 find_file( vtkConfig_file vtkPVConfig.h HINTS ${PARAVIEW_INCLUDE_DIR} PATH_SUFFIXES ${PARAVIEW_SUFFIXES})
459 #extraction of the paraview version"
460 IF ( ${vtkConfig_file} STREQUAL "vtkConfig_file-NOTFOUND" )
461 message(WARNING "Could not find ParaView configuration file vtkPVConfig.h in folder ${PARAVIEW_INCLUDE_DIR} and subdirectories ${PARAVIEW_SUFFIXES}. Postprocessing may not work")
462 set( PARAVIEW_VERSION "5.8")
463 ELSE ( ${vtkConfig_file} STREQUAL "vtkConfig_file-NOTFOUND" )
464 message( STATUS "Found vtkPVConfig.h in ${vtkConfig_file}")
465 file(STRINGS ${vtkConfig_file} vtkConfig)
466 FOREACH(line ${vtkConfig})
467 string(FIND "${line}" "#define PARAVIEW_VERSION_FULL " pos)
468 IF(NOT ${pos} EQUAL -1)
469 string(LENGTH ${line} line_length)#length of the tarball
470 MATH(EXPR start_pv_version "${line_length}-6")#line ends with "x.y.z", that counts for 7 characters
471 string(SUBSTRING ${line} ${start_pv_version} 5 PARAVIEW_VERSION)
473 ENDIF(NOT ${pos} EQUAL -1)
474 ENDFOREACH(line ${vtkConfig})
475 message(STATUS "ParaView detected, version is ${PARAVIEW_VERSION}" )
476 ENDIF( ${vtkConfig_file} STREQUAL "vtkConfig_file-NOTFOUND" )
477 endif( DEFINED PARAVIEW_VERSION OR DEFINED ENV{PARAVIEW_VERSION} )
479 #Choose python 2 or 3
480 IF ( ${PARAVIEW_VERSION} STRGREATER "5.6" OR ${PARAVIEW_VERSION} STREQUAL "5.6" )#Use python 3, use VERSION_GREATER_EQUAL if cmake >=3.7
482 message(STATUS "PARAVIEW_VERSION greater than 5.6. We need python3 for postprocessing scripts.")
483 ELSE ( ${PARAVIEW_VERSION} STRGREATER "5.6" OR ${PARAVIEW_VERSION} STREQUAL "5.6" )#Use python 2
485 message(STATUS "PARAVIEW_VERSION smaller than 5.6. We need python2 for postprocessing scripts.")
486 ENDIF( ${PARAVIEW_VERSION} STRGREATER "5.6" OR ${PARAVIEW_VERSION} STREQUAL "5.6" )
489 IF ( PYTHON_ROOT_DIR OR DEFINED ENV{PYTHON_ROOT_DIR})
490 IF ( PYTHON_ROOT_DIR )
491 set(Python_ROOT_DIR ${PYTHON_ROOT_DIR} )
492 ELSE( PYTHON_ROOT_DIR )
493 set(Python_ROOT_DIR $ENV{PYTHON_ROOT_DIR} )
494 ENDIF( PYTHON_ROOT_DIR)
495 ENDIF( PYTHON_ROOT_DIR OR DEFINED ENV{PYTHON_ROOT_DIR})
497 IF (${CMAKE_VERSION} VERSION_GREATER "3.12.0")
498 find_package(Python ${PYTHON2OR3} REQUIRED COMPONENTS Interpreter Development )
499 SET(PYTHON_EXECUTABLE ${Python_EXECUTABLE})
500 ELSE (${CMAKE_VERSION} VERSION_GREATER "3.12.0")
501 find_package(PythonInterp ${PYTHON2OR3} REQUIRED )
502 find_package(PythonLibs ${PYTHON2OR3} REQUIRED )
503 set(Python_LIBRARIES ${PYTHON_LIBRARIES})
504 set(Python_INCLUDE_DIRS ${PYTHON_INCLUDE_DIRS})
505 set(Python_VERSION ${PYTHON_VERSION_STRING})
506 set(Python_VERSION_MAJOR ${PYTHON_VERSION_MAJOR})
507 set(Python_VERSION_MINOR ${PYTHON_VERSION_MINOR})
508 ENDIF(${CMAKE_VERSION} VERSION_GREATER "3.12.0")
511 IF ( NOT DEFINED PYQT5_ROOT_DIR )
512 set(PYQT5_ROOT_DIR $ENV{PYQT5_ROOT_DIR} )
513 ENDIF( NOT DEFINED PYQT5_ROOT_DIR )
516 IF ( NOT DEFINED MATPLOTLIB_ROOT_DIR )
517 set(MATPLOTLIB_ROOT_DIR $ENV{MATPLOTLIB_ROOT_DIR} )
518 ENDIF( NOT DEFINED MATPLOTLIB_ROOT_DIR )
520 #define HDF5_ROOT_DIR
521 IF ( NOT HDF5_ROOT_DIR )
522 IF ( ENV{HDF5_ROOT_DIR} )
523 set(HDF5_ROOT_DIR $ENV{HDF5_ROOT_DIR} )
524 ELSE( ENV{HDF5_ROOT_DIR} )
525 set(HDF5_ROOT_DIR ${HDF5_ROOT} )
526 ENDIF( ENV{HDF5_ROOT_DIR} )
527 ENDIF( NOT HDF5_ROOT_DIR )
530 #Paraview library paths
531 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})
532 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)
534 message(STATUS "Python version found is ${Python_VERSION}")
537 IF ( DEFINED SWIG_ROOT_DIR OR DEFINED ENV{SWIG_ROOT_DIR})
538 IF ( DEFINED SWIG_ROOT_DIR )
539 set(SWIG_EXECUTABLE ${SWIG_ROOT_DIR}/bin/swig )
540 ELSE ( DEFINED SWIG_ROOT_DIR )
541 set(SWIG_EXECUTABLE $ENV{SWIG_ROOT_DIR}/bin/swig )
542 ENDIF( DEFINED SWIG_ROOT_DIR)
543 ENDIF( DEFINED SWIG_ROOT_DIR OR DEFINED ENV{SWIG_ROOT_DIR})
544 find_package (SWIG 3.0 REQUIRED)
547 if (SOLVERLAB_WITH_DOCUMENTATION) #
548 IF ( DEFINED DOXYGEN_ROOT_DIR OR DEFINED ENV{DOXYGEN_ROOT_DIR})
549 IF ( DEFINED DOXYGEN_ROOT_DIR )
550 set(DOXYGEN_EXECUTABLE ${DOXYGEN_ROOT_DIR}/bin/doxygen )
551 ELSE ( DEFINED DOXYGEN_ROOT_DIR )
552 set(DOXYGEN_EXECUTABLE $ENV{DOXYGEN_ROOT_DIR}/bin/doxygen )
553 ENDIF( DEFINED DOXYGEN_ROOT_DIR)
554 ENDIF( DEFINED DOXYGEN_ROOT_DIR OR DEFINED ENV{DOXYGEN_ROOT_DIR})
555 find_package (Doxygen) #
556 set (CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS}, doxygen, graphviz, mscgen")
557 set (CPACK_RPM_PACKAGE_REQUIRES "${CPACK_RPM_PACKAGE_REQUIRES}, doxygen, graphviz, mscgen")
558 if (NOT DOXYGEN_FOUND)
559 message (FATAL_ERROR "Doxygen is needed to build the documentation. Please install it correctly.")
560 endif(NOT DOXYGEN_FOUND)
561 endif(SOLVERLAB_WITH_DOCUMENTATION)
563 if (SOLVERLAB_WITH_TESTS) #
565 IF ( DEFINED CPPUNIT_ROOT_DIR OR DEFINED ENV{CPPUNIT_ROOT_DIR})
566 IF ( DEFINED CPPUNIT_ROOT_DIR )
567 set(CPPUNIT_ROOT_USER ${CPPUNIT_ROOT_DIR} )
568 ELSE ( DEFINED CPPUNIT_ROOT_DIR )
569 set(CPPUNIT_ROOT_USER $ENV{CPPUNIT_ROOT_DIR} )
570 ENDIF( DEFINED CPPUNIT_ROOT_DIR)
571 ENDIF( DEFINED CPPUNIT_ROOT_DIR OR DEFINED ENV{CPPUNIT_ROOT_DIR})
572 find_package (CPPUNIT REQUIRED)
573 endif(SOLVERLAB_WITH_TESTS)
575 # Enter subdirectories
576 add_subdirectory (CDMATH)
577 if(SOLVERLAB_WITH_COREFLOWS)
578 add_subdirectory (CoreFlows)
579 endif(SOLVERLAB_WITH_COREFLOWS)
583 ${PROJECT_SOURCE_DIR}/env_SOLVERLAB.sh
584 ${CMAKE_INSTALL_PREFIX}/env_SOLVERLAB.sh