carbon-language / carbon-lang

Carbon Language's main repository: documents, design, implementation, and related tools. (NOTE: Carbon Language is experimental; see README)
http://docs.carbon-lang.dev/
Other
32.38k stars 1.48k forks source link

Change the bazel-out structure to avoid busybox symlinks. #4505

Closed jonmeow closed 2 weeks ago

jonmeow commented 2 weeks ago

As described in symlink_helpers.bzl, copied here for visibility:

Symlinking busybox things needs special logic.

This is because Bazel doesn't cache the actual symlink, resulting in essentially resolved symlinks being produced in place of the expected tool. As a consequence, we can't rely on the symlink name when dealing with busybox entries.

An example repro of this using a local build cache is:

bazel build //toolchain
bazel clean
bazel build //toolchain

We could in theory get reasonable behavior with ctx.actions.declare_symlink, but that's disallowed in our .bazelrc for cross-environment compatibility.

The particular approach here uses the Python script as a launching pad so that the busybox still receives an appropriate location in argv[0], allowing it to find other files in the lib directory. Arguments are inserted to get equivalent behavior as if symlink resolution had occurred.

The underlying bug is noted at: https://github.com/bazelbuild/bazel/issues/23620