Remove all usages of BlazeDirectories#(getExecRoot()|getOutputPath()) from Bazel

Bazel's execution root path looks as follows: output_base/execroot/workspace_name. That is one needs to know the workspace name when constructing it. Bazel only knows the workspace name after/during the loading phase however BlazeDirectories is constructed before that. So BlazeDirectories.getExecRoot() returns a path to a folder that's not the exec root (it takes the name of the directory that contains the WORKSPACE file as the workspace name) and this leads to all kinds of bugs as one can imagine.

Thus I removed all calls to BlazeDirectories.(getExecRoot()|getOutputPath()) in Bazel and replaced them with calls to BlazeDirectories.getExecRoot(workspaceName).

What this change does:
 - All artifacts in Bazel agree on one exec root.
 - Bazel will no longer create two execroot directories on disk.
 - Renamed getExecRoot to getBlazeExecRoot() and updated the code to return null when called in Bazel in order to prevent future wrong use of this method.
 - Resolved a TODO in BlazeDirectories where we had code to support the workspace path being null.

RELNOTES: None.
PiperOrigin-RevId: 253790673
20 files changed
tree: 440f814f504415ff1309b933e592b3ddedeb451e
  1. .bazelci/
  2. examples/
  3. scripts/
  4. site/
  5. src/
  6. third_party/
  7. tools/
  8. .bazelrc
  9. .gitattributes
  10. .gitignore
  11. AUTHORS
  12. BUILD
  13. CHANGELOG.md
  14. CODEOWNERS
  15. combine_distfiles.py
  16. combine_distfiles_to_tar.sh
  17. compile.sh
  18. CONTRIBUTING.md
  19. CONTRIBUTORS
  20. distdir.bzl
  21. ISSUE_TEMPLATE.md
  22. LICENSE
  23. README.md
  24. WORKSPACE
README.md

Bazel

{Fast, Correct} - Choose two

Build and test software of any size, quickly and reliably.

  • Speed up your builds and tests: Bazel only rebuilds what is necessary. With advanced local and distributed caching, optimized dependency analysis and parallel execution, you get fast and incremental builds.

  • One tool, multiple languages: Build and test Java, C++, Android, iOS, Go, and a wide variety of other language platforms. Bazel runs on Windows, macOS, and Linux.

  • Scalable: Bazel helps you scale your organization, codebase, and continuous integration solution. It handles codebases of any size, in multiple repositories or a huge monorepo.

  • Extensible to your needs: Easily add support for new languages and platforms with Bazel's familiar extension language. Share and re-use language rules written by the growing Bazel community.

Getting Started

Documentation

Contributing to Bazel

See CONTRIBUTING.md

Build status

Bazel is released in ‘Beta’. See the product roadmap to learn about the path toward a stable 1.0 release.