Reputation: 129
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)
Upvotes: 0
Views: 375
Reputation: 129
It's rather strange and not obvious, but the issue was caused by -WX -external:W3
switch for clangCL, when I changed it to -WX -external:W0
the issue disapeared.
Upvotes: 0