summaryrefslogtreecommitdiffstats
path: root/cmake/QtCompilerOptimization.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'cmake/QtCompilerOptimization.cmake')
-rw-r--r--cmake/QtCompilerOptimization.cmake167
1 files changed, 61 insertions, 106 deletions
diff --git a/cmake/QtCompilerOptimization.cmake b/cmake/QtCompilerOptimization.cmake
index 2e98dc31c2..ac542e9451 100644
--- a/cmake/QtCompilerOptimization.cmake
+++ b/cmake/QtCompilerOptimization.cmake
@@ -1,14 +1,5 @@
-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()
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
if (MSVC)
if (QT_64BIT)
@@ -25,7 +16,6 @@ if (MSVC)
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")
@@ -40,92 +30,45 @@ if (MSVC)
set(QT_CFLAGS_AVX512VL "-arch:AVX512")
set(QT_CFLAGS_AVX512IFMA "-arch:AVX512")
set(QT_CFLAGS_AVX512VBMI "-arch:AVX512")
+ set(QT_CFLAGS_AVX512VBMI2 "-arch:AVX512")
+ set(QT_CFLAGS_VAES "")
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_RDSEED "-mrdseed")
- set(QT_CFLAGS_AVX "-mavx")
- set(QT_CFLAGS_AVX2 "-mavx2")
- set(QT_CFLAGS_ARCH_HASWELL "-march=haswell")
- 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")
- if(NOT UIKIT AND NOT QT_64BIT)
- set(QT_CFLAGS_NEON "-mfpu=neon")
+if(GCC OR CLANG OR QCC)
+ set(__prefix)
+ if(MSVC AND CLANG)
+ set(__prefix "/clang:")
endif()
- 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_RDRND "")
- set(QT_CFLAGS_RDSEED "")
- 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_RDSEED "-mrdseed")
- set(QT_CFLAGS_SHANI "-msha")
+ set(QT_CFLAGS_SSE2 "${__prefix}-msse2")
+ set(QT_CFLAGS_SSE3 "${__prefix}-msse3")
+ set(QT_CFLAGS_SSSE3 "${__prefix}-mssse3")
+ set(QT_CFLAGS_SSE4_1 "${__prefix}-msse4.1")
+ set(QT_CFLAGS_SSE4_2 "${__prefix}-msse4.2")
+ set(QT_CFLAGS_F16C "${__prefix}-mf16c")
+ set(QT_CFLAGS_RDRND "${__prefix}-mrdrnd")
+ set(QT_CFLAGS_RDSEED "${__prefix}-mrdseed")
+ set(QT_CFLAGS_AVX "${__prefix}-mavx")
+ set(QT_CFLAGS_AVX2 "${__prefix}-mavx2")
+ set(QT_CFLAGS_ARCH_HASWELL "${__prefix}-march=haswell")
+ set(QT_CFLAGS_AVX512F "${__prefix}-mavx512f")
+ set(QT_CFLAGS_AVX512ER "${__prefix}-mavx512er")
+ set(QT_CFLAGS_AVX512CD "${__prefix}-mavx512cd")
+ set(QT_CFLAGS_AVX512PF "${__prefix}-mavx512pf")
+ set(QT_CFLAGS_AVX512DQ "${__prefix}-mavx512dq")
+ set(QT_CFLAGS_AVX512BW "${__prefix}-mavx512bw")
+ set(QT_CFLAGS_AVX512VL "${__prefix}-mavx512vl")
+ set(QT_CFLAGS_AVX512IFMA "${__prefix}-mavx512ifma")
+ set(QT_CFLAGS_AVX512VBMI "${__prefix}-mavx512vbmi")
+ set(QT_CFLAGS_AVX512VBMI2 "${__prefix}-mavx512vbmi2")
+ set(QT_CFLAGS_AESNI "${__prefix}-maes")
+ set(QT_CFLAGS_SHANI "${__prefix}-msha")
+ set(QT_CFLAGS_VAES "${__prefix}-mvaes")
+ if(NOT UIKIT AND NOT QT_64BIT)
+ set(QT_CFLAGS_NEON "${__prefix}-mfpu=neon")
endif()
+ set(QT_CFLAGS_MIPS_DSP "${__prefix}-mdsp")
+ set(QT_CFLAGS_MIPS_DSPR2 "${__prefix}-mdspr2")
+ unset(__prefix)
endif()
# Fall through is important, so that more specific flags that might be missing are set by the
@@ -147,7 +90,7 @@ if(GCC OR CLANG)
endif()
# Flags that CMake might set, aka flags the compiler would see as valid values.
-if(GCC OR CLANG OR QCC OR ICC)
+if(GCC OR CLANG OR QCC)
set(QT_CFLAGS_OPTIMIZE_VALID_VALUES "-O0" "-O1" "-O2" "-O3" "-Os" "-Oz")
endif()
@@ -155,15 +98,31 @@ endif()
# Windows MSVC
if(MSVC)
set(QT_CFLAGS_OPTIMIZE "-O2")
+ if(NOT CLANG)
+ # -Ob3 was introduced in Visual Studio 2019 version 16.0
+ # However clang-cl can't recognize it.
+ string(APPEND QT_CFLAGS_OPTIMIZE " -Ob3 ")
+ endif()
set(QT_CFLAGS_OPTIMIZE_DEBUG "-Od")
set(QT_CFLAGS_OPTIMIZE_SIZE "-O1")
- set(QT_CFLAGS_OPTIMIZE_VALID_VALUES "/O2" "/O1" "/Od" "/Ob0" "/Ob1" "/Ob2" "/O0" "-O0")
+ set(QT_CFLAGS_OPTIMIZE_VALID_VALUES "/O2" "/O1" "/Od" "/Ob0" "/Ob1" "/Ob2" "/Ob3" "/O0" "-O0")
+
+ if(CLANG)
+ set(QT_CFLAGS_OPTIMIZE_FULL "/clang:-O3")
+ set(QT_CFLAGS_OPTIMIZE_SIZE "/clang:-Oz")
+ endif()
endif()
# Android Clang
if(CLANG AND ANDROID)
- set(QT_CFLAGS_OPTIMIZE "-Oz")
- set(QT_CFLAGS_OPTIMIZE_FULL "-Oz")
+ if(QT_FEATURE_ltcg)
+ # When using LTCG, the linker cannot cope with -Oz. See QTBUG-89472 for details.
+ set(QT_CFLAGS_OPTIMIZE "-O2")
+ set(QT_CFLAGS_OPTIMIZE_FULL "-O3")
+ else()
+ set(QT_CFLAGS_OPTIMIZE "-Oz")
+ set(QT_CFLAGS_OPTIMIZE_FULL "-Oz")
+ endif()
endif()
# qcc
@@ -172,12 +131,8 @@ if (QCC)
set(QT_CFLAGS_OPTIMIZE_FULL "-O3")
endif()
-if(ICC)
- if(MSVC)
- set(QT_CFLAGS_OPTIMIZE_FULL "-O3")
- else()
- # Should inherit gcc base
- set(QT_CFLAGS_OPTIMIZE "-O2")
- set(QT_CFLAGS_OPTIMIZE_SIZE "-Os")
- endif()
+# Emscripten Clang
+if(WASM)
+ set(QT_CFLAGS_OPTIMIZE_DEBUG "-O2 -g") # -Og is not supported
+ set(QT_CFLAGS_SSE2 "-O2 -msimd128 -msse -msse2")
endif()