bazelbuild / bazelbuild/rules_cc

Broken Auto Genreated CC Toolchain when Using ccache/clang

Open
#130 0 comments 0 reactions 0 assignees View on GitHub
P3
Dominant language
Starlark
Stars
247
Forks
196
PR merge metrics
No merged PRs in 30d

Description

### Description of the problem / feature request:

cc toolchain is not correctly generated when using ccache with clang, while ccache with gcc works.

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

```
chenhao@chenhao:~/bazel-ccache$ cat WORKSPACE
chenhao@chenhao:~/bazel-ccache$ cat BUILD
cc_binary(
name = "hello",
srcs = ["hello.cc"],
)
chenhao@chenhao:~/bazel-ccache$ cat hello.cc
int main() { return 0; }
chenhao@chenhao:~/bazel-ccache$ ls -alh tools
total 8.0K
drwxrwxr-x 2 chenhao chenhao 4.0K May 19 20:08 .
drwxrwxr-x 3 chenhao chenhao 4.0K May 19 20:10 ..
lrwxrwxrwx 1 chenhao chenhao 15 May 19 20:08 clang-12 -> /usr/bin/ccache
lrwxrwxrwx 1 chenhao chenhao 15 May 19 20:08 gcc-10 -> /usr/bin/ccache
chenhao@chenhao:~/bazel-ccache$ which ccache
/usr/bin/ccache
chenhao@chenhao:~/bazel-ccache$ which clang-12
/usr/bin/clang-12
chenhao@chenhao:~/bazel-ccache$ which gcc-10
/usr/bin/gcc-10

chenhao@chenhao:~/bazel-ccache$ CC=$(pwd)/tools/gcc-10 bazel build --sandbox_writable_path=$HOME/.ccache :all
INFO: Analyzed target //:hello (1 packages loaded, 12 targets configured).
INFO: Found 1 target...
Target //:hello up-to-date:
bazel-bin/hello
INFO: Elapsed time: 1.512s, Critical Path: 0.04s
INFO: 3 processes: 2 internal, 1 linux-sandbox.
INFO: Build completed successfully, 3 total actions

chenhao@chenhao:~/bazel-ccache$ CC=$(pwd)/tools/clang-12 bazel build --sandbox_writable_path=$HOME/.ccache :all
INFO: Analyzed target //:hello (1 packages loaded, 12 targets configured).
INFO: Found 1 target...
ERROR: /home/chenhao/bazel-ccache/BUILD:1:10: Compiling hello.cc failed: (Exit 1): ccache failed: error executing command /usr/bin/ccache -U_FORTIFY_SOURCE -fstack-protector -Wall -Wthread-safety -Wself-assign -Wunused-but-set-parameter -Wno-free-nonheap-object -fcolor-diagnostics -fno-omit-frame-pointer '-std=c++0x' -MD ... (remaining 21 arguments skipped)

Use --sandbox_debug to see verbose messages from the sandbox
/usr/bin/ccache: invalid option -- 'U'
Usage:
ccache [options]
...
```

### What operating system are you running Bazel on?

Ubuntu 20.04

### What's the output of `bazel info release`?

release 5.1.0. I also tried other 5.x and the latest 6.0-pre, all broken. 4.x does not have this issue.

### What version of rules_cc do you use? Can you paste the workspace rule used to fetch rules_cc? What other relevant dependencies does your project have?

I don't specify the rules_cc version by myself. My WORKSPACE is empty.

### What Bazel options do you use to trigger the issue? What C++ toolchain do you use?

See the "bugs" section

Contributor guide

Open the contributing guide

Research direction

Reproduce the failure using WORKSPACE, BUILD, hello.cc, and the tools/clang-12 symlink, then compare the generated GCC and Clang toolchain commands. Start by tracing how the ccache-wrapped compiler is invoked; done means the Clang build succeeds with ccache while preserving the working GCC case.

Written by the indexing model from the issue text.

Assessment

Tech stack
cpp, ubuntu
Domain
build-system, compilers
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.