oneapi-src / level-zero

oneAPI Level Zero Specification Headers and Loader
https://spec.oneapi.com/versions/latest/elements/l0/source/index.html
MIT License
208 stars 90 forks source link

Error building with clang-cl on Windows #83

Open alexbatashev opened 2 years ago

alexbatashev commented 2 years ago

The following errors occur when trying to set clang-cl.exe instead of cl.exe as host compiler:

[1/39] Building CXX object source\CMakeFiles\ze_loader.dir\lib\ze_libapi.cpp.obj
FAILED: source/CMakeFiles/ze_loader.dir/lib/ze_libapi.cpp.obj 
C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo -TP -DL0_LOADER_VERSION=\"1\" -DL0_VALIDATION_LAYER_SUPPORTED_VERSION=\"1\" -Dze_loader_EXPORTS -ID:\a\llvm\llvm\build\tools\sycl\plugins\level_zero\level_zero\level_zero_loader\include -ID:\a\llvm\llvm\build\tools\sycl\plugins\level_zero\level_zero\level_zero_loader\source\wrapper\include -ID:\a\llvm\llvm\build\tools\sycl\plugins\level_zero\level_zero\level_zero_loader -ID:\a\llvm\llvm\build\tools\sycl\plugins\level_zero\level_zero\level_zero_loader\source\inc /DWIN32 /D_WINDOWS /W3 /GR /EHsc /guard:cf /Qspectre /WX /W3 /wd4996 /MP /MT /O2 /Ob2 /DNDEBUG /Zi -std:c++14 /showIncludes /Fosource\CMakeFiles\ze_loader.dir\lib\ze_libapi.cpp.obj /Fdsource\CMakeFiles\ze_loader.dir\ -c -- D:\a\llvm\llvm\build\tools\sycl\plugins\level_zero\level_zero\level_zero_loader\source\lib\ze_libapi.cpp
clang-cl: error: argument unused during compilation: '/Qspectre' [-Werror,-Wunused-command-line-argument]
clang-cl: error: argument unused during compilation: '/MP' [-Werror,-Wunused-command-line-argument]
[2/39] Building CXX object source\CMakeFiles\ze_loader.dir\lib\zet_libapi.cpp.obj
FAILED: source/CMakeFiles/ze_loader.dir/lib/zet_libapi.cpp.obj 
C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo -TP -DL0_LOADER_VERSION=\"1\" -DL0_VALIDATION_LAYER_SUPPORTED_VERSION=\"1\" -Dze_loader_EXPORTS -ID:\a\llvm\llvm\build\tools\sycl\plugins\level_zero\level_zero\level_zero_loader\include -ID:\a\llvm\llvm\build\tools\sycl\plugins\level_zero\level_zero\level_zero_loader\source\wrapper\include -ID:\a\llvm\llvm\build\tools\sycl\plugins\level_zero\level_zero\level_zero_loader -ID:\a\llvm\llvm\build\tools\sycl\plugins\level_zero\level_zero\level_zero_loader\source\inc /DWIN32 /D_WINDOWS /W3 /GR /EHsc /guard:cf /Qspectre /WX /W3 /wd4996 /MP /MT /O2 /Ob2 /DNDEBUG /Zi -std:c++14 /showIncludes /Fosource\CMakeFiles\ze_loader.dir\lib\zet_libapi.cpp.obj /Fdsource\CMakeFiles\ze_loader.dir\ -c -- D:\a\llvm\llvm\build\tools\sycl\plugins\level_zero\level_zero\level_zero_loader\source\lib\zet_libapi.cpp
clang-cl: error: argument unused during compilation: '/Qspectre' [-Werror,-Wunused-command-line-argument]
clang-cl: error: argument unused during compilation: '/MP' [-Werror,-Wunused-command-line-argument]
[3/39] Building RC object source\CMakeFiles\ze_loader.dir\ZeLoaderVersion.rc.res
Microsoft (R) Windows (R) Resource Compiler Version 10.0.10011.16384

Copyright (C) Microsoft Corporation.  All rights reserved.

ninja: build stopped: subcommand failed.
bmyates commented 2 years ago

We don't validate this with clang-cl on windows. What cmake commands/options are you using? It looks like cmake is detecting clang-cl as MSVC

alexbatashev commented 2 years ago

@bmyates see below

You're not checking for msvc at all: https://github.com/oneapi-src/level-zero/blob/7da12ad29129b912e736639dfa110474b8eda49f/CMakeLists.txt#L74-L83

According to the documentation MSVC is true if host compiler can understand cl.exe compiler options, which is very confusing.

Also, not all msvc versions support Spectre mitigations. So, what you really want to do is to check if these flags are supported and only then use them.

C:\Users\alexb\Projects\level-zero\build>cmake -GNinja -DCMAKE_C_COMPILER=clang-cl -DCMAKE_CXX_COMPILER=clang-cl ..
-- The C compiler identification is Clang 13.0.0 with MSVC-like command-line
-- The CXX compiler identification is Clang 13.0.0 with MSVC-like command-line
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: C:/Program Files/LLVM/bin/clang-cl.exe - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: C:/Program Files/LLVM/bin/clang-cl.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found Git: C:/Program Files/Git/cmd/git.exe (found version "2.35.1.windows.2")
-- Using patch version from commit count in git repository: 9
-- Configuring done
-- Generating done
-- Build files have been written to: C:/Users/alexb/Projects/level-zero/build

C:\Users\alexb\Projects\level-zero\build>ninja
[1/42] Building CXX object source\CMakeFiles\ze_loader.dir\lib\ze_libddi.cpp.obj
FAILED: source/CMakeFiles/ze_loader.dir/lib/ze_libddi.cpp.obj
C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo -TP -DL0_LOADER_VERSION=\"1\" -DL0_VALIDATION_LAYER_SUPPORTED_VERSION=\"1\" -DLOADER_VERSION_MAJOR=1 -DLOADER_VERSION_MINOR=7 -DLOADER_VERSION_PATCH=9 -Dze_loader_EXPORTS -IC:\Users\alexb\Projects\level-zero\include -IC:\Users\alexb\Projects\level-zero\source\wrapper\include -IC:\Users\alexb\Projects\level-zero -IC:\Users\alexb\Projects\level-zero\source\inc /DWIN32 /D_WINDOWS /W3 /GR /EHsc /guard:cf /Qspectre /WX /W3 /wd4996 /MP /EHsc /MTd /Zi /Ob0 /Od /RTC1 -std:c++14 /showIncludes /Fosource\CMakeFiles\ze_loader.dir\lib\ze_libddi.cpp.obj /Fdsource\CMakeFiles\ze_loader.dir\ -c -- C:\Users\alexb\Projects\level-zero\source\lib\ze_libddi.cpp
clang-cl: error: argument unused during compilation: '/Qspectre' [-Werror,-Wunused-command-line-argument]
clang-cl: error: argument unused during compilation: '/MP' [-Werror,-Wunused-command-line-argument]
[2/42] Building CXX object source\CMakeFiles\ze_loader.dir\lib\zet_libapi.cpp.obj
FAILED: source/CMakeFiles/ze_loader.dir/lib/zet_libapi.cpp.obj
C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo -TP -DL0_LOADER_VERSION=\"1\" -DL0_VALIDATION_LAYER_SUPPORTED_VERSION=\"1\" -DLOADER_VERSION_MAJOR=1 -DLOADER_VERSION_MINOR=7 -DLOADER_VERSION_PATCH=9 -Dze_loader_EXPORTS -IC:\Users\alexb\Projects\level-zero\include -IC:\Users\alexb\Projects\level-zero\source\wrapper\include -IC:\Users\alexb\Projects\level-zero -IC:\Users\alexb\Projects\level-zero\source\inc /DWIN32 /D_WINDOWS /W3 /GR /EHsc /guard:cf /Qspectre /WX /W3 /wd4996 /MP /EHsc /MTd /Zi /Ob0 /Od /RTC1 -std:c++14 /showIncludes /Fosource\CMakeFiles\ze_loader.dir\lib\zet_libapi.cpp.obj /Fdsource\CMakeFiles\ze_loader.dir\ -c -- C:\Users\alexb\Projects\level-zero\source\lib\zet_libapi.cpp
clang-cl: error: argument unused during compilation: '/Qspectre' [-Werror,-Wunused-command-line-argument]
clang-cl: error: argument unused during compilation: '/MP' [-Werror,-Wunused-command-line-argument]
[3/42] Building CXX object source\CMakeFiles\ze_loader.dir\lib\ze_libapi.cpp.obj
FAILED: source/CMakeFiles/ze_loader.dir/lib/ze_libapi.cpp.obj
C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo -TP -DL0_LOADER_VERSION=\"1\" -DL0_VALIDATION_LAYER_SUPPORTED_VERSION=\"1\" -DLOADER_VERSION_MAJOR=1 -DLOADER_VERSION_MINOR=7 -DLOADER_VERSION_PATCH=9 -Dze_loader_EXPORTS -IC:\Users\alexb\Projects\level-zero\include -IC:\Users\alexb\Projects\level-zero\source\wrapper\include -IC:\Users\alexb\Projects\level-zero -IC:\Users\alexb\Projects\level-zero\source\inc /DWIN32 /D_WINDOWS /W3 /GR /EHsc /guard:cf /Qspectre /WX /W3 /wd4996 /MP /EHsc /MTd /Zi /Ob0 /Od /RTC1 -std:c++14 /showIncludes /Fosource\CMakeFiles\ze_loader.dir\lib\ze_libapi.cpp.obj /Fdsource\CMakeFiles\ze_loader.dir\ -c -- C:\Users\alexb\Projects\level-zero\source\lib\ze_libapi.cpp
clang-cl: error: argument unused during compilation: '/Qspectre' [-Werror,-Wunused-command-line-argument]
clang-cl: error: argument unused during compilation: '/MP' [-Werror,-Wunused-command-line-argument]
[4/42] Building CXX object source\CMakeFiles\ze_loader.dir\lib\zes_libapi.cpp.obj
FAILED: source/CMakeFiles/ze_loader.dir/lib/zes_libapi.cpp.obj
C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo -TP -DL0_LOADER_VERSION=\"1\" -DL0_VALIDATION_LAYER_SUPPORTED_VERSION=\"1\" -DLOADER_VERSION_MAJOR=1 -DLOADER_VERSION_MINOR=7 -DLOADER_VERSION_PATCH=9 -Dze_loader_EXPORTS -IC:\Users\alexb\Projects\level-zero\include -IC:\Users\alexb\Projects\level-zero\source\wrapper\include -IC:\Users\alexb\Projects\level-zero -IC:\Users\alexb\Projects\level-zero\source\inc /DWIN32 /D_WINDOWS /W3 /GR /EHsc /guard:cf /Qspectre /WX /W3 /wd4996 /MP /EHsc /MTd /Zi /Ob0 /Od /RTC1 -std:c++14 /showIncludes /Fosource\CMakeFiles\ze_loader.dir\lib\zes_libapi.cpp.obj /Fdsource\CMakeFiles\ze_loader.dir\ -c -- C:\Users\alexb\Projects\level-zero\source\lib\zes_libapi.cpp
clang-cl: error: argument unused during compilation: '/Qspectre' [-Werror,-Wunused-command-line-argument]
clang-cl: error: argument unused during compilation: '/MP' [-Werror,-Wunused-command-line-argument]
[5/42] Building CXX object source\CMakeFiles\ze_loader.dir\lib\zet_libddi.cpp.obj
FAILED: source/CMakeFiles/ze_loader.dir/lib/zet_libddi.cpp.obj
C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo -TP -DL0_LOADER_VERSION=\"1\" -DL0_VALIDATION_LAYER_SUPPORTED_VERSION=\"1\" -DLOADER_VERSION_MAJOR=1 -DLOADER_VERSION_MINOR=7 -DLOADER_VERSION_PATCH=9 -Dze_loader_EXPORTS -IC:\Users\alexb\Projects\level-zero\include -IC:\Users\alexb\Projects\level-zero\source\wrapper\include -IC:\Users\alexb\Projects\level-zero -IC:\Users\alexb\Projects\level-zero\source\inc /DWIN32 /D_WINDOWS /W3 /GR /EHsc /guard:cf /Qspectre /WX /W3 /wd4996 /MP /EHsc /MTd /Zi /Ob0 /Od /RTC1 -std:c++14 /showIncludes /Fosource\CMakeFiles\ze_loader.dir\lib\zet_libddi.cpp.obj /Fdsource\CMakeFiles\ze_loader.dir\ -c -- C:\Users\alexb\Projects\level-zero\source\lib\zet_libddi.cpp
clang-cl: error: argument unused during compilation: '/Qspectre' [-Werror,-Wunused-command-line-argument]
clang-cl: error: argument unused during compilation: '/MP' [-Werror,-Wunused-command-line-argument]
[6/42] Building CXX object source\CMakeFiles\ze_loader.dir\lib\zel_tracing_libddi.cpp.obj
FAILED: source/CMakeFiles/ze_loader.dir/lib/zel_tracing_libddi.cpp.obj
C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo -TP -DL0_LOADER_VERSION=\"1\" -DL0_VALIDATION_LAYER_SUPPORTED_VERSION=\"1\" -DLOADER_VERSION_MAJOR=1 -DLOADER_VERSION_MINOR=7 -DLOADER_VERSION_PATCH=9 -Dze_loader_EXPORTS -IC:\Users\alexb\Projects\level-zero\include -IC:\Users\alexb\Projects\level-zero\source\wrapper\include -IC:\Users\alexb\Projects\level-zero -IC:\Users\alexb\Projects\level-zero\source\inc /DWIN32 /D_WINDOWS /W3 /GR /EHsc /guard:cf /Qspectre /WX /W3 /wd4996 /MP /EHsc /MTd /Zi /Ob0 /Od /RTC1 -std:c++14 /showIncludes /Fosource\CMakeFiles\ze_loader.dir\lib\zel_tracing_libddi.cpp.obj /Fdsource\CMakeFiles\ze_loader.dir\ -c -- C:\Users\alexb\Projects\level-zero\source\lib\zel_tracing_libddi.cpp
clang-cl: error: argument unused during compilation: '/Qspectre' [-Werror,-Wunused-command-line-argument]
clang-cl: error: argument unused during compilation: '/MP' [-Werror,-Wunused-command-line-argument]
[7/42] Building CXX object source\CMakeFiles\ze_loader.dir\lib\windows\lib_init.cpp.obj
FAILED: source/CMakeFiles/ze_loader.dir/lib/windows/lib_init.cpp.obj
C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo -TP -DL0_LOADER_VERSION=\"1\" -DL0_VALIDATION_LAYER_SUPPORTED_VERSION=\"1\" -DLOADER_VERSION_MAJOR=1 -DLOADER_VERSION_MINOR=7 -DLOADER_VERSION_PATCH=9 -Dze_loader_EXPORTS -IC:\Users\alexb\Projects\level-zero\include -IC:\Users\alexb\Projects\level-zero\source\wrapper\include -IC:\Users\alexb\Projects\level-zero -IC:\Users\alexb\Projects\level-zero\source\inc /DWIN32 /D_WINDOWS /W3 /GR /EHsc /guard:cf /Qspectre /WX /W3 /wd4996 /MP /EHsc /MTd /Zi /Ob0 /Od /RTC1 -std:c++14 /showIncludes /Fosource\CMakeFiles\ze_loader.dir\lib\windows\lib_init.cpp.obj /Fdsource\CMakeFiles\ze_loader.dir\ -c -- C:\Users\alexb\Projects\level-zero\source\lib\windows\lib_init.cpp
clang-cl: error: argument unused during compilation: '/Qspectre' [-Werror,-Wunused-command-line-argument]
clang-cl: error: argument unused during compilation: '/MP' [-Werror,-Wunused-command-line-argument]
[8/42] Building CXX object source\CMakeFiles\ze_loader.dir\lib\zel_tracing_libapi.cpp.obj
FAILED: source/CMakeFiles/ze_loader.dir/lib/zel_tracing_libapi.cpp.obj
C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo -TP -DL0_LOADER_VERSION=\"1\" -DL0_VALIDATION_LAYER_SUPPORTED_VERSION=\"1\" -DLOADER_VERSION_MAJOR=1 -DLOADER_VERSION_MINOR=7 -DLOADER_VERSION_PATCH=9 -Dze_loader_EXPORTS -IC:\Users\alexb\Projects\level-zero\include -IC:\Users\alexb\Projects\level-zero\source\wrapper\include -IC:\Users\alexb\Projects\level-zero -IC:\Users\alexb\Projects\level-zero\source\inc /DWIN32 /D_WINDOWS /W3 /GR /EHsc /guard:cf /Qspectre /WX /W3 /wd4996 /MP /EHsc /MTd /Zi /Ob0 /Od /RTC1 -std:c++14 /showIncludes /Fosource\CMakeFiles\ze_loader.dir\lib\zel_tracing_libapi.cpp.obj /Fdsource\CMakeFiles\ze_loader.dir\ -c -- C:\Users\alexb\Projects\level-zero\source\lib\zel_tracing_libapi.cpp
clang-cl: error: argument unused during compilation: '/Qspectre' [-Werror,-Wunused-command-line-argument]
clang-cl: error: argument unused during compilation: '/MP' [-Werror,-Wunused-command-line-argument]
[9/42] Building CXX object source\CMakeFiles\ze_loader.dir\lib\zes_libddi.cpp.obj
FAILED: source/CMakeFiles/ze_loader.dir/lib/zes_libddi.cpp.obj
C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo -TP -DL0_LOADER_VERSION=\"1\" -DL0_VALIDATION_LAYER_SUPPORTED_VERSION=\"1\" -DLOADER_VERSION_MAJOR=1 -DLOADER_VERSION_MINOR=7 -DLOADER_VERSION_PATCH=9 -Dze_loader_EXPORTS -IC:\Users\alexb\Projects\level-zero\include -IC:\Users\alexb\Projects\level-zero\source\wrapper\include -IC:\Users\alexb\Projects\level-zero -IC:\Users\alexb\Projects\level-zero\source\inc /DWIN32 /D_WINDOWS /W3 /GR /EHsc /guard:cf /Qspectre /WX /W3 /wd4996 /MP /EHsc /MTd /Zi /Ob0 /Od /RTC1 -std:c++14 /showIncludes /Fosource\CMakeFiles\ze_loader.dir\lib\zes_libddi.cpp.obj /Fdsource\CMakeFiles\ze_loader.dir\ -c -- C:\Users\alexb\Projects\level-zero\source\lib\zes_libddi.cpp
clang-cl: error: argument unused during compilation: '/Qspectre' [-Werror,-Wunused-command-line-argument]
clang-cl: error: argument unused during compilation: '/MP' [-Werror,-Wunused-command-line-argument]
[10/42] Building RC object source\CMakeFiles\ze_loader.dir\ZeLoaderVersion.rc.res
Microsoft (R) Windows (R) Resource Compiler Version 10.0.10011.16384
Copyright (C) Microsoft Corporation.  All rights reserved.

ninja: build stopped: subcommand failed.