FreeCAD
144 строки · 6.5 Кб
1macro(SetupSalomeSMESH)
2# -------------------------------- Salome SMESH --------------------------
3
4# Salome SMESH sources are under src/3rdParty now
5if(BUILD_SMESH)
6# set the internal smesh version:
7# see src/3rdParty/salomonemesh/CMakeLists.txt and commit https://github.com/FreeCAD/FreeCAD/commit/666a3e5 and https://forum.freecad.org/viewtopic.php?f=10&t=30838
8set(SMESH_VERSION_MAJOR 7)
9set(SMESH_VERSION_MINOR 7)
10set(SMESH_VERSION_PATCH 1)
11set(SMESH_VERSION_TWEAK 0)
12
13#if we use smesh we definitely also need vtk, no matter of external or internal smesh
14set (VTK_COMPONENTS
15vtkCommonCore
16vtkCommonDataModel
17vtkFiltersVerdict
18vtkIOXML
19vtkFiltersCore
20vtkFiltersGeneral
21vtkIOLegacy
22vtkFiltersExtraction
23vtkFiltersSources
24vtkFiltersGeometry
25)
26
27# check which modules are available
28if(UNIX OR WIN32)
29find_package(VTK COMPONENTS vtkCommonCore REQUIRED NO_MODULE)
30if(${VTK_MAJOR_VERSION} LESS 9)
31list(APPEND VTK_COMPONENTS vtkIOMPIParallel vtkParallelMPI vtkhdf5 vtkFiltersParallelDIY2 vtkRenderingCore vtkInteractionStyle vtkRenderingFreeType vtkRenderingOpenGL2)
32foreach(_module ${VTK_COMPONENTS})
33list (FIND VTK_MODULES_ENABLED ${_module} _index)
34if(${_index} GREATER -1)
35list(APPEND AVAILABLE_VTK_COMPONENTS ${_module})
36endif()
37endforeach()
38else()
39set(VTK_COMPONENTS "CommonCore;CommonDataModel;FiltersVerdict;IOXML;FiltersCore;FiltersGeneral;IOLegacy;FiltersExtraction;FiltersSources;FiltersGeometry")
40list(APPEND VTK_COMPONENTS "IOMPIParallel;ParallelMPI;hdf5;FiltersParallelDIY2;RenderingCore;InteractionStyle;RenderingFreeType;RenderingOpenGL2")
41foreach(_module ${VTK_COMPONENTS})
42list (FIND VTK_AVAILABLE_COMPONENTS ${_module} _index)
43if(${_index} GREATER -1)
44list(APPEND AVAILABLE_VTK_COMPONENTS ${_module})
45endif()
46endforeach()
47endif()
48endif()
49
50# don't check VERSION 6 as this would exclude VERSION 7
51if(AVAILABLE_VTK_COMPONENTS)
52message(STATUS "VTK components: ${AVAILABLE_VTK_COMPONENTS}")
53find_package(VTK COMPONENTS ${AVAILABLE_VTK_COMPONENTS} REQUIRED NO_MODULE)
54else()
55message(STATUS "VTK components: not found or used")
56find_package(VTK REQUIRED NO_MODULE)
57endif()
58
59set(BUILD_FEM_VTK ON)
60if(${VTK_MAJOR_VERSION} LESS 6)
61message( FATAL_ERROR "Found VTK version is <6, this is not compatible" )
62endif()
63if(${VTK_MAJOR_VERSION} EQUAL 6)
64if(${VTK_MINOR_VERSION} LESS 2)
65set(VTK_OPTIONS -DVTK_NO_QUAD_POLY)
66endif()
67if(${VTK_MINOR_VERSION} EQUAL 0)
68message(WARNING "VTK equal to 6.0 cannot be used with c++11, FEM postprocessing is disabled")
69set(BUILD_FEM_VTK OFF)
70endif()
71endif()
72# on openSUSE 13.1 VTK_LIBRARIES ends with "optimized" keyword
73list(REMOVE_ITEM VTK_LIBRARIES "optimized" "debug")
74
75if(NOT FREECAD_USE_EXTERNAL_SMESH)
76find_package(MEDFile REQUIRED)
77# See https://www.hdfgroup.org/HDF5/release/cmakebuild.html
78if (MSVC)
79find_package(HDF5 COMPONENTS NO_MODULE REQUIRED static)
80else()
81find_package(PkgConfig)
82file(READ ${meddotH} TMPTXT)
83string(FIND "${TMPTXT}" "#define MED_HAVE_MPI" matchres)
84if(${matchres} EQUAL -1)
85message(STATUS "We guess that libmed was built using hdf5-serial version")
86set(HDF5_VARIANT "hdf5-serial")
87else()
88message(STATUS "We guess that libmed was built using hdf5-openmpi version")
89set(HDF5_VARIANT "hdf5-openmpi")
90set(HDF5_PREFER_PARALLEL TRUE) # if pkg-config fails, find_package(HDF5) needs this
91endif()
92pkg_search_module(HDF5 ${HDF5_VARIANT})
93if(NOT HDF5_FOUND)
94find_package(HDF5 REQUIRED)
95else()
96add_compile_options(${HDF5_CFLAGS})
97link_directories(${HDF5_LIBRARY_DIRS})
98link_libraries(${HDF5_LIBRARIES})
99find_file(Hdf5dotH hdf5.h PATHS ${HDF5_INCLUDE_DIRS} NO_DEFAULT_PATH)
100if(NOT Hdf5dotH)
101message( FATAL_ERROR "${HDF5_VARIANT} development header not found.")
102endif()
103endif()
104check_include_file_cxx(hdf5.h HDF5_FOUND)
105if(NOT HDF5_FOUND)
106message( FATAL_ERROR "hdf5.h was not found.")
107endif()
108
109# Med Fichier can require MPI
110pkg_search_module(OPENMPI ompi-cxx)
111add_compile_options(${OPENMPI_CFLAGS})
112link_directories(${OPENMPI_LIBRARY_DIRS})
113link_libraries(${OPENMPI_LIBRARIES})
114if(NOT OPENMPI_FOUND)
115message( WARNING "ompi-cxx was not found. Check for error above.")
116endif()
117endif()
118set(SMESH_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/src/3rdParty/salomesmesh/inc)
119
120else(NOT FREECAD_USE_EXTERNAL_SMESH)
121find_package(SMESH CONFIG)
122# If this definition is not set, linker errors will occur against SMESH on 64 bit machines.
123if(CMAKE_SIZEOF_VOID_P EQUAL 8)
124add_definitions(-DSALOME_USE_64BIT_IDS)
125endif(CMAKE_SIZEOF_VOID_P EQUAL 8)
126if(NOT SMESH_FOUND)
127find_package(SMESH REQUIRED)
128if(NOT SMESH_FOUND)
129message(ERROR "================\n"
130"SMESH not found.\n"
131"================\n")
132endif()
133endif()
134set (SMESH_INCLUDE_DIR ${SMESH_INCLUDE_PATH})
135set(EXTERNAL_SMESH_LIBS ${SMESH_LIBRARIES})
136
137include_directories(${SMESH_INCLUDE_DIR})
138endif()
139
140set(SMESH_FOUND TRUE)
141configure_file(${CMAKE_SOURCE_DIR}/src/SMESH_Version.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/SMESH_Version.h)
142endif(BUILD_SMESH)
143
144endmacro(SetupSalomeSMESH)
145