xref: /aosp_15_r20/external/bazelbuild-rules_rust/bindgen/3rdparty/crates/alias_rules.bzl (revision d4726bddaa87cc4778e7472feed243fa4b6c267f)
1"""Alias that transitions its target to `compilation_mode=opt`.  Use `transition_alias="opt"` to enable."""
2
3load("@rules_cc//cc:defs.bzl", "CcInfo")
4load("@rules_rust//rust:rust_common.bzl", "COMMON_PROVIDERS")
5
6def _transition_alias_impl(ctx):
7    # `ctx.attr.actual` is a list of 1 item due to the transition
8    providers = [ctx.attr.actual[0][provider] for provider in COMMON_PROVIDERS]
9    if CcInfo in ctx.attr.actual[0]:
10        providers.append(ctx.attr.actual[0][CcInfo])
11    return providers
12
13def _change_compilation_mode(compilation_mode):
14    def _change_compilation_mode_impl(_settings, _attr):
15        return {
16            "//command_line_option:compilation_mode": compilation_mode,
17        }
18
19    return transition(
20        implementation = _change_compilation_mode_impl,
21        inputs = [],
22        outputs = [
23            "//command_line_option:compilation_mode",
24        ],
25    )
26
27def _transition_alias_rule(compilation_mode):
28    return rule(
29        implementation = _transition_alias_impl,
30        provides = COMMON_PROVIDERS,
31        attrs = {
32            "actual": attr.label(
33                mandatory = True,
34                doc = "`rust_library()` target to transition to `compilation_mode=opt`.",
35                providers = COMMON_PROVIDERS,
36                cfg = _change_compilation_mode(compilation_mode),
37            ),
38            "_allowlist_function_transition": attr.label(
39                default = "@bazel_tools//tools/allowlists/function_transition_allowlist",
40            ),
41        },
42        doc = "Transitions a Rust library crate to the `compilation_mode=opt`.",
43    )
44
45transition_alias_dbg = _transition_alias_rule("dbg")
46transition_alias_fastbuild = _transition_alias_rule("fastbuild")
47transition_alias_opt = _transition_alias_rule("opt")
48