Bazel: Windows: any build fails with clang-cl 11.0.0 rc2 installed, even when not using clang-cl

Created on 21 Sep 2020  路  3Comments  路  Source: bazelbuild/bazel

Description of the problem / feature request:

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",
)

Feature requests: what underlying problem are you trying to solve with this feature?

n/a

Bugs: what's the simplest, easiest way to reproduce this bug? Please provide a minimal example if possible.

  • Install MS VS build Tools
  • build minimum c++ binary sucessfully
  • Install llvm 11.0.0 rc
  • build same minimum binary again, using MS build tools.

What operating system are you running Bazel on?

Windows 10

What's the output of bazel info release?

3.3.0

If bazel info release returns "development version" or "(@non-git)", tell us how you built Bazel.

n/a

What's the output of git remote get-url origin ; git rev-parse master ; git rev-parse HEAD ?

n/a

Have you found anything relevant by searching the web?

Nothing so far.

Any other information, logs, or outputs that you want to share?

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.

P2 area-Windows bug

All 3 comments

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.

Was this page helpful?
0 / 5 - 0 ratings