aboutsummaryrefslogtreecommitdiff
path: root/third-party/bazel/alias_rules.bzl
diff options
context:
space:
mode:
Diffstat (limited to 'third-party/bazel/alias_rules.bzl')
-rw-r--r--third-party/bazel/alias_rules.bzl47
1 files changed, 47 insertions, 0 deletions
diff --git a/third-party/bazel/alias_rules.bzl b/third-party/bazel/alias_rules.bzl
new file mode 100644
index 00000000..14b04c12
--- /dev/null
+++ b/third-party/bazel/alias_rules.bzl
@@ -0,0 +1,47 @@
+"""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")