1 cmake_minimum_required (VERSION 3.1)
2 set(CMAKE_CXX_STANDARD 11)
3 set(CMAKE_CXX_STANDARD_REQUIRED ON)
6 project (CoreFlows C CXX)
7 set (COREFLOWS_VERSION_MAJOR 0)
8 set (COREFLOWS_VERSION_MINOR 1)
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)
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" )
21 # Debug mode activates testing and profiling --------------------------------------------------------------#
22 if (CMAKE_BUILD_TYPE STREQUAL Debug) #
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") #
30 #----------------------------------------------------------------------------------------------------------#
32 list (APPEND CMAKE_MODULE_PATH "${CoreFlows_SOURCE_DIR}/cmake_files") #
34 # CDMATH ---------------------------------------------------------------------------------------------------#
35 find_package (CDMATH REQUIRED) #
36 #-----------------------------------------------------------------------------------------------------------#
39 # PETSC ----------------------------------------------------------------------------------------------------#
40 message ( STATUS "Checking variable PETSC_DIR : " $ENV{PETSC_DIR} )
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" )
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.
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/" )
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" )
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/)
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.
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/)
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
82 else ( NOT PETSC_DIR AND NOT DEFINED ENV{PETSC_DIR} AND IS_DIRECTORY "/usr/include/petsc/" AND EXISTS "/usr/lib64/libpetsc.so")
84 set(PETSC_DIR $ENV{PETSC_DIR})
87 find_package (PETSc 3.4 REQUIRED)
89 string(REPLACE ";" ":" PETSC_INCLUDES_PATH "${PETSC_INCLUDES}")# use colon instead of semicolon in environment file env_CoreFlows.sh
91 #Define and search slepc variables
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} )
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}" )
106 message( FATAL_ERROR "SLEPc not found at ${SLEPC_DIR}" )
109 endif( NOT PETSC_DIR AND NOT DEFINED ENV{PETSC_DIR} AND IS_DIRECTORY "/usr/include/petsc/" AND EXISTS "/usr/lib64/libpetsc.so")
111 if (${PETSC_VERSION} VERSION_GREATER 3.5)
112 add_definitions(-DPETSC_VERSION_GREATER_3_5)
115 #-----------------------------------------------------------------------------------------------------------#
119 # Swig interface -------------------------------------------------------------------------------------------#
121 if (COREFLOWS_WITH_PYTHON) #
122 find_package (PYTHON REQUIRED) #
123 find_package (SWIG 3.0 REQUIRED)
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) #
132 #-----------------------------------------------------------------------------------------------------------#
135 set (CoreFlows_SRC ${CoreFlows_SOURCE_DIR}/Models )
136 set (CoreFlows_EXAMPLES ${CoreFlows_SOURCE_DIR}/examples)
138 set( CoreFlows_INCLUDES
141 ${MEDCOUPLING_INCLUDES} #
143 ${CoreFlows_SRC}/inc #
146 add_subdirectory (${CoreFlows_SRC})
147 add_subdirectory (${CoreFlows_EXAMPLES})
148 if (COREFLOWS_WITH_PYTHON) #
149 add_subdirectory (${CoreFlows_SWIG_DIR}) #
152 # Documentation --------------------------------------------------------------------------------------------#
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} #
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) #
173 # ------------- --------------------------------------------------------------------------------------------#
175 # Graphic interface-----------------------------------------------------------------------------------------#
177 if (COREFLOWS_WITH_GUI) #
178 set (CoreFlows_GUI_DIR ${CoreFlows_SOURCE_DIR}/gui) #
179 add_subdirectory(${CoreFlows_GUI_DIR})
183 # ------------- --------------------------------------------------------------------------------------------#
185 #--------------------- COMPILATION MAIN --------------------------------------------------------------------#
187 INCLUDE_DIRECTORIES( #
188 ${CoreFlows_INCLUDES} #
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 #
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) #
215 ${PROJECT_SOURCE_DIR}/env_CoreFlows.sh
216 ${CMAKE_INSTALL_PREFIX}/env_CoreFlows.sh
221 # ------------- --------------------------------------------------------------------------------------------#
225 if (COREFLOWS_WITH_PACKAGE)
226 include (CPackLists.txt)