`crate_universe`: Make module extension restarts less expensive. (#2691)

This PR reduces the number of expensive module extension implementation
restarts in combination with multiple `from_cargo` configurations.

As each configuration processing calls `module_ctx.path` (which can and
will cause restarts), we executed _generate_hub_and_spokes (i.e.
`cargo-bazel`) _a lot_ and then threw that away on the next restart.
Triggering `module_ctx.path` early is therefore a significant
performance optimization.

On our repository, this gives us a 10sec speedup on module extension
processing (local M1 mac, nothing happening in parallel), see our
[MODULE.bazel](https://github.com/github/codeql/blob/main/MODULE.bazel)
if you're interested in what we're doing.

This excessive restarting also exposed an upstream bazel bug on Windows
2019, where bazel spuriously fails to clean up the working directory
(c.f. https://github.com/bazelbuild/bazel/issues/22710).

Co-authored-by: Daniel Wagner-Hall <dwagnerhall@apple.com>
2 files changed
tree: 3686852ade1608ccd74e2742c63b33da0e036df9
  1. .bazelci/
  2. .bcr/
  3. .github/
  4. bindgen/
  5. cargo/
  6. crate_universe/
  7. docs/
  8. examples/
  9. ffi/
  10. nix/
  11. proto/
  12. rust/
  13. test/
  14. tools/
  15. util/
  16. wasm_bindgen/
  17. .bazelignore
  18. .bazelrc
  19. .clang-format
  20. .envrc
  21. .gitattributes
  22. .gitignore
  23. .prettierrc.toml
  24. .rustfmt.toml
  25. ARCHITECTURE.md
  26. AUTHORS
  27. BUILD.bazel
  28. CODEOWNERS
  29. COMPATIBILITY.md
  30. CONTRIBUTING.md
  31. CONTRIBUTORS
  32. LICENSE.txt
  33. MODULE.bazel
  34. README.md
  35. version.bzl
  36. WORKSPACE.bazel
README.md

Rust Rules

  • Postsubmit Build status

Overview

This repository provides rules for building Rust projects with Bazel.

Community

General discussions and announcements take place in the GitHub Discussions, but there are additional places where community members gather to discuss rules_rust.

Documentation

Please refer to the full documentation.