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