"""A custom rule that threats all its dependencies as direct dependencies.""" # buildifier: disable=bzl-visibility load("//rust/private:providers.bzl", "BuildInfo", "CrateInfo", "DepInfo", "DepVariantInfo") # buildifier: disable=bzl-visibility load("//rust/private:rustc.bzl", "rustc_compile_action") def _with_modified_crate_name_impl(ctx): toolchain = ctx.toolchains[Label("//rust:toolchain_type")] crate_root = ctx.attr.src.files.to_list()[0] output_hash = repr(hash(crate_root.path)) crate_name = ctx.label.name + "_my_custom_crate_suffix" crate_type = "rlib" rust_lib_name = "{prefix}{name}-{lib_hash}{extension}".format( prefix = "lib", name = crate_name, lib_hash = output_hash, extension = ".rlib", ) deps = [DepVariantInfo( crate_info = dep[CrateInfo] if CrateInfo in dep else None, dep_info = dep[DepInfo] if DepInfo in dep else None, build_info = dep[BuildInfo] if BuildInfo in dep else None, cc_info = dep[CcInfo] if CcInfo in dep else None, ) for dep in ctx.attr.deps] rust_lib = ctx.actions.declare_file(rust_lib_name) return rustc_compile_action( ctx = ctx, attr = ctx.attr, toolchain = toolchain, crate_info_dict = dict( name = crate_name, type = crate_type, root = crate_root, srcs = ctx.attr.src.files, deps = depset(deps), proc_macro_deps = depset([]), aliases = {}, output = rust_lib, owner = ctx.label, edition = "2018", compile_data = depset([]), compile_data_targets = depset([]), rustc_env = {}, is_test = False, ), output_hash = output_hash, ) with_modified_crate_name = rule( implementation = _with_modified_crate_name_impl, attrs = { "deps": attr.label_list(), "src": attr.label( allow_single_file = [".rs"], ), "_cc_toolchain": attr.label( default = Label("@bazel_tools//tools/cpp:current_cc_toolchain"), ), "_error_format": attr.label( default = Label("//:error_format"), ), "_process_wrapper": attr.label( default = Label("//util/process_wrapper"), executable = True, allow_single_file = True, cfg = "exec", ), }, toolchains = [ "@rules_rust//rust:toolchain_type", "@bazel_tools//tools/cpp:toolchain_type", ], fragments = ["cpp"], )