FreeCAD

Форк
0
/
CompilerChecksAndSetups.cmake 
102 строки · 4.5 Кб
1
# Some resources
2
# https://github.com/dev-cafe/cmake-cookbook
3
# https://cmake.org/cmake/help/v3.8/manual/cmake-compile-features.7.html
4

5
macro(CompilerChecksAndSetups)
6
    if (${CMAKE_CXX_COMPILER_ID} MATCHES "Clang")
7
        set(CMAKE_COMPILER_IS_CLANGXX TRUE)
8
    endif (${CMAKE_CXX_COMPILER_ID} MATCHES "Clang")
9

10
    # ================================================================================
11

12
    # Needed for boost1.69
13
    # Avoid that Python (pyerrors.h) defines snprintf and vsnprintf
14
    if (MSVC AND NOT MSVC_VERSION VERSION_LESS 1900)
15
        add_definitions(-DHAVE_SNPRINTF)
16
    elseif (MINGW)
17
        add_definitions(-DHAVE_SNPRINTF)
18
    endif()
19

20
    # Allow developers to use Boost < 1.65
21
    if (NOT BOOST_MIN_VERSION)
22
        set(BOOST_MIN_VERSION 1.65)
23
    endif()
24

25
    # For older cmake versions the variable 'CMAKE_CXX_COMPILER_VERSION' is missing
26
    if(CMAKE_COMPILER_IS_GNUCXX AND NOT CMAKE_CXX_COMPILER_VERSION)
27
        execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion
28
                        OUTPUT_VARIABLE CMAKE_CXX_COMPILER_VERSION)
29
    endif(CMAKE_COMPILER_IS_GNUCXX AND NOT CMAKE_CXX_COMPILER_VERSION)
30

31
    # Enabled C++17 for Freecad 0.20 and later
32
        set(BUILD_ENABLE_CXX_STD "C++17"  CACHE STRING  "Enable C++ standard")
33
        set_property(CACHE BUILD_ENABLE_CXX_STD PROPERTY STRINGS
34
                     "C++17"
35
                     "C++20"
36
        )
37

38
        if (CMAKE_COMPILER_IS_GNUCXX AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 7.3)
39
            message(FATAL_ERROR "FreeCAD 0.20 and later requires C++17.  G++ must be 7.3 or later, the used version is ${CMAKE_CXX_COMPILER_VERSION}")
40
        elseif(CMAKE_COMPILER_IS_CLANGXX AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 6.0)
41
            message(FATAL_ERROR "FreeCAD 0.20 and later requires C++17.  Clang must be 6.0 or later, the used version is ${CMAKE_CXX_COMPILER_VERSION}")
42
        endif()
43

44
    # Escape the two plus chars as otherwise cmake complains about invalid regex
45
    if(${BUILD_ENABLE_CXX_STD} MATCHES "C\\+\\+20")
46
        set(CMAKE_CXX_STANDARD 20)
47
    elseif(${BUILD_ENABLE_CXX_STD} MATCHES "C\\+\\+17")
48
        set(CMAKE_CXX_STANDARD 17)
49
    endif()
50

51
    # Log the compiler and version
52
    message(STATUS "Compiler: ${CMAKE_CXX_COMPILER_ID}, version: ${CMAKE_CXX_COMPILER_VERSION}")
53

54
    if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANGXX)
55
        include(${CMAKE_SOURCE_DIR}/cMake/ConfigureChecks.cmake)
56
        configure_file(${CMAKE_SOURCE_DIR}/src/config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h)
57
        add_definitions(-DHAVE_CONFIG_H)
58

59
        # For now only set pedantic option for clang
60
        if(CMAKE_COMPILER_IS_CLANGXX)
61
            set(CMAKE_CXX_FLAGS "-Wall -Wextra -Wpedantic -Wno-write-strings ${CMAKE_CXX_FLAGS}")
62
        else()
63
            set(CMAKE_CXX_FLAGS "-Wall -Wextra -Wno-write-strings ${CMAKE_CXX_FLAGS}")
64
        endif()
65
        include_directories(${CMAKE_CURRENT_BINARY_DIR})
66

67
        # get linker errors as soon as possible and not at runtime e.g. for modules
68
        if(BUILD_DYNAMIC_LINK_PYTHON)
69
            if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
70
                set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-undefined,error")
71
            elseif(UNIX)
72
                set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--no-undefined")
73
            endif()
74
        else(BUILD_DYNAMIC_LINK_PYTHON)
75
            if(CMAKE_COMPILER_IS_CLANGXX)
76
                set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-undefined,dynamic_lookup")
77
            endif()
78
        endif(BUILD_DYNAMIC_LINK_PYTHON)
79
    endif(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANGXX)
80

81
    if(CMAKE_COMPILER_IS_CLANGXX)
82
        # Disable warning about potentially uninstantiated static members
83
        # because it leads to a lot of false-positives.
84
        #
85
        # https://en.wikipedia.org/wiki/Xcode#Latest_versions
86
        if (APPLE)
87
            if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 8.0)
88
                set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-undefined-var-template")
89
            endif()
90
            add_definitions(-DGL_SILENCE_DEPRECATION)
91
        elseif (UNIX)
92
            set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-undefined-var-template")
93
        endif()
94

95
        # older boost.preprocessor turn off variadics for clang
96
        add_definitions(-DBOOST_PP_VARIADICS=1)
97
        message(STATUS "Force BOOST_PP_VARIADICS=1 for clang")
98
    endif()
99

100
    set (COMPILE_DEFINITIONS ${COMPILE_DEFINITIONS} BOOST_NO_CXX98_FUNCTION_BASE)
101

102
endmacro(CompilerChecksAndSetups)
103

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

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

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

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