diff --git a/rust/extensions.bzl b/rust/extensions.bzl index ce9c43cba6..b441472fda 100644 --- a/rust/extensions.bzl +++ b/rust/extensions.bzl @@ -139,6 +139,7 @@ def _rust_impl(module_ctx): rust_analyzer_version = toolchain.rust_analyzer_version, sha256s = toolchain.sha256s, extra_target_triples = toolchain.extra_target_triples, + opt_level = toolchain.opt_level if toolchain.opt_level else None, strip_level = toolchain.strip_level if toolchain.strip_level else None, urls = toolchain.urls, versions = toolchain.versions, @@ -270,6 +271,9 @@ _RUST_TOOLCHAIN_TAG = tag_class( "extra_target_triples": attr.string_list( default = DEFAULT_EXTRA_TARGET_TRIPLES, ), + "opt_level": attr.string_dict( + doc = "Rustc optimization levels. For more details see the documentation for `rust_toolchain.opt_level`.", + ), "rust_analyzer_version": attr.string( doc = "The version of Rustc to pair with rust-analyzer.", ), diff --git a/rust/private/repositories.bzl b/rust/private/repositories.bzl index 709ab3db5a..97accf7782 100644 --- a/rust/private/repositories.bzl +++ b/rust/private/repositories.bzl @@ -63,6 +63,7 @@ def rust_register_toolchains( extra_target_triples = DEFAULT_EXTRA_TARGET_TRIPLES, extra_rustc_flags = None, extra_exec_rustc_flags = None, + opt_level = None, strip_level = None, urls = DEFAULT_STATIC_RUST_URL_TEMPLATES, versions = _RUST_TOOLCHAIN_VERSIONS, @@ -100,6 +101,7 @@ def rust_register_toolchains( extra_target_triples (list, optional): Additional rust-style targets that rust toolchains should support. extra_rustc_flags (dict, list, optional): Dictionary of target triples to list of extra flags to pass to rustc in non-exec configuration. extra_exec_rustc_flags (dict, list, optional): Dictionary of target triples to list of extra flags to pass to rustc in exec configuration. + opt_level (dict, optional): Rustc optimization levels. For more details see the documentation for `rust_toolchain.opt_level`. strip_level (dict, dict, optional): Dictionary of target triples to strip config. urls (list, optional): A list of mirror urls containing the tools from the Rust-lang static file server. These must contain the '{}' used to substitute the tool being fetched (using .format). versions (list, optional): A list of toolchain versions to download. This parameter only accepts one versions @@ -168,6 +170,9 @@ def rust_register_toolchains( # Rust toolchains per exec triple for exec_triple, name in toolchain_triples.items(): + extra = extra_target_triples.keys() if type(extra_target_triples) == "dict" else extra_target_triples + opt_level_by_triple = {t: opt_level for t in depset([exec_triple] + list(extra)).to_list()} if opt_level else None + maybe( rust_repository_set, name = name, @@ -180,6 +185,7 @@ def rust_register_toolchains( rustfmt_version = rustfmt_version, extra_rustc_flags = extra_rustc_flags, extra_exec_rustc_flags = extra_exec_rustc_flags, + opt_level = opt_level_by_triple, strip_level = strip_level, sha256s = sha256s, urls = urls,