Ninja: Detection of msvc_deps_prefix for clang-cl 18.1
Environment: MS Windows 11 cmake version: 3.26 - 3.28
During a build of llvm-project (version 18.1.1) using the Ninja generator and using the clang compilers (CMAKE_C_COMPILER": "clang-cl", "CMAKE_CXX_COMPILER": "clang-cl") I got the following error:
[main] Building folder: llvm-project
[build] Starting build
[proc] Executing command: ...\local\bin\cmake.EXE --build D:/temp/llvm-project/hbexbuild/x64 --parallel 32 --target install
[build] ninja: error: FindFirstFileExA(Note: including file: C:/Program Files (x86)/Windows Kits/10/include/10.0.22621.0/shared): Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch.
[build]
[proc] The command: ...\local\bin\cmake.EXE --build D:/temp/llvm-project/hbexbuild/x64 --parallel 32 --target install exited with code: 1
[driver] Build completed: 00:00:01.174
[build] Build finished with exit code 1
It tracked this down to
...
tools/llvm-config/ExtensionDependencies.inc
tools/llvm-config/LibraryDependencies.inc
projects/openmp/runtime/src/CMakeFiles/omp.dir/libomp.rc.res: #deps 17, deps mtime 7322090345723586 (VALID)
Note: including file: C:/Program Files (x86)/Windows Kits/10/include/10.0.22621.0/shared/sdv_driverspecs.h
Note: including file: C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Tools/MSVC/14.39.33519/includ/concurrencysal.h
Note: including file: C:/Program Files (x86)/Windows Kits/10/include/10.0.22621.0/shared/driverspecs.h
Note: including file: C:/Program Files (x86)/Windows Kits/10/include/10.0.22621.0/shared/winpackagefamily.h
Note: including file: C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Tools/MSVC/14.39.33519/includesal.h
Note: including file: C:/Program Files (x86)/Windows Kits/10/include/10.0.22621.0/shared/SpecStrings.h
Note: including file: C:/Program Files (x86)/Windows Kits/10/include/10.0.22621.0/shared/winapifamily.h
Note: including file: C:/Program Files (x86)/Windows Kits/10/include/10.0.22621.0/um/verrsrc.h
Note: including file: C:/Program Files (x86)/Windows Kits/10/include/10.0.22621.0/um/commctrl.rh
Note: including file: C:/Program Files (x86)/Windows Kits/10/include/10.0.22621.0/um/dde.rh
Note: including file: C:/Program Files (x86)/Windows Kits/10/include/10.0.22621.0/um/dlgs.h
Note: including file: C:/Program Files (x86)/Windows Kits/10/include/10.0.22621.0/um/winnt.rh
Note: including file: C:/Program Files (x86)/Windows Kits/10/include/10.0.22621.0/um/winuser.rh
Note: including file: C:/Program Files (x86)/Windows Kits/10/include/10.0.22621.0/um/winver.h
Note: including file: D:/temp/llvm-project/openmp/runtime/src/kmp_platform.h
Note: including file: C:/Program Files (x86)/Windows Kits/10/include/10.0.22621.0/um/winresrc.h
Note: including file: D:/temp/llvm-project/hbexbuild/x64/projects/openmp/runtime/src/kmp_config.h
...
using ninja -t deps
.
The reason for the problem is that msvc_deps_prefix
detection failed. The detection of the prefix is done with a regular expression inside of Modules\CMakeDetermineCompilerId.cmake
. I found the following deficiencies with the regular expression:
- It is not documented and not understandable without documentation
- It is wrong and unnecessary complex (the second part of this statement is also true for the 3.29.0-rc4.
I here provide a patch against 3.28.3 which solves 1. and 2.
Edited by Michael H.