Salome HOME
3da857a1d9669060faab67d4b2eb3139687c6053
[tools/solverlab.git] / CoreFlows / CMakeLists.txt
1 cmake_minimum_required (VERSION 3.1)
2 set(CMAKE_CXX_STANDARD 11)
3 set(CMAKE_CXX_STANDARD_REQUIRED ON)
4
5 # Project name
6 project (CoreFlows C CXX)
7 set (COREFLOWS_VERSION_MAJOR 0)
8 set (COREFLOWS_VERSION_MINOR 1)
9
10 option (CMAKE_BUILD_TYPE "Debug or Release compilation" Release)
11 option (COREFLOWS_WITH_DOCUMENTATION "Generate documentation for CoreFlows use." OFF)
12 option (COREFLOWS_WITH_PYTHON "Compile Python interface for COREFLOWS." OFF)
13 option (COREFLOWS_WITH_GUI "Compile Graphic user Interface for COREFLOWS." OFF)
14 option (COREFLOWS_WITH_PACKAGE "Generate RPM, Debian and tarball packages." OFF)
15
16 #Path to installed libraries
17 set (PETSC_DIR            OFF CACHE STRING "PETSc library path" )
18 set (SLEPC_DIR            OFF CACHE STRING "SLEPc library path" )
19
20 enable_testing()                                                                                           #
21 # Debug mode activates testing and profiling --------------------------------------------------------------#
22 if (CMAKE_BUILD_TYPE STREQUAL Debug)                                                                       #
23                                                                                                            #
24  SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pg --coverage")                                                  #
25  SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pg --coverage")                                    #
26  SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -pg --coverage")                              #
27                                                                                                            #
28 endif ()                                                                                                   #
29                                                                                                            #
30 #----------------------------------------------------------------------------------------------------------#
31
32 list (APPEND CMAKE_MODULE_PATH "${CoreFlows_SOURCE_DIR}/cmake_files")                                       #  
33
34 # CDMATH ---------------------------------------------------------------------------------------------------#
35 find_package (CDMATH REQUIRED)                                                                              #
36 #-----------------------------------------------------------------------------------------------------------#
37
38
39 # PETSC ----------------------------------------------------------------------------------------------------#
40 message ( STATUS "Checking variable PETSC_DIR : " $ENV{PETSC_DIR} )
41
42 if   ( NOT PETSC_DIR AND NOT DEFINED ENV{PETSC_DIR} AND IS_DIRECTORY "/usr/include/petsc/" AND EXISTS "/usr/lib64/libpetsc.so")  #Case fedora/redhat system install
43   message ( STATUS "PETSC includes found in /usr/include/petsc/" )
44   message ( STATUS "PETSC library found in /usr/lib64" )
45   set(PETSC_DIR /usr/)
46   set(PETSC_ARCH lib64)
47   set(PETSC_INCLUDES  /usr/include/petsc /usr/include/petsc/petsc/mpiuni)
48   set(PETSC_INCLUDES_PATH  /usr/include/petsc:/usr/include/petsc/petsc/mpiuni)
49   set(PETSC_LIBRARIES /usr/lib64/libpetsc.so)
50   set(PETSC_VERSION "3.7") #3.7 for fedora 25/26 , 3.9 for fedora 29 , 3.10 for fedora 30, , 3.12 for fedora 32
51   set(CPACK_RPM_PACKAGE_REQUIRES   "${CPACK_RPM_PACKAGE_REQUIRES}, petsc-devel (>= 3.4)") # This is not fully working yet. 
52
53   #Define and search slepc variables
54   if   ( IS_DIRECTORY "/usr/include/slepc/" AND EXISTS "/usr/lib64/libslepc.so" )
55     message( STATUS "SLEPc includes found in /usr/include/slepc/" )
56     message( STATUS "SLEPc library found in /usr/lib64/slepc/" )
57     set(SLEPC_DIR /usr/)
58     set(SLEPC_INCLUDES ${SLEPC_DIR}/include)
59     set(SLEPC_LIBRARIES ${SLEPC_DIR}/lib/libslepc.so)
60     set (CPACK_RPM_PACKAGE_REQUIRES   "${CPACK_RPM_PACKAGE_REQUIRES}, slepc-devel (>= 3.4)") # This is not fully working yet. 
61   else ( IS_DIRECTORY "/usr/include/slepc/" AND EXISTS "/usr/lib64/libslepc.so" )
62     message( FATAL_ERROR "SLEPc not found in the system" )
63   endif( IS_DIRECTORY "/usr/include/slepc/" AND EXISTS "/usr/lib64/libslepc.so" )
64
65 #elseif ( IS_DIRECTORY "/usr/lib/petsc/") #Case ubuntu/debian system install
66 #  message ( STATUS "PETSC found in /usr/lib/petsc/" )
67 #  set(PETSC_DIR /usr/lib/petsc/)
68 #  set(PETSC_ARCH )
69 #  find_package (PETSc 3.4 REQUIRED)
70 #  petsc_get_version ()
71 #  set (CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS}, petsc-dev   (>= 3.4)") # This is not fully working yet. 
72
73 #elseif ( IS_DIRECTORY "/usr/local/lib/python2.7/dist-packages/petsc") #Case ubuntu/debian system pip install
74 #  message ( STATUS "PETSC found in /usr/local/lib/python2.7/dist-packages/petsc" )
75 #  set(PETSC_DIR /usr/local/lib/python2.7/dist-packages/petsc/)
76 #  set(PETSC_ARCH lib)
77 #  set(PETSC_INCLUDES       $PETSC_DIR/include /usr/include/openmpi)
78 #  set(PETSC_INCLUDES_PATH  $PETSC_DIR/include:/usr/include/openmpi)
79 #  set(PETSC_LIBRARIES      $PETSC_DIR/lib/libpetsc.so)
80 #  set(PETSC_VERSION "3.8") #value for Ubuntu 16.04 
81
82 else ( NOT PETSC_DIR AND NOT DEFINED ENV{PETSC_DIR} AND IS_DIRECTORY "/usr/include/petsc/" AND EXISTS "/usr/lib64/libpetsc.so")
83   if(NOT PETSC_DIR)
84     set(PETSC_DIR $ENV{PETSC_DIR})
85   endif(NOT PETSC_DIR)
86
87   find_package (PETSc 3.4 REQUIRED)
88   petsc_get_version ()
89   string(REPLACE ";" ":"  PETSC_INCLUDES_PATH "${PETSC_INCLUDES}")# use colon instead of semicolon in environment file env_CoreFlows.sh
90
91     #Define and search slepc variables
92     if   ( NOT SLEPC_DIR )
93       if   ( DEFINED ENV{SLEPC_DIR} )
94         set(SLEPC_DIR $ENV{SLEPC_DIR})
95       else ( DEFINED ENV{SLEPC_DIR} )
96         set(SLEPC_DIR ${PETSC_DIR}/${PETSC_ARCH})
97       endif( DEFINED ENV{SLEPC_DIR} )
98     endif( NOT SLEPC_DIR)
99
100    message ( STATUS "Checking variable SLEPC_DIR" )
101    if ( IS_DIRECTORY ${SLEPC_DIR}/include AND EXISTS ${SLEPC_DIR}/lib/libslepc.so)
102      set(SLEPC_INCLUDES ${SLEPC_DIR}/include)
103      set(SLEPC_LIBRARIES ${SLEPC_DIR}/lib/libslepc.so)
104      message( STATUS "SLEPc found at ${SLEPC_DIR}" )
105    else()
106      message( FATAL_ERROR "SLEPc not found at ${SLEPC_DIR}" )
107    endif()
108
109 endif( NOT PETSC_DIR AND NOT DEFINED ENV{PETSC_DIR} AND IS_DIRECTORY "/usr/include/petsc/" AND EXISTS "/usr/lib64/libpetsc.so")
110
111 if (${PETSC_VERSION} VERSION_GREATER 3.5)
112   add_definitions(-DPETSC_VERSION_GREATER_3_5)
113 endif ()
114
115 #-----------------------------------------------------------------------------------------------------------#
116
117
118
119 # Swig interface -------------------------------------------------------------------------------------------#
120                                                                                                             #
121 if (COREFLOWS_WITH_PYTHON)                                                                                  #
122    find_package (PYTHON REQUIRED)                                                                           #
123    find_package (SWIG 3.0 REQUIRED)        
124
125    set (PV_LIB_DIR /usr/lib/python2.7/dist-packages/:/usr/lib/python3.7/dist-packages/:/usr/lib64/paraview/)
126    set (PV_PYTHON_DIR /usr/lib/python2.7/dist-packages:/usr/lib64/paraview/site-packages/:/usr/lib64/paraview/site-packages/paraview/:/usr/lib64/paraview/site-packages/vtk/:/usr/lib64/paraview/python2.7/site-packages/:/usr/lib64/paraview/python2.7/site-packages/paraview/:/usr/lib64/paraview/python2.7/site-packages/vtkmodules:/usr/lib64/paraview/python3.7/site-packages/:/usr/lib64/paraview/python3.7/site-packages/paraview/:/usr/lib64/paraview/python3.7/site-packages/vtkmodules)
127    set (CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS}, python-dev, python-numpy, swig")     #
128    set (CPACK_RPM_PACKAGE_REQUIRES "${CPACK_RPM_PACKAGE_REQUIRES}, python-devel, numpy, swig")              #
129    set (CoreFlows_SWIG_DIR ${CoreFlows_SOURCE_DIR}/swig)                                                    #
130 endif ()                                                                                                    #
131                                                                                                             #
132 #-----------------------------------------------------------------------------------------------------------#
133
134 # Base directories
135 set (CoreFlows_SRC ${CoreFlows_SOURCE_DIR}/Models ) 
136 set (CoreFlows_EXAMPLES ${CoreFlows_SOURCE_DIR}/examples)
137
138 set( CoreFlows_INCLUDES 
139   ${CDMATH_INCLUDES}                                                                                        #
140   ${MED_INCLUDES}                                                                                           #
141   ${MEDCOUPLING_INCLUDES}                                                                                   #
142   ${PETSC_INCLUDES}                                                                                         #
143   ${CoreFlows_SRC}/inc                                                                                      #    
144   )                                                                                                         #
145
146 add_subdirectory (${CoreFlows_SRC})
147 add_subdirectory (${CoreFlows_EXAMPLES})
148 if (COREFLOWS_WITH_PYTHON)                                                                                  #
149    add_subdirectory (${CoreFlows_SWIG_DIR})                                                                 #
150 endif ()                                                                                                    #
151
152 # Documentation --------------------------------------------------------------------------------------------#
153                                                                                                             #
154 if (COREFLOWS_WITH_DOCUMENTATION)                                                                           #
155   find_package (Doxygen)                                                                                    #
156   set (CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS}, doxygen, graphviz, mscgen")           #
157   set (CPACK_RPM_PACKAGE_REQUIRES "${CPACK_RPM_PACKAGE_REQUIRES}, doxygen, graphviz, mscgen")               #
158   if (NOT DOXYGEN_FOUND)                                                                                    #
159     message (FATAL_ERROR "Doxygen is needed to build the documentation. Please install it correctly.")      #
160   endif (NOT DOXYGEN_FOUND)                                                                                 #
161   configure_file (Doxyfile.in ${PROJECT_BINARY_DIR}/Doxyfile  @ONLY IMMEDIATE)                              #
162   FILE(GLOB_RECURSE CoreFlows_Documentation ${CoreFlows_SOURCE_DIR}/Documentation *.dox)                    #
163   SET(Documentation_SRC                                                                                     #
164     ${PROJECT_BINARY_DIR}/Doxyfile                                                                          #
165     ${CoreFlows_Documentation}                                                                              #
166       )                                                                                                     #
167   add_custom_target (doc COMMAND ${DOXYGEN_EXECUTABLE}                                                  #
168   SOURCES ${PROJECT_BINARY_DIR}/Doxyfile)                                                                   #
169   install (DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/doc/html DESTINATION share/doc/CoreFlows OPTIONAL)                  #
170   INSTALL(FILES ${CoreFlows_SOURCE_DIR}/Documentation/CoreFlows.pdf DESTINATION share/doc/CoreFlows OPTIONAL)       #
171 endif ()                                                                                                    #
172                                                                                                             #
173 # ------------- --------------------------------------------------------------------------------------------#
174
175 # Graphic interface-----------------------------------------------------------------------------------------#
176                                                                                                             #
177 if (COREFLOWS_WITH_GUI)                                                                                                                                                                                                                                             #
178  set (CoreFlows_GUI_DIR ${CoreFlows_SOURCE_DIR}/gui)                                                        #
179  add_subdirectory(${CoreFlows_GUI_DIR})                 
180
181 endif ()                                                                                                    #
182                                                                                                             #
183 # ------------- --------------------------------------------------------------------------------------------#
184
185 #--------------------- COMPILATION MAIN --------------------------------------------------------------------#
186                                                                                                             #
187 INCLUDE_DIRECTORIES(                                                                                        #
188   ${CoreFlows_INCLUDES}                                                                                     #
189   )                                                                                                         #
190                                                                                                             #
191 SET(CoreFlowsMain_SOURCES                                                                                   #
192     ${CoreFlows_SRC}/src/Fluide.cxx                                                                         #
193     ${CoreFlows_SRC}/src/DiffusionEquation.cxx                                                              #
194     ${CoreFlows_SRC}/src/StationaryDiffusionEquation.cx                                                     #
195     ${CoreFlows_SRC}/src/ProblemFluid.cxx                                                                   #
196     ${CoreFlows_SRC}/src/IsothermalTwoFluid.cxx                                                             #
197     ${CoreFlows_SRC}/src/utilitaire_algebre.cxx                                                             #
198     ${CoreFlows_SRC}/src/DriftModel.cxx                                                                     #
199     ${CoreFlows_SRC}/src/SinglePhase.cxx                                                                    #
200     ${CoreFlows_SRC}/src/ProblemCoreFlows.cxx                                                               #
201     ${CoreFlows_SRC}/src/FiveEqsTwoFluid.cxx                                                                #
202     ${CoreFlows_SRC}/src/TransportEquation.cxx                                                              #
203   )                                                                                                         #
204                                                                                                             #
205 SET(MAIN_SOURCES                                                                                            #
206   main.cxx                                                                                                  #
207   )                                                                                                         #
208 SET(_extra_lib_CoreFlows ${CDMATH_LIBRARIES} ${PETSC_LIBRARIES} )                                           #
209 ADD_EXECUTABLE(CoreFlowsMainExe ${MAIN_SOURCES})                                                            #
210 SET_TARGET_PROPERTIES(CoreFlowsMainExe PROPERTIES COMPILE_FLAGS "")                                         #
211 TARGET_LINK_LIBRARIES(CoreFlowsMainExe CoreFlows  ${_extra_lib_CoreFlows})                                  #
212 INSTALL(TARGETS CoreFlowsMainExe DESTINATION bin/Executable)                                                #
213                                                                                                             #
214 configure_file(
215     ${PROJECT_SOURCE_DIR}/env_CoreFlows.sh
216     ${CMAKE_INSTALL_PREFIX}/env_CoreFlows.sh
217     @ONLY
218 )
219                                                                                                             
220                                                                                                             
221 # ------------- --------------------------------------------------------------------------------------------#
222
223
224 # Packaging
225 if (COREFLOWS_WITH_PACKAGE)
226   include (CPackLists.txt)
227 endif ()