Clangd, clang-format, and clang-tidy are required to be in distribution since 1.4.0
Problem
Updating from 1.3.0 to 1.4.0 requires an llvm distribution that contains clangd, clang-format, and clang-tidy
Example error output:
ERROR: /home/runner/.cache/bazel/_bazel_runner/05e35152b9f4d639f0caf72c58272633/sandbox/processwrapper-sandbox/1/execroot/_main/_tmp/20b0fbcfb3bd545ee034011c9840c284/_bazel_runner/3a2f3221680ba9580bde03029baa3e75/external/rules_rust++i+rules_rust_tinyjson/BUILD.bazel:4:37: Compiling Rust (without process_wrapper) rlib tinyjson (4 files) [for tool] failed: missing input file '@@toolchains_llvm++llvm+llvm_toolchain//:bin/clang-format'
ERROR: /home/runner/.cache/bazel/_bazel_runner/05e35152b9f4d639f0caf72c58272633/sandbox/processwrapper-sandbox/1/execroot/_main/_tmp/20b0fbcfb3bd545ee034011c9840c284/_bazel_runner/3a2f3221680ba9580bde03029baa3e75/external/rules_rust++i+rules_rust_tinyjson/BUILD.bazel:4:37: Compiling Rust (without process_wrapper) rlib tinyjson (4 files) [for tool] failed: missing input file '@@toolchains_llvm++llvm+llvm_toolchain//:bin/clang-tidy'
ERROR: /home/runner/.cache/bazel/_bazel_runner/05e35152b9f4d639f0caf72c58272633/sandbox/processwrapper-sandbox/1/execroot/_main/_tmp/20b0fbcfb3bd545ee034011c9840c284/_bazel_runner/3a2f3221680ba9580bde03029baa3e75/external/rules_rust++i+rules_rust_tinyjson/BUILD.bazel:4:37: Compiling Rust (without process_wrapper) rlib tinyjson (4 files) [for tool] failed: missing input file '@@toolchains_llvm++llvm+llvm_toolchain//:bin/clangd'
ERROR: /home/runner/.cache/bazel/_bazel_runner/05e35152b9f4d639f0caf72c58272633/sandbox/processwrapper-sandbox/1/execroot/_main/_tmp/20b0fbcfb3bd545ee034011c9840c284/_bazel_runner/3a2f3221680ba9580bde03029baa3e75/external/rules_rust++i+rules_rust_tinyjson/BUILD.bazel:4:37: Compiling Rust (without process_wrapper) rlib tinyjson (4 files) [for tool] failed: 3 input file(s) do not exist
Likely cause
https://github.com/bazel-contrib/toolchains_llvm/pull/463
Prior to this pr, clang-format and clang-tidy were available via @llvm_toolchain_llvm//:bin/clang-format and @llvm_toolchain_llvm//:bin/clang-tidy, but were not requirements.
Discussion
If this is what we want, we should update document this and update some common "slimmer" llvm distributions, such as:
- https://steven.casagrande.io/posts/2024/building-macos-llvm-package/
- https://github.com/MaterializeInc/toolchains
- https://github.com/dzbarsky/static-clang
Instead of documenting additional requirements, we should probably just make the logic at https://github.com/bazel-contrib/toolchains_llvm/blob/4c3d6cfc62d4639106d807476aa1702dfc2c884b/toolchain/internal/configure.bzl#L125-L130 more intelligent by testing for existence. Would you be interested in sending a PR for this?
Sure, I'll take a look this week
@scasagrande have you had time to check this out ? We just faced this issue last week because we also use static-clang from dzbarsky.
While static-clang has a trick to add empty binaries in their archive, this would be an even better fix so that the tools are dynamic according to the pulled distribution
Here was my first attempt, but it doesn't work: https://github.com/bazel-contrib/toolchains_llvm/pull/483
See the comments as to why
I'm actually a confused as to why clang-format and clang-tidy were added in #463 when they were previously accessible via @llvm_toolchain_llvm//:clang-format and @llvm_toolchain_llvm//:clang-tidy https://github.com/bazel-contrib/toolchains_llvm/blob/23721c98423f4e467236709e1e75b43b3cdfc3cf/toolchain/BUILD.llvm_repo#L149-L157
and clangd should be accessible via the general export: https://github.com/bazel-contrib/toolchains_llvm/blob/23721c98423f4e467236709e1e75b43b3cdfc3cf/toolchain/BUILD.llvm_repo#L20