]> SALOME platform Git repositories - tools/solverlab.git/blobdiff - CMakeLists.txt
Salome HOME
Corrected MPI detection
[tools/solverlab.git] / CMakeLists.txt
index 95f65b5a7e297e2c9fc18ea2c8d10ce8d1d75b56..237fb4765d731bf93aaca00fcbd76de72dccb559 100644 (file)
@@ -2,11 +2,15 @@ cmake_minimum_required (VERSION 3.1)
 set(CMAKE_CXX_STANDARD 11)
 set(CMAKE_CXX_STANDARD_REQUIRED ON)
 
+IF(CMAKE_VERSION VERSION_GREATER_EQUAL 3.18)
+  CMAKE_POLICY(SET CMP0057 NEW)
+ENDIF()
+
 # Project name
 project (SOLVERLAB C CXX)
 set (SOLVERLAB_VERSION_MAJOR 9)
-set (SOLVERLAB_VERSION_MINOR 7)
-set (SOLVERLAB_VERSION_SUBMINOR alpha)
+set (SOLVERLAB_VERSION_MINOR 8)
+set (SOLVERLAB_VERSION_SUBMINOR 0)
 
 option (SOLVERLAB_WITH_DOCUMENTATION "Generate SOLVERLAB documentation" ON)
 option (SOLVERLAB_WITH_PYTHON        "Generate Python interface of SOLVERLAB using SWIG" ON)
@@ -14,6 +18,7 @@ option (SOLVERLAB_WITH_GUI           "Compile a Graphic user Interface for SOLVE
 option (SOLVERLAB_WITH_PACKAGE       "Generate RPM, Debian and tarball packages" OFF)
 option (SOLVERLAB_WITH_COREFLOWS     "Generate COREFLOWS module" ON)
 option (SOLVERLAB_WITH_TESTS         "Generate SOLVERLAB example tests" ON)
+option (SOLVERLAB_WITH_MPI         "Generate a parallel version of SOLVERLAB" OFF)
 
 #Path to installed libraries
 set (PETSC_DIR            OFF CACHE STRING "PETSc library path" )
@@ -23,6 +28,7 @@ set (MEDFILE_ROOT_DIR     OFF CACHE STRING "MED library path" )
 set (MEDCOUPLING_ROOT_DIR OFF CACHE STRING "MEDCoupling library path" )
 set (PYTHON_ROOT_DIR      OFF CACHE STRING "Python library path" )
 set (PARAVIEW_ROOT_DIR    OFF CACHE STRING "PARAVIEW library path" )
+set (MPI4PY_ROOT_DIR      OFF CACHE STRING "MPI4PY library path" )
 
 #url of tarball librairies
 set (DOWNLOAD_PETSC         http://ftp.mcs.anl.gov/pub/petsc/release-snapshots/petsc-3.16.0.tar.gz 
@@ -39,8 +45,10 @@ set (DOWNLOAD_MEDCOUPLING   http://files.salome-platform.org/Salome/other/medCou
      CACHE STRING           "MEDCoupling tarball path/url" )
 set (DOWNLOAD_OPENMPI       https://download.open-mpi.org/release/open-mpi/v3.1/openmpi-3.1.6.tar.gz
      CACHE STRING           "OPENMPI tarball path/url" )
-set (DOWNLOAD_HYPRE         https://github.com/hypre-space/hypre/archive/v2.20.0.zip
+set (DOWNLOAD_HYPRE         https://github.com/hypre-space/hypre/archive/v2.23.0.zip
      CACHE STRING           "HYPRE tarball path/url" )
+set (DOWNLOAD_MPI4PY         https://bitbucket.org/mpi4py/mpi4py/downloads/mpi4py-3.1.2.tar.gz
+     CACHE STRING           "MPY4PY tarball path/url" )
 
 set (CMAKE_BUILD_TYPE Release CACHE STRING "Installation mode")
 
@@ -49,9 +57,9 @@ include(ExternalProject)#For PETSc, MED and MEDCoupling
 list (APPEND CMAKE_MODULE_PATH "${SOLVERLAB_SOURCE_DIR}/cmake_files")
 
 
-#####################
-# Detection of MPI  #
-#####################
+#############################
+# Detection of MPI + MPI4PY #
+#############################
 if   ( DEFINED ENV{MPI_ROOT_DIR} OR DEFINED MPI_ROOT_DIR )
   if   ( DEFINED  ENV{MPI_ROOT_DIR} )
     set(MPI_HOME $ENV{MPI_ROOT_DIR})
@@ -60,6 +68,7 @@ if   ( DEFINED ENV{MPI_ROOT_DIR} OR DEFINED MPI_ROOT_DIR )
   endif( DEFINED  ENV{MPI_ROOT_DIR} )
 endif( DEFINED ENV{MPI_ROOT_DIR} OR DEFINED MPI_ROOT_DIR )
 
+# Definition of SOLVERLAB_WITH_MPI
 if(    DEFINED ENV{MPI_HOME} OR MPI_HOME )
   set(SOLVERLAB_WITH_MPI ON)
   find_package(MPI)
@@ -71,8 +80,23 @@ else(  DEFINED ENV{MPI_HOME} OR MPI_HOME )
   set(SOLVERLAB_WITH_MPI OFF)
 endif( DEFINED ENV{MPI_HOME} OR MPI_HOME )
 
+# Definition of MPI4PY_ROOT_DIR from either the environment or petsc
+if(   ${SOLVERLAB_WITH_PYTHON} AND ${SOLVERLAB_WITH_MPI} AND NOT ${MPI4PY_ROOT_DIR})
+  message(STATUS "Defining MPI4PY directory" )
+  if(    DEFINED ENV{MPI4PY_ROOT_DIR})
+    set(MPI4PY_ROOT_DIR $ENV{MPI4PY_ROOT_DIR})
+  else(  DEFINED ENV{MPI4PY_ROOT_DIR})
+    set(MPI4PY_ROOT_DIR ${PETSC_DIR}/${PETSC_ARCH}/lib/mpi4py)
+  endif( DEFINED ENV{MPI4PY_ROOT_DIR})
+endif(${SOLVERLAB_WITH_PYTHON} AND ${SOLVERLAB_WITH_MPI} AND NOT ${MPI4PY_ROOT_DIR})
+
+if(    MPI4PY_ROOT_DIR)
+  message(STATUS "MPI4PY directory is ${MPI4PY_ROOT_DIR}" )
+  SET(CMAKE_SWIG_FLAGS ${CMAKE_SWIG_FLAGS} -DMPI4PY_ROOT_DIR=${MPI4PY_ROOT_DIR})#Necessary for swig generation of mpi structures
+endif( MPI4PY_ROOT_DIR)
+
 ############################
-# Definition of HDF5_HOME  #
+# Definition of HDF5_ROOT  #
 ############################
 if   ( DEFINED ENV{HDF5_ROOT_DIR} OR DEFINED HDF5_ROOT_DIR )
   if   ( DEFINED  ENV{HDF5_ROOT_DIR} )
@@ -267,7 +291,7 @@ endif( DEFINED ENV{HDF5_ROOT_DIR} OR DEFINED HDF5_ROOT_DIR )
       URL               ${DOWNLOAD_PETSC}   
       SOURCE_DIR        ${PETSC_DIR}
       BUILD_IN_SOURCE   TRUE
-      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}
+      CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix=${PETSC_INSTALL} --with-debugging=0 --download-f2cblaslapack=${DOWNLOAD_F2CBLASLAPACK} --with-mpi=0 --with-fc=0 --download-slepc=${DOWNLOAD_SLEPC} --download-hdf5=${DOWNLOAD_HDF5}   --with-petsc4py=yes --download-slepc-configure-arguments="--with-slepc4py=yes" # --download-openmpi=${DOWNLOAD_OPENMPI} --download-hypre=${DOWNLOAD_HYPRE} --download-mpi4py=${DOWNLOAD_MPI4PY}
       BUILD_COMMAND     make all
       TEST_COMMAND      make check
       INSTALL_COMMAND   make install
@@ -323,12 +347,6 @@ endif( DEFINED ENV{HDF5_ROOT_DIR} OR DEFINED HDF5_ROOT_DIR )
       set(HDF5_LIBRARY_DIR ${HDF5_ROOT}/lib)
       set(HDF5_INCLUDE_DIRS ${HDF5_ROOT}/include)
 
-      #define MPI variables
-      #set(SOLVERLAB_WITH_MPI ON)
-      #set(MPI_HOME    ${PETSC_INSTALL} )
-      #set(MPI_LIBRARY ${PETSC_INSTALL}/lib/libmpi.so)
-      #set(MPIEXEC     ${PETSC_INSTALL}/bin/mpiexec)
-
     endif ( IS_DIRECTORY "/usr/include/petsc/" AND EXISTS "/usr/lib64/libpetsc.so" )
   endif ( DEFINED ENV{PETSC_DIR} OR PETSC_DIR )
 
@@ -336,6 +354,11 @@ if   ( ${PETSC_VERSION} VERSION_GREATER 3.5 )
   add_definitions(-DPETSC_VERSION_GREATER_3_5)
 endif( ${PETSC_VERSION} VERSION_GREATER 3.5 )
 
+if   ( ${SOLVERLAB_WITH_PYTHON} )
+  set(SLEPC4PY_ROOT_DIR ${PETSC_DIR}/${PETSC_ARCH}/lib/slepc4py)# or use FindSLEPC4PY
+  set(PETSC4PY_ROOT_DIR ${PETSC_DIR}/${PETSC_ARCH}/lib/petsc4py)# or use FindPETSC4PY
+endif( ${SOLVERLAB_WITH_PYTHON} )
+
 string(REPLACE ";" ":"  PETSC_INCLUDES_INSTALL "${PETSC_INCLUDES}")# use colon instead of semicolon in environment file env_SOLVERLAB.sh
 
 add_library(petsc   SHARED IMPORTED)
@@ -413,7 +436,7 @@ if( MEDCOUPLING_ROOT_DIR OR DEFINED ENV{MEDCOUPLING_ROOT_DIR})
   find_package(MEDCoupling CONFIG REQUIRED)   # CONFIG is important !
   message( STATUS "MEDCoupling found. Version is ${MEDCoupling_VERSION}")
 
-else( DEFINED MEDCOUPLING_ROOT_DIR OR DEFINED ENV{MEDCOUPLING_ROOT_DIR})
+else( MEDCOUPLING_ROOT_DIR OR DEFINED ENV{MEDCOUPLING_ROOT_DIR})
   message(STATUS "MEDCoupling will be downloaded and installed from ${DOWNLOAD_MEDCOUPLING}")
   set(MEDCOUPLING_ROOT_DIR ${CMAKE_INSTALL_PREFIX}/lib/medcoupling) # Location of the final install
   SET(ENV{HDF5_ROOT} ${HDF5_ROOT})#MEDCoupling install process seems to require an environment variable
@@ -560,6 +583,16 @@ ENDIF(${CMAKE_VERSION} VERSION_GREATER "3.12.0")
 
 message(STATUS "Python version found is ${Python_VERSION}")
 
+#Matplotlib root dir
+IF   ( NOT DEFINED MATPLOTLIB_ROOT_DIR )
+    set(MATPLOTLIB_ROOT_DIR $ENV{MATPLOTLIB_ROOT_DIR} )
+ENDIF( NOT DEFINED MATPLOTLIB_ROOT_DIR )
+
+#PyQt5 root dir
+IF   ( NOT DEFINED PYQT5_ROOT_DIR )
+    set(PYQT5_ROOT_DIR $ENV{PYQT5_ROOT_DIR} )
+ENDIF( NOT DEFINED PYQT5_ROOT_DIR )
+
 #Paraview library paths
 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})
 set (PV_PYTHON_DIR /usr/lib/python${Python_VERSION_MAJOR}/dist-packages/:/usr/lib/python${Python_VERSION_MAJOR}/dist-packages/paraview/:/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)
@@ -586,25 +619,6 @@ else( ${python-paraview} STREQUAL "python-paraview-NOTFOUND" )
   endif( ${python-paraview} STREQUAL "/usr/lib/python3/dist-packages/paraview/simple.py" )
 endif( ${python-paraview} STREQUAL "python-paraview-NOTFOUND" )
 
-#PyQt5 root dir
-IF   ( NOT DEFINED PYQT5_ROOT_DIR )
-    set(PYQT5_ROOT_DIR $ENV{PYQT5_ROOT_DIR} )
-ENDIF( NOT DEFINED PYQT5_ROOT_DIR )
-
-#Matplotlib root dir
-IF   ( NOT DEFINED MATPLOTLIB_ROOT_DIR )
-    set(MATPLOTLIB_ROOT_DIR $ENV{MATPLOTLIB_ROOT_DIR} )
-ENDIF( NOT DEFINED MATPLOTLIB_ROOT_DIR )
-
-#define HDF5_ROOT_DIR
-IF   ( NOT HDF5_ROOT_DIR )
-  IF  ( ENV{HDF5_ROOT_DIR} )
-    set(HDF5_ROOT_DIR $ENV{HDF5_ROOT_DIR} )
-  ELSE( ENV{HDF5_ROOT_DIR} )
-    set(HDF5_ROOT_DIR ${HDF5_ROOT} )
-  ENDIF( ENV{HDF5_ROOT_DIR} )
-ENDIF( NOT HDF5_ROOT_DIR )
-
 # Find SWIG
 IF   ( DEFINED SWIG_ROOT_DIR OR DEFINED ENV{SWIG_ROOT_DIR})
   IF   ( DEFINED SWIG_ROOT_DIR )
@@ -630,6 +644,16 @@ if (SOLVERLAB_WITH_DOCUMENTATION)
   if   (NOT DOXYGEN_FOUND)
     message (FATAL_ERROR "Doxygen is needed to build the documentation. Please install it correctly.")
   endif(NOT DOXYGEN_FOUND)
+  
+  configure_file (Doxyfile.in ${PROJECT_BINARY_DIR}/Doxyfile  @ONLY IMMEDIATE)
+  add_custom_target (doc COMMAND ${DOXYGEN_EXECUTABLE} ${PROJECT_BINARY_DIR}/Doxyfile  SOURCES ${PROJECT_BINARY_DIR}/Doxyfile)                                                             #
+  install (DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/doc/html DESTINATION share/doc/solverlab-dev-doc OPTIONAL)                  #
+  
+  if   ( SOLVERLAB_WITH_GUI OR COREFLOWS_WITH_GUI )
+    find_package(Sphinx)
+    add_custom_target (docGUI COMMAND ${SPHINX_EXECUTABLE} -M html "${PROJECT_SOURCE_DIR}/CoreFlows/gui/doc"  "${PROJECT_BINARY_DIR}/CoreFlows/gui/doc" SOURCES ${PROJECT_SOURCE_DIR}/CoreFlows/gui/doc)                                            #
+    install (DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/Utilities/html DESTINATION share/doc/solverlab-gui-doc OPTIONAL)                  #
+  endif( SOLVERLAB_WITH_GUI OR COREFLOWS_WITH_GUI )
 endif(SOLVERLAB_WITH_DOCUMENTATION)                    
 
 if (SOLVERLAB_WITH_TESTS)                                                                                  #
@@ -642,9 +666,18 @@ if (SOLVERLAB_WITH_TESTS)
    ENDIF( DEFINED CPPUNIT_ROOT_DIR)
  ENDIF( DEFINED CPPUNIT_ROOT_DIR OR DEFINED ENV{CPPUNIT_ROOT_DIR})
   find_package (CPPUNIT REQUIRED)
+  
+  add_custom_target (cpp COMMAND ctest -R .exe)# may be replace ctest -R with ctest -L
+  add_custom_target (mpi COMMAND ctest -R Proc)# may be replace ctest -R with ctest -L
 endif(SOLVERLAB_WITH_TESTS)                    
                                    
 # Enter subdirectories
+set(CDMATH_WITH_POSTPRO ${SOLVERLAB_WITH_POSTPRO} )
+set(CDMATH_WITH_PETSC ${SOLVERLAB_WITH_PETSC} )
+set(CDMATH_WITH_DOCUMENTATION ${SOLVERLAB_WITH_DOCUMENTATION} )
+set(CDMATH_WITH_PYTHON ${SOLVERLAB_WITH_PYTHON} )
+set(CDMATH_WITH_PACKAGE ${SOLVERLAB_WITH_PACKAGE} )
+set(CDMATH_WITH_TESTS ${SOLVERLAB_WITH_TESTS} )
 add_subdirectory (CDMATH)
 if(SOLVERLAB_WITH_COREFLOWS)
   set(COREFLOWS_WITH_DOCUMENTATION ${SOLVERLAB_WITH_DOCUMENTATION} )