FreeCAD

Форк
0
/
SetupSalomeSMESH.cmake 
144 строки · 6.5 Кб
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
            find_package(VTK COMPONENTS vtkCommonCore REQUIRED NO_MODULE)
30
            if(${VTK_MAJOR_VERSION} LESS 9)
31
                list(APPEND VTK_COMPONENTS vtkIOMPIParallel vtkParallelMPI vtkhdf5 vtkFiltersParallelDIY2 vtkRenderingCore vtkInteractionStyle vtkRenderingFreeType vtkRenderingOpenGL2)
32
                foreach(_module ${VTK_COMPONENTS})
33
                    list (FIND VTK_MODULES_ENABLED ${_module} _index)
34
                    if(${_index} GREATER -1)
35
                        list(APPEND AVAILABLE_VTK_COMPONENTS ${_module})
36
                    endif()
37
                endforeach()
38
            else()
39
                set(VTK_COMPONENTS "CommonCore;CommonDataModel;FiltersVerdict;IOXML;FiltersCore;FiltersGeneral;IOLegacy;FiltersExtraction;FiltersSources;FiltersGeometry")
40
                list(APPEND VTK_COMPONENTS "IOMPIParallel;ParallelMPI;hdf5;FiltersParallelDIY2;RenderingCore;InteractionStyle;RenderingFreeType;RenderingOpenGL2")
41
                foreach(_module ${VTK_COMPONENTS})
42
                    list (FIND VTK_AVAILABLE_COMPONENTS ${_module} _index)
43
                    if(${_index} GREATER -1)
44
                        list(APPEND AVAILABLE_VTK_COMPONENTS ${_module})
45
                    endif()
46
                endforeach()
47
            endif()
48
        endif()
49

50
        # don't check VERSION 6 as this would exclude VERSION 7
51
        if(AVAILABLE_VTK_COMPONENTS)
52
            message(STATUS "VTK components: ${AVAILABLE_VTK_COMPONENTS}")
53
            find_package(VTK COMPONENTS ${AVAILABLE_VTK_COMPONENTS} REQUIRED NO_MODULE)
54
        else()
55
            message(STATUS "VTK components: not found or used")
56
            find_package(VTK REQUIRED NO_MODULE)
57
        endif()
58

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

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

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

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

137
            include_directories(${SMESH_INCLUDE_DIR})
138
        endif()
139

140
        set(SMESH_FOUND TRUE)
141
        configure_file(${CMAKE_SOURCE_DIR}/src/SMESH_Version.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/SMESH_Version.h)
142
    endif(BUILD_SMESH)
143

144
endmacro(SetupSalomeSMESH)
145

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

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

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

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