summaryrefslogtreecommitdiff
path: root/mkspecs/common/msvc-version.conf
blob: ccd809abf3a8efddbf05fc31c81d320ebca35106 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#
# qmake configuration for Microsoft Visual Studio C/C++ Compiler
# This file is used by win32-msvc, win32-clang-msvc, and all
# winrt-XXX-msvcXXX specs
#

#
# Version-specific changes
#

isEmpty(QMAKE_MSC_VER): error("msvc-version.conf loaded but QMAKE_MSC_VER isn't set")

MSVC_VER = 8.0
COMPAT_MKSPEC = win32-msvc2005

greaterThan(QMAKE_MSC_VER, 1499) {
    # Visual Studio 2008 (9.0) / Visual C++ 15.0 and up
    MSVC_VER            = 9.0
    COMPAT_MKSPEC       = win32-msvc2008
    QMAKE_CFLAGS_MP     = -MP
    QMAKE_CXXFLAGS_MP   = $$QMAKE_CFLAGS_MP
}

greaterThan(QMAKE_MSC_VER, 1599) {
    # Visual Studio 2010 (10.0) / Visual C++ 16.0 and up
    MSVC_VER            = 10.0
    COMPAT_MKSPEC       = win32-msvc2010
    MAKEFILE_GENERATOR  = MSBUILD

    QMAKE_CFLAGS_AVX    = -arch:AVX
    QMAKE_CFLAGS_AVX2   = -arch:AVX

    VCPROJ_EXTENSION    = .vcxproj
}

greaterThan(QMAKE_MSC_VER, 1699) {
    # Visual Studio 2012 (11.0) / Visual C++ 17.0 and up
    MSVC_VER            = 11.0
    COMPAT_MKSPEC       = win32-msvc2012
    QMAKE_CXXFLAGS_EXCEPTIONS_OFF = /wd4530 /wd4577
    QT_CONFIG          += c++11
    CONFIG             += c++11
}

greaterThan(QMAKE_MSC_VER, 1799) {
    # Visual Studio 2013 (12.0) / Visual C++ 18.0 and up
    MSVC_VER            = 12.0
    COMPAT_MKSPEC       = win32-msvc2013
    QMAKE_CFLAGS       += -FS
    QMAKE_CXXFLAGS     += -FS -Zc:rvalueCast -Zc:inline

    QMAKE_CFLAGS_F16C   = -arch:AVX
    QMAKE_CFLAGS_RDRND  =

    equals(QMAKE_MSC_VER, 1800) {
        QMAKE_CFLAGS_RELEASE += -Zc:strictStrings
        QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -Zc:strictStrings
        QMAKE_CXXFLAGS_RELEASE += -Zc:strictStrings
        QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO += -Zc:strictStrings
    }
}

greaterThan(QMAKE_MSC_VER, 1899) {
    # Visual Studio 2015 (14.0) / Visual C++ 19.0 and up
    MSVC_VER            = 14.0
    COMPAT_MKSPEC       = win32-msvc2015
    QMAKE_CFLAGS       += -Zc:strictStrings
    QMAKE_CFLAGS_WARN_ON += -w44456 -w44457 -w44458
    QMAKE_CFLAGS_AVX2   = -arch:AVX2
    QMAKE_CXXFLAGS     += -Zc:strictStrings -Zc:throwingNew
    QMAKE_CXXFLAGS_WARN_ON += -w44456 -w44457 -w44458 -wd4577 -wd4467

    greaterThan(QMAKE_MSC_FULL_VER, 190023918):!intel_icl {
        isEmpty(QT_CLANG_MAJOR_VERSION)|!lessThan(QT_CLANG_MAJOR_VERSION, 4) {
            QMAKE_CFLAGS_UTF8_SOURCE = -utf-8
        }
    }
}

greaterThan(QMAKE_MSC_VER, 1909) {
    # Visual Studio 2017 (15.0) / Visual C++ 19.10 and up
    MSVC_VER            = 15.0
    COMPAT_MKSPEC       = win32-msvc2017
    QMAKE_CXXFLAGS     += -Zc:referenceBinding

    # Only Visual Studio 2017 version 15.3 / Visual C++ 19.11 & up have support
    # for AVX-512. We enable the switches anyway and let configure check if they
    # work.
    QMAKE_CFLAGS_AVX512F   = -arch:AVX512
    QMAKE_CFLAGS_AVX512ER  = -arch:AVX512
    QMAKE_CFLAGS_AVX512CD  = -arch:AVX512
    QMAKE_CFLAGS_AVX512PF  = -arch:AVX512
    QMAKE_CFLAGS_AVX512DQ  = -arch:AVX512
    QMAKE_CFLAGS_AVX512BW  = -arch:AVX512
    QMAKE_CFLAGS_AVX512VL  = -arch:AVX512
    QMAKE_CFLAGS_AVX512IFMA = -arch:AVX512
    QMAKE_CFLAGS_AVX512VBMI = -arch:AVX512

    # For now permissive fails as soon as UWP API comes into play. In qtbase this
    # API is used in direct2d, but also in multimedia, positioning and sensors.
    # We can try again with a later version of Visual Studio.
    # QMAKE_CXXFLAGS_STRICTCXX = -permissive-
    # MSVC partially supports the following, but '__cplusplus' definition is set
    # as for C++98 until MSVC fully conforms with C++14, see
    # https://developercommunity.visualstudio.com/content/problem/139261/msvc-incorrectly-defines-cplusplus.html
    # QMAKE_CXXFLAGS_CXX14 = -std:c++14
    # QMAKE_CXXFLAGS_CXX1Z = -std:c++latest
}

greaterThan(QMAKE_MSC_VER, 1910) {
    # No compat spec past MSVC 2017
    COMPAT_MKSPEC       =
}

!isEmpty(COMPAT_MKSPEC):!$$COMPAT_MKSPEC: CONFIG += $$COMPAT_MKSPEC