RedApe
RedApe

Reputation: 129

Clang-CL build using Cmake + ninja gives error while compiling WinSDK standard headers

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

Answers (1)

RedApe
RedApe

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

Related Questions