FreeCAD
150 строк · 6.9 Кб
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)
29# Module names changed between 8 and 9, so do a QUIET find for 9 and its module name first, and fall back
30# to v7 minimum with the old component name if it is not found.
31find_package(VTK 9 COMPONENTS CommonCore QUIET NO_MODULE)
32if(NOT VTK_FOUND)
33message(STATUS "Did not find VTK 9, trying for an older version")
34find_package(VTK COMPONENTS vtkCommonCore REQUIRED NO_MODULE)
35endif()
36if(${VTK_MAJOR_VERSION} LESS 9)
37list(APPEND VTK_COMPONENTS vtkIOMPIParallel vtkParallelMPI vtkhdf5 vtkFiltersParallelDIY2 vtkRenderingCore vtkInteractionStyle vtkRenderingFreeType vtkRenderingOpenGL2)
38foreach(_module ${VTK_COMPONENTS})
39list (FIND VTK_MODULES_ENABLED ${_module} _index)
40if(${_index} GREATER -1)
41list(APPEND AVAILABLE_VTK_COMPONENTS ${_module})
42endif()
43endforeach()
44else()
45set(VTK_COMPONENTS "CommonCore;CommonDataModel;FiltersVerdict;IOXML;FiltersCore;FiltersGeneral;IOLegacy;FiltersExtraction;FiltersSources;FiltersGeometry")
46list(APPEND VTK_COMPONENTS "IOMPIParallel;ParallelMPI;hdf5;FiltersParallelDIY2;RenderingCore;InteractionStyle;RenderingFreeType;RenderingOpenGL2")
47foreach(_module ${VTK_COMPONENTS})
48list (FIND VTK_AVAILABLE_COMPONENTS ${_module} _index)
49if(${_index} GREATER -1)
50list(APPEND AVAILABLE_VTK_COMPONENTS ${_module})
51endif()
52endforeach()
53endif()
54endif()
55
56# don't check VERSION 6 as this would exclude VERSION 7
57if(AVAILABLE_VTK_COMPONENTS)
58message(STATUS "VTK components: ${AVAILABLE_VTK_COMPONENTS}")
59find_package(VTK COMPONENTS ${AVAILABLE_VTK_COMPONENTS} REQUIRED NO_MODULE)
60else()
61message(STATUS "VTK components: not found or used")
62find_package(VTK REQUIRED NO_MODULE)
63endif()
64
65set(BUILD_FEM_VTK ON)
66if(${VTK_MAJOR_VERSION} LESS 6)
67message( FATAL_ERROR "Found VTK version is <6, this is not compatible" )
68endif()
69if(${VTK_MAJOR_VERSION} EQUAL 6)
70if(${VTK_MINOR_VERSION} LESS 2)
71set(VTK_OPTIONS -DVTK_NO_QUAD_POLY)
72endif()
73if(${VTK_MINOR_VERSION} EQUAL 0)
74message(WARNING "VTK equal to 6.0 cannot be used with c++11, FEM postprocessing is disabled")
75set(BUILD_FEM_VTK OFF)
76endif()
77endif()
78# on openSUSE 13.1 VTK_LIBRARIES ends with "optimized" keyword
79list(REMOVE_ITEM VTK_LIBRARIES "optimized" "debug")
80
81if(NOT FREECAD_USE_EXTERNAL_SMESH)
82find_package(MEDFile REQUIRED)
83# See https://www.hdfgroup.org/HDF5/release/cmakebuild.html
84if (MSVC)
85find_package(HDF5 COMPONENTS NO_MODULE REQUIRED static)
86else()
87find_package(PkgConfig)
88file(READ ${meddotH} TMPTXT)
89string(FIND "${TMPTXT}" "#define MED_HAVE_MPI" matchres)
90if(${matchres} EQUAL -1)
91message(STATUS "We guess that libmed was built using hdf5-serial version")
92set(HDF5_VARIANT "hdf5-serial")
93else()
94message(STATUS "We guess that libmed was built using hdf5-openmpi version")
95set(HDF5_VARIANT "hdf5-openmpi")
96set(HDF5_PREFER_PARALLEL TRUE) # if pkg-config fails, find_package(HDF5) needs this
97endif()
98pkg_search_module(HDF5 ${HDF5_VARIANT})
99if(NOT HDF5_FOUND)
100find_package(HDF5 REQUIRED)
101else()
102add_compile_options(${HDF5_CFLAGS})
103link_directories(${HDF5_LIBRARY_DIRS})
104link_libraries(${HDF5_LIBRARIES})
105find_file(Hdf5dotH hdf5.h PATHS ${HDF5_INCLUDE_DIRS} NO_DEFAULT_PATH)
106if(NOT Hdf5dotH)
107message( FATAL_ERROR "${HDF5_VARIANT} development header not found.")
108endif()
109endif()
110check_include_file_cxx(hdf5.h HDF5_FOUND)
111if(NOT HDF5_FOUND)
112message( FATAL_ERROR "hdf5.h was not found.")
113endif()
114
115# Med Fichier can require MPI
116pkg_search_module(OPENMPI ompi-cxx)
117add_compile_options(${OPENMPI_CFLAGS})
118link_directories(${OPENMPI_LIBRARY_DIRS})
119link_libraries(${OPENMPI_LIBRARIES})
120if(NOT OPENMPI_FOUND)
121message( WARNING "ompi-cxx was not found. Check for error above.")
122endif()
123endif()
124set(SMESH_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/src/3rdParty/salomesmesh/inc)
125
126else(NOT FREECAD_USE_EXTERNAL_SMESH)
127find_package(SMESH CONFIG)
128# If this definition is not set, linker errors will occur against SMESH on 64 bit machines.
129if(CMAKE_SIZEOF_VOID_P EQUAL 8)
130add_definitions(-DSALOME_USE_64BIT_IDS)
131endif(CMAKE_SIZEOF_VOID_P EQUAL 8)
132if(NOT SMESH_FOUND)
133find_package(SMESH REQUIRED)
134if(NOT SMESH_FOUND)
135message(ERROR "================\n"
136"SMESH not found.\n"
137"================\n")
138endif()
139endif()
140set (SMESH_INCLUDE_DIR ${SMESH_INCLUDE_PATH})
141set(EXTERNAL_SMESH_LIBS ${SMESH_LIBRARIES})
142
143include_directories(${SMESH_INCLUDE_DIR})
144endif()
145
146set(SMESH_FOUND TRUE)
147configure_file(${CMAKE_SOURCE_DIR}/src/SMESH_Version.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/SMESH_Version.h)
148endif(BUILD_SMESH)
149
150endmacro(SetupSalomeSMESH)
151