bazelbuild / rules_rust

Rust rules for Bazel
https://bazelbuild.github.io/rules_rust/
Apache License 2.0
656 stars 419 forks source link

Use `crate_name` to also match `crate_root`. #2824

Closed UebelAndre closed 3 weeks ago

UebelAndre commented 4 weeks ago

This allows targets to have special names that do not match their sources while still ensuring a root is found. I've encountered this when creating macros where I have a Rust target that is a side-effect and not the named target itself. E.g.

load("@rules_rust//rust:defs.bzl", "rust_binary")
load("//control/private:control.bzl", _control_binary = "control_binary")

def control_binary(
    name, 
    # ...
    **kwargs):

    rust_binary(
        name = name + "_bin",
        # ...
        **kwargs
    )

    _control_binary(
        name = name,
        bin = name + "_bin",
        # ...
        **kwargs
    )

Being able to specify crate_name will both ensure the binary is compiled with a cleaner name for the runtime and be able to do the nominal crate_root matching. The diff after this PR achieves the desired behavior.

--- before/defs.bzl 2024-08-31 12:41:24
+++ after/defs.bzl  2024-08-31 12:42:09
@@ -8,6 +8,7 @@

     rust_binary(
         name = name + "_bin",
+        crate_name = name,
         # ...
         **kwargs
     )