Skip to content

Commit

Permalink
CMake: Add support for building with clang-cl
Browse files Browse the repository at this point in the history
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 <[email protected]>
  • Loading branch information
cristianadam committed Jun 4, 2021
1 parent 6d82d0c commit 20b3eb0
Show file tree
Hide file tree
Showing 5 changed files with 53 additions and 17 deletions.
4 changes: 3 additions & 1 deletion cmake/QtBuild.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -285,7 +285,9 @@ if(WIN32)
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)
Expand Down
2 changes: 1 addition & 1 deletion cmake/QtFlagHandlingHelpers.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -235,7 +235,7 @@ endfunction()
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()
Expand Down
20 changes: 20 additions & 0 deletions src/corelib/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -271,6 +271,26 @@ qt_internal_add_module(Core
# 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()

qt_update_ignore_pch_source(Core kernel/qmetatype.cpp )

# special case begin
Expand Down
35 changes: 20 additions & 15 deletions src/corelib/global/qt_pch.h
Original file line number Diff line number Diff line change
Expand Up @@ -62,19 +62,24 @@
# define _POSIX_
# include <limits.h>
# undef _POSIX_
#endif
#include <qcoreapplication.h>
#include <qcoreevent.h>
#include <qiodevice.h>
#include <qlist.h>
#include <qvariant.h> /* All moc genereated code has this include */
#include <qobject.h>
#if QT_CONFIG(regularexpression)
# include <qregularexpression.h>
#endif
#include <qscopedpointer.h>
#include <qshareddata.h>
#include <qstring.h>
#include <qstringlist.h>
#include <qtimer.h>
# if defined(Q_CC_CLANG) && defined(Q_CC_MSVC)
// See https://bugs.llvm.org/show_bug.cgi?id=41226
# include <wchar.h>
__declspec(selectany) auto *__wmemchr_symbol_loader_value = wmemchr(L"", L'0', 0);
# endif
# endif
# include <qcoreapplication.h>
# include <qcoreevent.h>
# include <qiodevice.h>
# include <qlist.h>
# include <qvariant.h> /* All moc genereated code has this include */
# include <qobject.h>
# if QT_CONFIG(regularexpression)
# include <qregularexpression.h>
# endif
# include <qscopedpointer.h>
# include <qshareddata.h>
# include <qstring.h>
# include <qstringlist.h>
# include <qtimer.h>
#endif
9 changes: 9 additions & 0 deletions src/gui/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -577,6 +577,15 @@ if(NOT ANDROID)
)
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
Expand Down

0 comments on commit 20b3eb0

Please sign in to comment.