Skip to content

Add root_path attribute for directory crate roots#4142

Open
krasimirgg wants to merge 5 commits into
bazelbuild:mainfrom
krasimirgg:jul26-root-path
Open

Add root_path attribute for directory crate roots#4142
krasimirgg wants to merge 5 commits into
bazelbuild:mainfrom
krasimirgg:jul26-root-path

Conversation

@krasimirgg

@krasimirgg krasimirgg commented Jul 9, 2026

Copy link
Copy Markdown
Collaborator

Allows specifying root_path when the crate root (srcs entrypoint) is a directory artifact (TreeArtifact). This enables rules_rust targets (rust_library, rust_binary, rust_test, etc.) to consume directory artifacts produced by upstream rules and correctly construct the path to the crate root (lib.rs / main.rs).

We use something like this internally to build standard libraries from sources distributed as .zip source archives: a custom rule extracts the contents into a generated directory artifact, which then the rust rules can consume as sources.

This may be helpful to achieve the request from #3757, where the user is trying to consume a directory of generated sources.

  • Adds root_path attribute to _COMMON_ATTRS and CrateInfo provider.
  • Updates rustc_compile_action argument construction (rustc.bzl) to join crate_info.root.path with root_path when crate_info.root.is_directory is true.
  • Adds a unit and build test case under test/root_path/ using a custom rule that packages its srcs as a directory artifact (TreeArtifact) and compiles a rust_library and rust_test from it.

I have taken special care in the rustc argument construction to ensure it is compatible with the new bazel path remapping guidelines.

While here, added a few checks in the rules for combinations of srcs, crate and crate_root attributes that don't make sense and would cause compilation to fail later anyways.

Allows specifying `root_path` when `root` (`crate_root` or `srcs` entrypoint) is a directory artifact (`TreeArtifact`). This enables rules_rust targets (`rust_library`, `rust_binary`, `rust_test`, etc.) to consume directory artifacts produced by upstream rules and correctly construct the path to the crate root (`lib.rs` / `main.rs`).

* Adds `root_path` attribute to `_COMMON_ATTRS` and `CrateInfo` provider.
* Updates `rustc_compile_action` argument construction (`rustc.bzl`) to join `crate_info.root.path` with `root_path` when `crate_info.root.is_directory` is true.
* Adds a unit and build test case under `test/root_path/` using a custom rule that packages its `srcs` as a directory artifact (`TreeArtifact`) and compiles a `rust_library` and `rust_test` from it.
@krasimirgg
krasimirgg marked this pull request as ready for review July 9, 2026 12:49
@krasimirgg
krasimirgg requested a review from slackito July 9, 2026 12:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant