FreeCAD

Форк
0
/
SetupSalomeSMESH.cmake 
150 строк · 6.9 Кб
1
macro(SetupSalomeSMESH)
2
# -------------------------------- Salome SMESH --------------------------
3

4
    # Salome SMESH sources are under src/3rdParty now
5
    if(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
8
        set(SMESH_VERSION_MAJOR 7)
9
        set(SMESH_VERSION_MINOR 7)
10
        set(SMESH_VERSION_PATCH 1)
11
        set(SMESH_VERSION_TWEAK 0)
12

13
        #if we use smesh we definitely also need vtk, no matter of external or internal smesh
14
        set (VTK_COMPONENTS
15
            vtkCommonCore
16
            vtkCommonDataModel
17
            vtkFiltersVerdict
18
            vtkIOXML
19
            vtkFiltersCore
20
            vtkFiltersGeneral
21
            vtkIOLegacy
22
            vtkFiltersExtraction
23
            vtkFiltersSources
24
            vtkFiltersGeometry
25
        )
26

27
        # check which modules are available
28
        if(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.
31
            find_package(VTK 9 COMPONENTS CommonCore QUIET NO_MODULE)
32
            if(NOT VTK_FOUND)
33
                message(STATUS "Did not find VTK 9, trying for an older version")
34
                find_package(VTK COMPONENTS vtkCommonCore REQUIRED NO_MODULE)
35
            endif()
36
            if(${VTK_MAJOR_VERSION} LESS 9)
37
                list(APPEND VTK_COMPONENTS vtkIOMPIParallel vtkParallelMPI vtkhdf5 vtkFiltersParallelDIY2 vtkRenderingCore vtkInteractionStyle vtkRenderingFreeType vtkRenderingOpenGL2)
38
                foreach(_module ${VTK_COMPONENTS})
39
                    list (FIND VTK_MODULES_ENABLED ${_module} _index)
40
                    if(${_index} GREATER -1)
41
                        list(APPEND AVAILABLE_VTK_COMPONENTS ${_module})
42
                    endif()
43
                endforeach()
44
            else()
45
                set(VTK_COMPONENTS "CommonCore;CommonDataModel;FiltersVerdict;IOXML;FiltersCore;FiltersGeneral;IOLegacy;FiltersExtraction;FiltersSources;FiltersGeometry")
46
                list(APPEND VTK_COMPONENTS "IOMPIParallel;ParallelMPI;hdf5;FiltersParallelDIY2;RenderingCore;InteractionStyle;RenderingFreeType;RenderingOpenGL2")
47
                foreach(_module ${VTK_COMPONENTS})
48
                    list (FIND VTK_AVAILABLE_COMPONENTS ${_module} _index)
49
                    if(${_index} GREATER -1)
50
                        list(APPEND AVAILABLE_VTK_COMPONENTS ${_module})
51
                    endif()
52
                endforeach()
53
            endif()
54
        endif()
55

56
        # don't check VERSION 6 as this would exclude VERSION 7
57
        if(AVAILABLE_VTK_COMPONENTS)
58
            message(STATUS "VTK components: ${AVAILABLE_VTK_COMPONENTS}")
59
            find_package(VTK COMPONENTS ${AVAILABLE_VTK_COMPONENTS} REQUIRED NO_MODULE)
60
        else()
61
            message(STATUS "VTK components: not found or used")
62
            find_package(VTK REQUIRED NO_MODULE)
63
        endif()
64

65
        set(BUILD_FEM_VTK ON)
66
        if(${VTK_MAJOR_VERSION} LESS 6)
67
            message( FATAL_ERROR "Found VTK version is <6, this is not compatible" )
68
        endif()
69
        if(${VTK_MAJOR_VERSION} EQUAL 6)
70
            if(${VTK_MINOR_VERSION} LESS 2)
71
                set(VTK_OPTIONS -DVTK_NO_QUAD_POLY)
72
            endif()
73
            if(${VTK_MINOR_VERSION} EQUAL 0)
74
                message(WARNING "VTK equal to 6.0 cannot be used with c++11, FEM postprocessing is disabled")
75
                set(BUILD_FEM_VTK OFF)
76
            endif()
77
        endif()
78
        # on openSUSE 13.1 VTK_LIBRARIES ends with "optimized" keyword
79
        list(REMOVE_ITEM VTK_LIBRARIES "optimized" "debug")
80

81
        if(NOT FREECAD_USE_EXTERNAL_SMESH)
82
            find_package(MEDFile REQUIRED)
83
            # See https://www.hdfgroup.org/HDF5/release/cmakebuild.html
84
            if (MSVC)
85
                find_package(HDF5 COMPONENTS NO_MODULE REQUIRED static)
86
            else()
87
                find_package(PkgConfig)
88
                file(READ ${meddotH} TMPTXT)
89
                string(FIND "${TMPTXT}" "#define MED_HAVE_MPI" matchres)
90
                if(${matchres} EQUAL -1)
91
                    message(STATUS "We guess that libmed was built using hdf5-serial version")
92
                    set(HDF5_VARIANT "hdf5-serial")
93
                else()
94
                    message(STATUS "We guess that libmed was built using hdf5-openmpi version")
95
                    set(HDF5_VARIANT "hdf5-openmpi")
96
                    set(HDF5_PREFER_PARALLEL TRUE) # if pkg-config fails, find_package(HDF5) needs this
97
                endif()
98
                pkg_search_module(HDF5 ${HDF5_VARIANT})
99
                if(NOT HDF5_FOUND)
100
                    find_package(HDF5 REQUIRED)
101
                else()
102
                    add_compile_options(${HDF5_CFLAGS})
103
                    link_directories(${HDF5_LIBRARY_DIRS})
104
                    link_libraries(${HDF5_LIBRARIES})
105
                    find_file(Hdf5dotH hdf5.h PATHS ${HDF5_INCLUDE_DIRS} NO_DEFAULT_PATH)
106
                    if(NOT Hdf5dotH)
107
                        message( FATAL_ERROR "${HDF5_VARIANT} development header not found.")
108
                    endif()
109
                endif()
110
                check_include_file_cxx(hdf5.h HDF5_FOUND)
111
                if(NOT HDF5_FOUND)
112
                    message( FATAL_ERROR "hdf5.h was not found.")
113
                endif()
114

115
                # Med Fichier can require MPI
116
                pkg_search_module(OPENMPI ompi-cxx)
117
                add_compile_options(${OPENMPI_CFLAGS})
118
                link_directories(${OPENMPI_LIBRARY_DIRS})
119
                link_libraries(${OPENMPI_LIBRARIES})
120
                if(NOT OPENMPI_FOUND)
121
                    message( WARNING "ompi-cxx was not found. Check for error above.")
122
                endif()
123
            endif()
124
            set(SMESH_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/src/3rdParty/salomesmesh/inc)
125

126
        else(NOT FREECAD_USE_EXTERNAL_SMESH)
127
            find_package(SMESH CONFIG)
128
            # If this definition is not set, linker errors will occur against SMESH on 64 bit machines.
129
            if(CMAKE_SIZEOF_VOID_P EQUAL 8)
130
                add_definitions(-DSALOME_USE_64BIT_IDS)
131
            endif(CMAKE_SIZEOF_VOID_P EQUAL 8)
132
            if(NOT SMESH_FOUND)
133
                find_package(SMESH REQUIRED)
134
                if(NOT SMESH_FOUND)
135
                    message(ERROR "================\n"
136
                                "SMESH not found.\n"
137
                                "================\n")
138
                endif()
139
            endif()
140
            set (SMESH_INCLUDE_DIR ${SMESH_INCLUDE_PATH})
141
            set(EXTERNAL_SMESH_LIBS ${SMESH_LIBRARIES})
142

143
            include_directories(${SMESH_INCLUDE_DIR})
144
        endif()
145

146
        set(SMESH_FOUND TRUE)
147
        configure_file(${CMAKE_SOURCE_DIR}/src/SMESH_Version.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/SMESH_Version.h)
148
    endif(BUILD_SMESH)
149

150
endmacro(SetupSalomeSMESH)
151

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.