48 lines
1.7 KiB
Python
48 lines
1.7 KiB
Python
"""Alias that transitions its target to `compilation_mode=opt`. Use `transition_alias="opt"` to enable."""
|
|
|
|
load("@rules_cc//cc:defs.bzl", "CcInfo")
|
|
load("@rules_rust//rust:rust_common.bzl", "COMMON_PROVIDERS")
|
|
|
|
def _transition_alias_impl(ctx):
|
|
# `ctx.attr.actual` is a list of 1 item due to the transition
|
|
providers = [ctx.attr.actual[0][provider] for provider in COMMON_PROVIDERS]
|
|
if CcInfo in ctx.attr.actual[0]:
|
|
providers.append(ctx.attr.actual[0][CcInfo])
|
|
return providers
|
|
|
|
def _change_compilation_mode(compilation_mode):
|
|
def _change_compilation_mode_impl(_settings, _attr):
|
|
return {
|
|
"//command_line_option:compilation_mode": compilation_mode,
|
|
}
|
|
|
|
return transition(
|
|
implementation = _change_compilation_mode_impl,
|
|
inputs = [],
|
|
outputs = [
|
|
"//command_line_option:compilation_mode",
|
|
],
|
|
)
|
|
|
|
def _transition_alias_rule(compilation_mode):
|
|
return rule(
|
|
implementation = _transition_alias_impl,
|
|
provides = COMMON_PROVIDERS,
|
|
attrs = {
|
|
"actual": attr.label(
|
|
mandatory = True,
|
|
doc = "`rust_library()` target to transition to `compilation_mode=opt`.",
|
|
providers = COMMON_PROVIDERS,
|
|
cfg = _change_compilation_mode(compilation_mode),
|
|
),
|
|
"_allowlist_function_transition": attr.label(
|
|
default = "@bazel_tools//tools/allowlists/function_transition_allowlist",
|
|
),
|
|
},
|
|
doc = "Transitions a Rust library crate to the `compilation_mode=opt`.",
|
|
)
|
|
|
|
transition_alias_dbg = _transition_alias_rule("dbg")
|
|
transition_alias_fastbuild = _transition_alias_rule("fastbuild")
|
|
transition_alias_opt = _transition_alias_rule("opt")
|