1"""A custom rule that threats all its dependencies as direct dependencies.""" 2 3# buildifier: disable=bzl-visibility 4load("//rust/private:providers.bzl", "BuildInfo", "CrateInfo", "DepInfo", "DepVariantInfo") 5 6# buildifier: disable=bzl-visibility 7load("//rust/private:rustc.bzl", "rustc_compile_action") 8 9def _with_modified_crate_name_impl(ctx): 10 toolchain = ctx.toolchains[Label("//rust:toolchain_type")] 11 12 crate_root = ctx.attr.src.files.to_list()[0] 13 output_hash = repr(hash(crate_root.path)) 14 crate_name = ctx.label.name + "_my_custom_crate_suffix" 15 crate_type = "rlib" 16 17 rust_lib_name = "{prefix}{name}-{lib_hash}{extension}".format( 18 prefix = "lib", 19 name = crate_name, 20 lib_hash = output_hash, 21 extension = ".rlib", 22 ) 23 24 deps = [DepVariantInfo( 25 crate_info = dep[CrateInfo] if CrateInfo in dep else None, 26 dep_info = dep[DepInfo] if DepInfo in dep else None, 27 build_info = dep[BuildInfo] if BuildInfo in dep else None, 28 cc_info = dep[CcInfo] if CcInfo in dep else None, 29 ) for dep in ctx.attr.deps] 30 31 rust_lib = ctx.actions.declare_file(rust_lib_name) 32 return rustc_compile_action( 33 ctx = ctx, 34 attr = ctx.attr, 35 toolchain = toolchain, 36 crate_info_dict = dict( 37 name = crate_name, 38 type = crate_type, 39 root = crate_root, 40 srcs = ctx.attr.src.files, 41 deps = depset(deps), 42 proc_macro_deps = depset([]), 43 aliases = {}, 44 output = rust_lib, 45 owner = ctx.label, 46 edition = "2018", 47 compile_data = depset([]), 48 compile_data_targets = depset([]), 49 rustc_env = {}, 50 is_test = False, 51 ), 52 output_hash = output_hash, 53 ) 54 55with_modified_crate_name = rule( 56 implementation = _with_modified_crate_name_impl, 57 attrs = { 58 "deps": attr.label_list(), 59 "src": attr.label( 60 allow_single_file = [".rs"], 61 ), 62 "_cc_toolchain": attr.label( 63 default = Label("@bazel_tools//tools/cpp:current_cc_toolchain"), 64 ), 65 "_error_format": attr.label( 66 default = Label("//:error_format"), 67 ), 68 "_process_wrapper": attr.label( 69 default = Label("//util/process_wrapper"), 70 executable = True, 71 allow_single_file = True, 72 cfg = "exec", 73 ), 74 }, 75 toolchains = [ 76 "@rules_rust//rust:toolchain_type", 77 "@bazel_tools//tools/cpp:toolchain_type", 78 ], 79 fragments = ["cpp"], 80) 81