Salome HOME
Corrected detection of MPI_ROOT_DIR
[tools/solverlab.git] / CMakeLists.txt
index bc97a93d0123d3c72b35de5c1187c6e5bef8e9e0..eabb926e62a1ee42b19d2c07cce9d18d8f9d76cf 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)
@@ -43,7 +47,7 @@ set (DOWNLOAD_OPENMPI       https://download.open-mpi.org/release/open-mpi/v3.1/
      CACHE STRING           "OPENMPI tarball path/url" )
 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.1.tar.gz
+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")
@@ -53,16 +57,12 @@ include(ExternalProject)#For PETSc, MED and MEDCoupling
 list (APPEND CMAKE_MODULE_PATH "${SOLVERLAB_SOURCE_DIR}/cmake_files")
 
 
-#####################
-# Detection of MPI  #
-#####################
-if   ( DEFINED ENV{MPI_ROOT_DIR} OR DEFINED MPI_ROOT_DIR )
-  if   ( DEFINED  ENV{MPI_ROOT_DIR} )
-    set(MPI_HOME $ENV{MPI_ROOT_DIR})
-  else ( DEFINED  ENV{MPI_ROOT_DIR} )
-    set(MPI_HOME    ${MPI_ROOT_DIR})
-  endif( DEFINED  ENV{MPI_ROOT_DIR} )
-endif( DEFINED ENV{MPI_ROOT_DIR} OR DEFINED MPI_ROOT_DIR )
+#############################
+# Detection of MPI + MPI4PY #
+#############################
+if   ( MPI_ROOT_DIR )
+  set(MPI_HOME    ${MPI_ROOT_DIR})
+endif( MPI_ROOT_DIR )
 
 # Definition of SOLVERLAB_WITH_MPI
 if(    DEFINED ENV{MPI_HOME} OR MPI_HOME )
@@ -72,23 +72,31 @@ if(    DEFINED ENV{MPI_HOME} OR MPI_HOME )
     set ( MPI_LIBRARY ${MPI_HOME}/lib/libmpi.so )
   endif(${MPI_LIBRARY} STREQUAL "MPI_LIBRARY-NOTFOUND")
   message ( STATUS "MPI executable is ${MPIEXEC}" )
+  if   (NOT DEFINED CMAKE_CXX_COMPILER)
+    set(CMAKE_CXX_COMPILER ${MPI_HOME}/bin/mpic++)
+  endif(NOT DEFINED CMAKE_CXX_COMPILER)
+  message ( STATUS "MPI C++ compiler is ${CMAKE_CXX_COMPILER}" )
+  if   (NOT DEFINED CMAKE_C_COMPILER)
+    set(CMAKE_C_COMPILER ${MPI_HOME}/bin/mpicc)
+  endif(NOT DEFINED CMAKE_C_COMPILER)
+  message ( STATUS "MPI C compiler is ${CMAKE_C_COMPILER}" )
 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
+# 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})
+  if(    DEFINED ENV{MPI4PY_ROOT_DIR})
     set(MPI4PY_ROOT_DIR $ENV{MPI4PY_ROOT_DIR})
-  else(  DEFINED $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( 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})
+  SET(CMAKE_SWIG_FLAGS ${CMAKE_SWIG_FLAGS} -DMPI4PY_ROOT_DIR=${MPI4PY_ROOT_DIR})#Necessary for swig generation of mpi structures
 endif( MPI4PY_ROOT_DIR)
 
 ############################
@@ -343,13 +351,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)
-      #set(MPI4PY_ROOT_DIR    ${PETSC_INSTALL}/lib/mpi4py )
-
     endif ( IS_DIRECTORY "/usr/include/petsc/" AND EXISTS "/usr/lib64/libpetsc.so" )
   endif ( DEFINED ENV{PETSC_DIR} OR PETSC_DIR )
 
@@ -357,6 +358,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)
@@ -642,6 +648,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 ${PROJECT_BINARY_DIR}/CoreFlows/gui/doc/html DESTINATION share/doc/solverlab-gui-doc OPTIONAL)                  #
+  endif( SOLVERLAB_WITH_GUI OR COREFLOWS_WITH_GUI )
 endif(SOLVERLAB_WITH_DOCUMENTATION)                    
 
 if (SOLVERLAB_WITH_TESTS)                                                                                  #
@@ -654,6 +670,9 @@ 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