I have software that uses WinSDK using MSVC compiler. I'm trying to build it using ClangCL and ninja.
I have alreadu succeded in build of ClangCL without ninja
cmake {some stuff} -T ClangCL
But this kind of build is too slow, I'm trying to engage ninja:
cmake {some stuff} -GNinja -DCMAKE_C_COMPILER=clang-cl -DCMAKE_CXX_COMPILER=clang-cl -DCMAKE_LINKER=lld-link.exe
cmake --build .
Generation stage has no issues, but when I build I get wierd errors from WinSDK code:
C:\Program Files (x86)\Windows Kits\10\\include\10.0.22621.0\\um\winnt.h(3577,19): error: '_m_prefetchw' is not a recognized builtin; consider including <intrin.h> to access non-builtin intrinsics [-Werror,-Wignored-pragma-intrinsic]
#pragma intrinsic(_m_prefetchw)
^
C:\Program Files (x86)\Windows Kits\10\\include\10.0.22621.0\\um\winnt.h(3637,19): error: '__getcallerseflags' is not a recognized builtin; consider including <intrin.h> to access non-builtin intrinsics [-Werror,-Wignored-pragma-intrinsic]
#pragma intrinsic(__getcallerseflags)
^
C:\Program Files (x86)\Windows Kits\10\\include\10.0.22621.0\\um\winnt.h(3650,19): error: '__segmentlimit' is not a recognized builtin; consider including <intrin.h> to access non-builtin intrinsics [-Werror,-Wignored-pragma-intrinsic]
#pragma intrinsic(__segmentlimit)
^
C:\Program Files (x86)\Windows Kits\10\\include\10.0.22621.0\\um\winnt.h(3663,19): error: '__readpmc' is not a recognized builtin; consider including <intrin.h> to access non-builtin intrinsics [-Werror,-Wignored-pragma-intrinsic]
#pragma intrinsic(__readpmc)
^
C:\Program Files (x86)\Windows Kits\10\\include\10.0.22621.0\\um\winnt.h(3710,19): error: '__movsb' is not a recognized builtin; consider including <intrin.h> to access non-builtin intrinsics [-Werror,-Wignored-pragma-intrinsic]
#pragma intrinsic(__movsb)
^
C:\Program Files (x86)\Windows Kits\10\\include\10.0.22621.0\\um\winnt.h(3711,19): error: '__movsw' is not a recognized builtin; consider including <intrin.h> to access non-builtin intrinsics [-Werror,-Wignored-pragma-intrinsic]
#pragma intrinsic(__movsw)
^
C:\Program Files (x86)\Windows Kits\10\\include\10.0.22621.0\\um\winnt.h(3712,19): error: '__movsd' is not a recognized builtin; consider including <intrin.h> to access non-builtin intrinsics [-Werror,-Wignored-pragma-intrinsic]
#pragma intrinsic(__movsd)
^
C:\Program Files (x86)\Windows Kits\10\\include\10.0.22621.0\\um\winnt.h(3713,19): error: '__movsq' is not a recognized builtin; consider including <intrin.h> to access non-builtin intrinsics [-Werror,-Wignored-pragma-intrinsic]
#pragma intrinsic(__movsq)
^
C:\Program Files (x86)\Windows Kits\10\\include\10.0.22621.0\\um\winnt.h(3748,19): error: '__stosw' is not a recognized builtin; consider including <intrin.h> to access non-builtin intrinsics [-Werror,-Wignored-pragma-intrinsic]
#pragma intrinsic(__stosw)
^
C:\Program Files (x86)\Windows Kits\10\\include\10.0.22621.0\\um\winnt.h(3749,19): error: '__stosd' is not a recognized builtin; consider including <intrin.h> to access non-builtin intrinsics [-Werror,-Wignored-pragma-intrinsic]
#pragma intrinsic(__stosd)
^
C:\Program Files (x86)\Windows Kits\10\\include\10.0.22621.0\\um\winnt.h(3750,19): error: '__stosq' is not a recognized builtin; consider including <intrin.h> to access non-builtin intrinsics [-Werror,-Wignored-pragma-intrinsic]
#pragma intrinsic(__stosq)
^
C:\Program Files (x86)\Windows Kits\10\\include\10.0.22621.0\\um\winnt.h(4022,19): error: '__writegsbyte' is not a recognized builtin; consider including <intrin.h> to access non-builtin intrinsics [-Werror,-Wignored-pragma-intrinsic]
#pragma intrinsic(__writegsbyte)
^
C:\Program Files (x86)\Windows Kits\10\\include\10.0.22621.0\\um\winnt.h(4023,19): error: '__writegsword' is not a recognized builtin; consider including <intrin.h> to access non-builtin intrinsics [-Werror,-Wignored-pragma-intrinsic]
#pragma intrinsic(__writegsword)
^
C:\Program Files (x86)\Windows Kits\10\\include\10.0.22621.0\\um\winnt.h(4024,19): error: '__writegsdword' is not a recognized builtin; consider including <intrin.h> to access non-builtin intrinsics [-Werror,-Wignored-pragma-intrinsic]
#pragma intrinsic(__writegsdword)
^
C:\Program Files (x86)\Windows Kits\10\\include\10.0.22621.0\\um\winnt.h(4025,19): error: '__writegsqword' is not a recognized builtin; consider including <intrin.h> to access non-builtin intrinsics [-Werror,-Wignored-pragma-intrinsic]
#pragma intrinsic(__writegsqword)
^
C:\Program Files (x86)\Windows Kits\10\\include\10.0.22621.0\\um\winnt.h(4206,35): error: __declspec attribute 'no_init_all' is not supported [-Werror,-Wignored-attributes]
typedef struct DECLSPEC_ALIGN(16) DECLSPEC_NOINITALL _CONTEXT {
^~~~~~~~~~~~~~~~~~
I expect that ClangCL+Ninja build is successful, since ClangCL was able to build my project without errors.
Looks like this is a Cmake issue, some compilers flags are not set or something like that?
CMake 3.24.1 MSVC v17.5.2 (Microsoft Studio 2022)
It's rather strange and not obvious, but the issue was caused by
-WX -external:W3switch for clangCL, when I changed it to-WX -external:W0the issue disapeared.