Bazel fails to build any C/C++ code, even when not using clang-cl on Windows, if llvm 11.0.0 rc2 is installed.
Following error is generated:
ERROR: C:/users/user/_bazel_user/zqksaod7/external/local_config_cc/BUILD:273:24: unterminated string literal at eol
ERROR: C:/users/user/_bazel_user/zqksaod7/external/local_config_cc/BUILD:274:1: syntax error at 'Target': expected ,
ERROR: C:/users/user/_bazel_user/zqksaod7/external/local_config_cc/BUILD:274:17: unterminated string literal at eol
ERROR: C:/users/user/_bazel_user/zqksaod7/external/local_config_cc/BUILD:275:20: unterminated string literal at eol
ERROR: C:/users/user/_bazel_user/zqksaod7/external/local_config_cc/BUILD:276:22: unterminated string literal at eol
ERROR: C:/users/user/_bazel_user/zqksaod7/external/local_config_cc/BUILD:288:9: unterminated string literal at eol
ERROR: C:/users/user/_bazel_user/zqksaod7/external/local_config_cc/BUILD:289:17: unterminated string literal at eol
ERROR: C:/anyProject/anyPackage/BUILD:1:11: Target '//anyProject/anyPackage:anyTarget' depends on toolchain '@local_config_cc//:cc-compiler-x64_windows', which cannot be found: no such target '@local_config_cc//:cc-compiler-x64_windows': target 'cc-compiler-x64_windows' not declared in package '' defined by C:/users/user/_bazel_user/zqksaod7/external/local_config_cc/BUILD'
The _cc_toolchain_config_ looks like this:
cc_toolchain_config(
name = "clang_cl_x64",
cpu = "x64_windows",
compiler = "clang-cl",
host_system_name = "local",
target_system_name = "local",
target_libc = "msvcrt",
abi_version = "local",
abi_libc_version = "local",
toolchain_identifier = "clang_cl_x64",
msvc_env_tmp = "C:\\Users\\user\\AppData\\Local\\Temp",
msvc_env_path = "C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\BuildTools\\VC\\Tools\\MSVC\\14.16.27023\\bin\\HostX64\\x64;C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\BuildTools\\MSBuild\\15.0\\bin\\Roslyn;C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v10.0A\\bin\\NETFX 4.6.1 Tools\\x64\\;C:\\Program Files (x86)\\Windows Kits\\10\\bin\\10.0.17763.0\\x64;C:\\Program Files (x86)\\Windows Kits\\10\\bin\\x64;C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\BuildTools\\\\MSBuild\\15.0\\bin;c:\\Windows\\Microsoft.NET\\Framework64\\v4.0.30319;C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\BuildTools\\Common7\\IDE\\;C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\BuildTools\\Common7\\Tools\\;;C:\\Windows\\system32",
msvc_env_include = "C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\BuildTools\\VC\\Tools\\MSVC\\14.16.27023\\include;C:\\Program Files (x86)\\Windows Kits\\NETFXSDK\\4.6.1\\include\\um;C:\\Program Files (x86)\\Windows Kits\\10\\include\\10.0.17763.0\\ucrt;C:\\Program Files (x86)\\Windows Kits\\10\\include\\10.0.17763.0\\shared;C:\\Program Files (x86)\\Windows Kits\\10\\include\\10.0.17763.0\\um;C:\\Program Files (x86)\\Windows Kits\\10\\include\\10.0.17763.0\\winrt;C:\\Program Files (x86)\\Windows Kits\\10\\include\\10.0.17763.0\\cppwinrt;C:\\Program Files\\LLVM\\lib\\clang\\11.0.0
Target:\\include",
msvc_env_lib = "C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\BuildTools\\VC\\Tools\\MSVC\\14.16.27023\\lib\\x64;C:\\Program Files (x86)\\Windows Kits\\NETFXSDK\\4.6.1\\lib\\um\\x64;C:\\Program Files (x86)\\Windows Kits\\10\\lib\\10.0.17763.0\\ucrt\\x64;C:\\Program Files (x86)\\Windows Kits\\10\\lib\\10.0.17763.0\\um\\x64;;C:\\Program Files\\LLVM\\lib\\clang\\11.0.0
Target:\\lib\\windows",
msvc_cl_path = "C:/Program Files/LLVM/bin/clang-cl.exe",
msvc_ml_path = "C:/Program Files (x86)/Microsoft Visual Studio/2017/BuildTools/VC/Tools/MSVC/14.16.27023/bin/HostX64/x64/ml64.exe",
msvc_link_path = "C:/Program Files/LLVM/bin/lld-link.exe",
msvc_lib_path = "C:/Program Files/LLVM/bin/llvm-lib.exe",
cxx_builtin_include_directories = [ "C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\BuildTools\\VC\\Tools\\MSVC\\14.16.27023\\include",
"C:\\Program Files (x86)\\Windows Kits\\NETFXSDK\\4.6.1\\include\\um",
"C:\\Program Files (x86)\\Windows Kits\\10\\include\\10.0.17763.0\\ucrt",
"C:\\Program Files (x86)\\Windows Kits\\10\\include\\10.0.17763.0\\shared",
"C:\\Program Files (x86)\\Windows Kits\\10\\include\\10.0.17763.0\\um",
"C:\\Program Files (x86)\\Windows Kits\\10\\include\\10.0.17763.0\\winrt",
"C:\\Program Files (x86)\\Windows Kits\\10\\include\\10.0.17763.0\\cppwinrt",
"C:\\Program Files\\LLVM\\lib\\clang\\11.0.0
Target:\\include"],
tool_paths = {
"ar": "C:/Program Files/LLVM/bin/llvm-lib.exe",
"ml": "C:/Program Files (x86)/Microsoft Visual Studio/2017/BuildTools/VC/Tools/MSVC/14.16.27023/bin/HostX64/x64/ml64.exe",
"cpp": "C:/Program Files/LLVM/bin/clang-cl.exe",
"gcc": "C:/Program Files/LLVM/bin/clang-cl.exe",
"gcov": "wrapper/bin/msvc_nop.bat",
"ld": "C:/Program Files/LLVM/bin/lld-link.exe",
"nm": "wrapper/bin/msvc_nop.bat",
"objcopy": "wrapper/bin/msvc_nop.bat",
"objdump": "wrapper/bin/msvc_nop.bat",
"strip": "wrapper/bin/msvc_nop.bat",
},
default_link_flags = ["/MACHINE:X64", "/DEFAULTLIB:clang_rt.builtins-x86_64.lib"],
dbg_mode_debug_flag = "/DEBUG",
fastbuild_mode_debug_flag = "/DEBUG",
)
n/a
Windows 10
bazel info release
?3.3.0
bazel info release
returns "development version" or "(@non-git)", tell us how you built Bazel.n/a
git remote get-url origin ; git rev-parse master ; git rev-parse HEAD
?n/a
Nothing so far.
Digging through how C:/users/user/_bazel_user/zqksaod7/external/local_config_cc/BUILD
is generated, I can trace the issue back to this line of code:
https://github.com/bazelbuild/bazel/blob/1f77972536c69c27ce3076de9f634e1a02a14a5e/tools/cpp/windows_cc_configure.bzl#L565
The split doesn't work, because the output of clang-cl -v
actually looks like this:
clang version 11.0.0
Target: x86_64-pc-windows-msvc
Thread model: posix
InstalledDir: c:\Program Files\LLVM\bin
The returned string is "11.0.0\nTarget:"
I guess the line would have to be extended like:
(python)
return result.stderr.strip().split("\n")[0].split(" ")[2]
That looks dangerous though.
Thanks for reporting this bug!
@meteorcloudy Thanks for fixing.
For anyone encountering the bug:
As workaround, rename _clang-cl.exe_ to _clang-cl-original.exe_ in your LLVM bin directory and place _clang-cl.bat_ with following content there:
```(bat)
@echo off
if [%1]==[] (
goto :runcompiler
)
if %1==-v (
echo clang version 11.0.0 foo
) else (
goto :runcompiler
)
goto :eof
:runcompiler
"c:\Program Files\LLVM\bin\clang-cl-original.exe" %*
exit /B %errorlevel%
```
Please note that the workaround above will not let you use LLVM itself to compile.
Meanwhile bazel 3.7 has been released and I highly recommend switching to that version to use LLVM without any workarounds.