Skip to content

Commit 98e494e

Browse files
authored
Speedup collect_deps (#3634)
The key insight is that `deps` and `proc_macro_deps` must be disjoint, so the depset.to_list is not doing any deduping. With that out of the way, we do a bit of code rearranging to avoid converting our lists of deps to depsets too early; in general it is best to construct the output depsets when creating the providers, not in the middle of the rule implementations. Before: <img width="1682" height="99" alt="image" src="https://github.com/user-attachments/assets/eb0f9080-f5d5-4ab0-bc1e-1698dfc5d888" /> After: <img width="1681" height="113" alt="image" src="https://github.com/user-attachments/assets/fc5c8344-3819-4b92-ac43-3f088a3b2f1a" />
1 parent e05a22c commit 98e494e

File tree

11 files changed

+43
-35
lines changed

11 files changed

+43
-35
lines changed

extensions/prost/private/prost.bzl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -209,8 +209,8 @@ def _compile_rust(
209209
type = "rlib",
210210
root = src,
211211
srcs = depset([src]),
212-
deps = depset(deps),
213-
proc_macro_deps = depset([]),
212+
deps = deps,
213+
proc_macro_deps = [],
214214
aliases = {},
215215
output = lib,
216216
metadata = rmeta,

extensions/protobuf/proto.bzl

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -215,11 +215,9 @@ def _rust_proto_compile(protos, descriptor_sets, imports, crate_name, ctx, is_gr
215215
metadata_supports_pipelining = can_use_metadata_for_pipelining(toolchain, "rlib")
216216

217217
# Gather all dependencies for compilation
218-
compile_action_deps = depset(
219-
transform_deps(
220-
compile_deps +
221-
proto_toolchain.grpc_compile_deps if is_grpc else proto_toolchain.proto_compile_deps,
222-
),
218+
compile_action_deps = transform_deps(
219+
compile_deps +
220+
proto_toolchain.grpc_compile_deps if is_grpc else proto_toolchain.proto_compile_deps,
223221
)
224222

225223
providers = rustc_compile_action(
@@ -232,7 +230,7 @@ def _rust_proto_compile(protos, descriptor_sets, imports, crate_name, ctx, is_gr
232230
root = lib_rs,
233231
srcs = depset(srcs),
234232
deps = compile_action_deps,
235-
proc_macro_deps = depset([]),
233+
proc_macro_deps = [],
236234
aliases = {},
237235
output = rust_lib,
238236
metadata = rust_metadata,

extensions/wasm_bindgen/private/wasm_bindgen_test.bzl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,8 +122,8 @@ def _rust_wasm_bindgen_test_impl(ctx):
122122
type = crate_type,
123123
root = crate.root,
124124
srcs = depset(srcs, transitive = [crate.srcs]),
125-
deps = depset(deps, transitive = [crate.deps]),
126-
proc_macro_deps = depset(proc_macro_deps, transitive = [crate.proc_macro_deps]),
125+
deps = depset(deps, transitive = [crate.deps]).to_list(),
126+
proc_macro_deps = depset(proc_macro_deps, transitive = [crate.proc_macro_deps]).to_list(),
127127
aliases = {},
128128
output = output,
129129
rustc_output = generate_output_diagnostics(ctx, output),

rust/private/clippy.bzl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,8 +116,8 @@ def _clippy_aspect_impl(target, ctx):
116116
cc_toolchain, feature_configuration = find_cc_toolchain(ctx)
117117

118118
dep_info, build_info, _ = collect_deps(
119-
deps = crate_info.deps,
120-
proc_macro_deps = crate_info.proc_macro_deps,
119+
deps = crate_info.deps.to_list(),
120+
proc_macro_deps = crate_info.proc_macro_deps.to_list(),
121121
aliases = crate_info.aliases,
122122
)
123123

rust/private/rust.bzl

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -221,8 +221,8 @@ def _rust_library_common(ctx, crate_type):
221221
type = crate_type,
222222
root = crate_root,
223223
srcs = depset(srcs),
224-
deps = depset(deps),
225-
proc_macro_deps = depset(proc_macro_deps),
224+
deps = deps,
225+
proc_macro_deps = proc_macro_deps,
226226
aliases = ctx.attr.aliases,
227227
output = rust_lib,
228228
rustc_output = generate_output_diagnostics(ctx, rust_lib),
@@ -286,8 +286,8 @@ def _rust_binary_impl(ctx):
286286
type = ctx.attr.crate_type,
287287
root = crate_root,
288288
srcs = depset(srcs),
289-
deps = depset(deps),
290-
proc_macro_deps = depset(proc_macro_deps),
289+
deps = deps,
290+
proc_macro_deps = proc_macro_deps,
291291
aliases = ctx.attr.aliases,
292292
output = output,
293293
rustc_output = generate_output_diagnostics(ctx, output),
@@ -418,8 +418,8 @@ def _rust_test_impl(ctx):
418418
type = crate_type,
419419
root = crate.root,
420420
srcs = depset(srcs),
421-
deps = depset(deps, transitive = [crate.deps]),
422-
proc_macro_deps = depset(proc_macro_deps, transitive = [crate.proc_macro_deps]),
421+
deps = depset(deps, transitive = [crate.deps]).to_list(),
422+
proc_macro_deps = depset(proc_macro_deps, transitive = [crate.proc_macro_deps]).to_list(),
423423
aliases = aliases,
424424
output = output,
425425
rustc_output = generate_output_diagnostics(ctx, output),
@@ -484,8 +484,8 @@ def _rust_test_impl(ctx):
484484
type = crate_type,
485485
root = crate_root,
486486
srcs = depset(srcs),
487-
deps = depset(deps),
488-
proc_macro_deps = depset(proc_macro_deps),
487+
deps = deps,
488+
proc_macro_deps = proc_macro_deps,
489489
aliases = ctx.attr.aliases,
490490
output = output,
491491
rustc_output = generate_output_diagnostics(ctx, output),

rust/private/rustc.bzl

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,7 @@ def collect_deps(
252252
transitive_metadata_outputs = []
253253

254254
crate_deps = []
255-
for dep in depset(transitive = [deps, proc_macro_deps]).to_list():
255+
for dep in deps + proc_macro_deps:
256256
crate_group = None
257257

258258
if type(dep) == "Target" and rust_common.crate_group_info in dep:
@@ -1223,7 +1223,13 @@ def rustc_compile_action(
12231223
- (DepInfo): The transitive dependencies of this crate.
12241224
- (DefaultInfo): The output file for this crate, and its runfiles.
12251225
"""
1226-
crate_info = rust_common.create_crate_info(**crate_info_dict)
1226+
deps = crate_info_dict.pop("deps")
1227+
proc_macro_deps = crate_info_dict.pop("proc_macro_deps")
1228+
crate_info = rust_common.create_crate_info(
1229+
deps = depset(deps),
1230+
proc_macro_deps = depset(proc_macro_deps),
1231+
**crate_info_dict
1232+
)
12271233

12281234
build_metadata = crate_info_dict.get("metadata", None)
12291235
rustc_output = crate_info_dict.get("rustc_output", None)
@@ -1243,8 +1249,8 @@ def rustc_compile_action(
12431249
experimental_use_cc_common_link = toolchain._experimental_use_cc_common_link
12441250

12451251
dep_info, build_info, linkstamps = collect_deps(
1246-
deps = crate_info_dict["deps"],
1247-
proc_macro_deps = crate_info_dict["proc_macro_deps"],
1252+
deps = deps,
1253+
proc_macro_deps = proc_macro_deps,
12481254
aliases = crate_info_dict["aliases"],
12491255
)
12501256
extra_disabled_features = [RUST_LINK_CC_FEATURE]
@@ -1616,7 +1622,11 @@ def rustc_compile_action(
16161622
crate_info_dict.update({
16171623
"rustc_env": env,
16181624
})
1619-
crate_info = rust_common.create_crate_info(**crate_info_dict)
1625+
crate_info = rust_common.create_crate_info(
1626+
deps = depset(deps),
1627+
proc_macro_deps = depset(proc_macro_deps),
1628+
**crate_info_dict
1629+
)
16201630

16211631
if crate_info.type in ["staticlib", "cdylib"]:
16221632
# These rules are not supposed to be depended on by other rust targets, and

rust/private/rustdoc.bzl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,8 +98,8 @@ def rustdoc_compile_action(
9898
cc_toolchain, feature_configuration = find_cc_toolchain(ctx)
9999

100100
dep_info, build_info, _ = collect_deps(
101-
deps = crate_info.deps,
102-
proc_macro_deps = crate_info.proc_macro_deps,
101+
deps = crate_info.deps.to_list(),
102+
proc_macro_deps = crate_info.proc_macro_deps.to_list(),
103103
aliases = crate_info.aliases,
104104
)
105105

rust/private/unpretty.bzl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,8 +141,8 @@ def _rust_unpretty_aspect_impl(target, ctx):
141141
cc_toolchain, feature_configuration = find_cc_toolchain(ctx)
142142

143143
dep_info, build_info, _ = collect_deps(
144-
deps = crate_info.deps,
145-
proc_macro_deps = crate_info.proc_macro_deps,
144+
deps = crate_info.deps.to_list(),
145+
proc_macro_deps = crate_info.proc_macro_deps.to_list(),
146146
aliases = crate_info.aliases,
147147
)
148148
lint_files = []

test/unit/consistent_crate_name/with_modified_crate_name.bzl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,8 @@ def _with_modified_crate_name_impl(ctx):
4040
type = crate_type,
4141
root = crate_root,
4242
srcs = ctx.attr.src.files,
43-
deps = depset(deps),
44-
proc_macro_deps = depset([]),
43+
deps = deps,
44+
proc_macro_deps = [],
4545
aliases = {},
4646
output = rust_lib,
4747
owner = ctx.label,

test/unit/force_all_deps_direct/generator.bzl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,8 @@ def _generator_impl(ctx):
5656
type = crate_type,
5757
root = rs_file,
5858
srcs = depset([rs_file]),
59-
deps = depset(deps),
60-
proc_macro_deps = depset([]),
59+
deps = deps,
60+
proc_macro_deps = [],
6161
aliases = {},
6262
output = rust_lib,
6363
owner = ctx.label,

0 commit comments

Comments
 (0)