From 20b3eb0fd8b5f82cf432f2c06e7c5d3f533df0a5 Mon Sep 17 00:00:00 2001 From: Cristian Adam Date: Thu, 03 Jun 2021 12:42:07 +0200 Subject: [PATCH] CMake: Add support for building with clang-cl qmake had support for building with clang-cl as the win32-clang-msvc mkspec. Task-number: QTBUG-89642 Task-number: QTBUG-88081 Change-Id: I0709c289f90fedb121620d1e67ef841602219816 Reviewed-by: Alexandru Croitor --- diff --git a/cmake/QtBuild.cmake b/cmake/QtBuild.cmake index bb8b146..792276e 100644 --- a/cmake/QtBuild.cmake +++ b/cmake/QtBuild.cmake @@ -285,7 +285,9 @@ list(APPEND QT_DEFAULT_PLATFORM_DEFINITIONS WIN64 _WIN64) endif() if(MSVC) - if(CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64") + if (CLANG) + set(QT_DEFAULT_MKSPEC win32-clang-msvc) + elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64") set(QT_DEFAULT_MKSPEC win32-arm64-msvc) else() set(QT_DEFAULT_MKSPEC win32-msvc) diff --git a/cmake/QtFlagHandlingHelpers.cmake b/cmake/QtFlagHandlingHelpers.cmake index 0c57d9e..0eeccce 100644 --- a/cmake/QtFlagHandlingHelpers.cmake +++ b/cmake/QtFlagHandlingHelpers.cmake @@ -235,7 +235,7 @@ function(qt_set_msvc_cplusplus_options target visibility) # For MSVC we need to explicitly pass -Zc:__cplusplus to get correct __cplusplus. # Check qt_config_compile_test for more info. - if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC" AND MSVC_VERSION GREATER_EQUAL 1913) + if(MSVC AND MSVC_VERSION GREATER_EQUAL 1913) target_compile_options("${target}" ${visibility} "-Zc:__cplusplus" "-permissive-") endif() endfunction() diff --git a/src/corelib/CMakeLists.txt b/src/corelib/CMakeLists.txt index 2c991f7..9f0c95e 100644 --- a/src/corelib/CMakeLists.txt +++ b/src/corelib/CMakeLists.txt @@ -263,4 +263,24 @@ # special case end ) +if (MSVC AND CLANG) + foreach(subarch sse4_1 rdrnd rdseed) + if (TEST_subarch_${subarch}) + qt_internal_add_simd_part(Core SIMD ${subarch} + SOURCES + global/qsimd.cpp + ) + endif() + endforeach() + + foreach(subarch sse4_1 aesni) + if (TEST_subarch_${subarch}) + qt_internal_add_simd_part(Core SIMD ${subarch} + SOURCES + tools/qhash.cpp + ) + endif() + endforeach() +endif() + # special case begin diff --git a/src/corelib/global/qt_pch.h b/src/corelib/global/qt_pch.h index 5869751..6108b07 100644 --- a/src/corelib/global/qt_pch.h +++ b/src/corelib/global/qt_pch.h @@ -62,17 +62,22 @@ # define _POSIX_ # include # undef _POSIX_ -#endif -#include -#include -#include -#include -#include /* All moc genereated code has this include */ -#include -#include -#include -#include -#include -#include -#include +# if defined(Q_CC_CLANG) && defined(Q_CC_MSVC) +// See https://bugs.llvm.org/show_bug.cgi?id=41226 +# include +__declspec(selectany) auto *__wmemchr_symbol_loader_value = wmemchr(L"", L'0', 0); +# endif +# endif +# include +# include +# include +# include +# include /* All moc genereated code has this include */ +# include +# include +# include +# include +# include +# include +# include #endif diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index 5fe4d59..04f58dd 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -577,6 +577,15 @@ ) endif() + if (MSVC AND CLANG AND TEST_subarch_sse4_1) + qt_internal_add_simd_part(Gui SIMD sse4_1 + SOURCES + painting/qdrawhelper.cpp + painting/qdrawhelper_sse2.cpp + painting/qdrawhelper_ssse3.cpp + ) + endif() + qt_internal_add_simd_part(Gui SIMD ssse3 SOURCES image/qimage_ssse3.cpp