summaryrefslogtreecommitdiffstats
path: root/cmake/QtCompilerOptimization.cmake
blob: 5ca28c4de42b302524230b9959af5bf663757474 (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
if (QCC)
    set(QT_CFLAGS_SSE2      "-msse2")
    set(QT_CFLAGS_SSE3      "-msse3")
    set(QT_CFLAGS_SSSE3     "-mssse3")
    set(QT_CFLAGS_SSE4_1    "-msse4.1")
    set(QT_CFLAGS_SSE4_2    "-msse4.2")
    set(QT_CFLAGS_AVX       "-mavx")
    set(QT_CFLAGS_AVX2      "-mavx2")
    set(QT_CFLAGS_AESNI     "-maes")
    set(QT_CFLAGS_SHANI     "-msha")
endif()

if (MSVC)
    if (QT_64BIT)
        # SSE2 is mandatory on 64-bit mode, so skip the option. It triggers:
        # cl : Command line warning D9002 : ignoring unknown option '-arch:SSE2'
        set(QT_CFLAGS_SSE2   "")
    else()
        set(QT_CFLAGS_SSE2   "-arch:SSE2")
    endif()
    set(QT_CFLAGS_SSE3       "${QT_CFLAGS_SSE2}")
    set(QT_CFLAGS_SSSE3      "${QT_CFLAGS_SSE2}")
    set(QT_CFLAGS_SSE4_1     "${QT_CFLAGS_SSE2}")
    set(QT_CFLAGS_SSE4_2     "${QT_CFLAGS_SSE2}")
    set(QT_CFLAGS_AESNI      "${QT_CFLAGS_SSE2}")
    set(QT_CFLAGS_SHANI      "${QT_CFLAGS_SSE2}")

    # FIXME to be Visual Studio version specific, like in mkspecs/common/msvc-version.conf
    set(QT_CFLAGS_AVX     "-arch:AVX")
    set(QT_CFLAGS_AVX2    "-arch:AVX2")
    set(QT_CFLAGS_F16C    "-arch:AVX")
    set(QT_CFLAGS_RDRND   "")
    set(QT_CFLAGS_AVX512F "-arch:AVX512")
    set(QT_CFLAGS_AVX512ER "-arch:AVX512")
    set(QT_CFLAGS_AVX512CD "-arch:AVX512")
    set(QT_CFLAGS_AVX512PF "-arch:AVX512")
    set(QT_CFLAGS_AVX512DQ "-arch:AVX512")
    set(QT_CFLAGS_AVX512BW "-arch:AVX512")
    set(QT_CFLAGS_AVX512VL "-arch:AVX512")
    set(QT_CFLAGS_AVX512IFMA "-arch:AVX512")
    set(QT_CFLAGS_AVX512VBMI "-arch:AVX512")
endif()

if(GCC OR CLANG)
    set(QT_CFLAGS_SSE2       "-msse2")
    set(QT_CFLAGS_SSE3       "-msse3")
    set(QT_CFLAGS_SSSE3      "-mssse3")
    set(QT_CFLAGS_SSE4_1     "-msse4.1")
    set(QT_CFLAGS_SSE4_2     "-msse4.2")
    set(QT_CFLAGS_F16C       "-mf16c")
    set(QT_CFLAGS_RDRND      "-mrdrnd")
    set(QT_CFLAGS_AVX        "-mavx")
    set(QT_CFLAGS_AVX2       "-mavx2")
    set(QT_CFLAGS_AVX512F    "-mavx512f")
    set(QT_CFLAGS_AVX512ER   "-mavx512er")
    set(QT_CFLAGS_AVX512CD   "-mavx512cd")
    set(QT_CFLAGS_AVX512PF   "-mavx512pf")
    set(QT_CFLAGS_AVX512DQ   "-mavx512dq")
    set(QT_CFLAGS_AVX512BW   "-mavx512bw")
    set(QT_CFLAGS_AVX512VL   "-mavx512vl")
    set(QT_CFLAGS_AVX512IFMA "-mavx512ifma")
    set(QT_CFLAGS_AVX512VBMI "-mavx512vbmi")
    set(QT_CFLAGS_AESNI      "-maes")
    set(QT_CFLAGS_SHANI      "-msha")
    set(QT_CFLAGS_NEON       "-mfpu=neon")
    set(QT_CFLAGS_MIPS_DSP   "-mdsp")
    set(QT_CFLAGS_MIPS_DSPR2 "-mdspr2")
endif()

if (winrt) # FIXME: Correct variable
    set(QT_CFLAGS_SSE2       "-arch:SSE2")
    set(QT_CFLAGS_SSE3       "-arch:SSE2")
    set(QT_CFLAGS_SSSE3      "-arch:SSE2")
    set(QT_CFLAGS_SSE4_1     "-arch:SSE2")
    set(QT_CFLAGS_SSE4_2     "-arch:SSE2")
    set(QT_CFLAGS_AVX        "-arch:AVX")
    set(QT_CFLAGS_AVX2       "-arch:AVX")
    set(QT_CFLAGS_AESNI      "-arch:SSE2")
    set(QT_CFLAGS_SHANI      "-arch:SSE2")
endif()

if (ICC)
    if (MSVC)
        set(QT_CFLAGS_SSE2       "-QxSSE2")
        set(QT_CFLAGS_SSE3       "-QxSSE3")
        set(QT_CFLAGS_SSSE3      "-QxSSSE3")
        set(QT_CFLAGS_SSE4_1     "-QxSSE4.1")
        set(QT_CFLAGS_SSE4_2     "-QxSSE4.2")
        set(QT_CFLAGS_AVX        "-QxAVX")
        set(QT_CFLAGS_AVX2       "-QxCORE-AVX2")
        set(QT_CFLAGS_AVX512F    "-QxCOMMON-AVX512")
        set(QT_CFLAGS_AVX512CD   "-QxCOMMON-AVX512")
        set(QT_CFLAGS_AVX512ER   "-QxMIC-AVX512")
        set(QT_CFLAGS_AVX512PF   "-QxMIC-AVX512")
        set(QT_CFLAGS_AVX512DQ   "-QxCORE-AVX512")
        set(QT_CFLAGS_AVX512BW   "-QxCORE-AVX512")
        set(QT_CFLAGS_AVX512VL   "-QxCORE-AVX512")
        set(QT_CFLAGS_F16C       "${QT_CFLAGS_AVX2}")
        set(QT_CFLAGS_AESNI      "-QxSSE2")
        set(QT_CFLAGS_SHANI      "-QxSSE4.2")
    else()
        set(QT_CFLAGS_SSE2      "-msse2")
        set(QT_CFLAGS_SSE3      "-msse3")
        set(QT_CFLAGS_SSSE3     "-mssse3")
        set(QT_CFLAGS_SSE4_1    "-msse4.1")
        set(QT_CFLAGS_SSE4_2    "-msse4.2")
        set(QT_CFLAGS_AVX       "-march=core-avx")
        set(QT_CFLAGS_AVX2      "-march=core-avx2")
        set(QT_CFLAGS_AVX512F   "-march=broadwell -xCOMMON-AVX512")
        set(QT_CFLAGS_AVX512CD  "-march=broadwell -xCOMMON-AVX512")
        set(QT_CFLAGS_AVX512ER  "-march=knl")
        set(QT_CFLAGS_AVX512PF  "-march=knl")
        set(QT_CFLAGS_AVX512DQ  "-march=skylake-avx512")
        set(QT_CFLAGS_AVX512BW  "-march=skylake-avx512")
        set(QT_CFLAGS_AVX512VL  "-march=skylake-avx512")
        set(QT_CFLAGS_AESNI     "-maes")
        set(QT_CFLAGS_F16C      "${QT_CFLAGS_AVX2}")
        set(QT_CFLAGS_RDRND     "-mrdrnd")
        set(QT_CFLAGS_SHANI     "-msha")
    endif()
endif()