summaryrefslogtreecommitdiffstats
path: root/mkspecs/common/msvc-version.conf
blob: 59fc0769a55cb6dba0b37720528e61ea3fd42505 (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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
#
# qmake configuration for Microsoft Visual Studio C/C++ Compiler
# This file is used by win32-msvc
#

#
# 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
    MSVC_TOOLSET_VER    = 90
    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
    MSVC_TOOLSET_VER    = 100
    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
    MSVC_TOOLSET_VER    = 110
    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
    MSVC_TOOLSET_VER    = 120
    COMPAT_MKSPEC       = win32-msvc2013
    QMAKE_CFLAGS       += -FS
    QMAKE_CXXFLAGS     += -FS -Zc:rvalueCast -Zc:inline

    QMAKE_CFLAGS_F16C   = -arch:AVX
    QMAKE_CFLAGS_RDRND  =
    QMAKE_CFLAGS_RDSEED =

    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
    MSVC_TOOLSET_VER    = 140
    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

    # -utf-8 compiler option for Visual Studio 2015 Update 2
    greaterThan(QMAKE_MSC_FULL_VER, 190023918): 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
    MSVC_TOOLSET_VER    = 141
    COMPAT_MKSPEC       = win32-msvc2017
    QMAKE_CXXFLAGS     += -permissive-

    # 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

    # 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
    # Support became available in MSVC 2017 15.7:
    greaterThan(QMAKE_MSC_VER, 1913) {
        QMAKE_CXXFLAGS      += -Zc:__cplusplus
        QMAKE_CXXFLAGS_CXX14 = -std:c++14
        QMAKE_CXXFLAGS_CXX1Z = -std:c++17
    }
}

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

greaterThan(QMAKE_MSC_VER, 1919) {
    # Visual Studio 2019 (16.0) / Visual C++ 19.20 and up
    MSVC_VER            = 16.0
    MSVC_TOOLSET_VER    = 142
    QMAKE_CXXFLAGS_CXX2A = -std:c++latest

    QMAKE_CXXFLAGS     += -Zc:externConstexpr
}

greaterThan(QMAKE_MSC_VER, 1927) {
    # Visual Studio 2019 (16.8 or 16.9) / Visual C++ 19.28 and up
    MSVC_VER            = 16.8
    QMAKE_CFLAGS_C11    = /std:c11
    QMAKE_CFLAGS_C17    = /std:c17
}

greaterThan(QMAKE_MSC_VER, 1929) {
    # Visual Studio 2022 (17.0) / Visual C++ 19.30 and up
    MSVC_VER            = 17.0
    MSVC_TOOLSET_VER    = 143
}

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