Skip to content

Commit dfe2ba8

Browse files
committed
Support annotation link dependencies
1 parent 97b16a5 commit dfe2ba8

4 files changed

Lines changed: 28 additions & 0 deletions

File tree

rs/extensions.bzl

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -340,6 +340,8 @@ crate.annotation(
340340
deps = annotation.deps,
341341
crate_tags = annotation.tags,
342342
deps_select = _select(feature_resolutions.deps),
343+
link_deps = annotation.link_deps,
344+
link_deps_select = annotation.link_deps_select,
343345
aliases = feature_resolutions.aliases,
344346
crate_features = annotation.crate_features,
345347
crate_features_select = _select(feature_resolutions.features_enabled),
@@ -1006,6 +1008,12 @@ _annotation = tag_class(
10061008
"deps": attr.label_list(
10071009
doc = "A list of labels to add to a crate's `rust_library::deps` attribute.",
10081010
),
1011+
"link_deps": attr.string_list(
1012+
doc = "Labels to add to a crate's `rust_library::link_deps` attribute.",
1013+
),
1014+
"link_deps_select": attr.string_list_dict(
1015+
doc = "Labels to add to a crate's `rust_library::link_deps` attribute, keyed by platform triplet.",
1016+
),
10091017
"tags": attr.string_list(
10101018
doc = "A list of tags to add to a crate's generated targets.",
10111019
),

rs/private/annotations.bzl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ def _crate_annotation(
1414
build_script_tags = [],
1515
data = [],
1616
deps = [],
17+
link_deps = [],
18+
link_deps_select = {},
1719
tags = [],
1820
crate_features = [],
1921
crate_features_select = {},
@@ -42,6 +44,8 @@ def _crate_annotation(
4244
build_script_tags = build_script_tags,
4345
data = data,
4446
deps = deps,
47+
link_deps = link_deps,
48+
link_deps_select = link_deps_select,
4549
tags = tags,
4650
crate_features = crate_features,
4751
crate_features_select = crate_features_select,

rs/private/repository_utils.bzl

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,9 @@ _RUST_CRATE_MACRO_CALL = """{indent}rust_crate(
176176
{indent} deps = [
177177
{indent} {deps}
178178
{indent} ]{extra_deps}{conditional_deps},
179+
{indent} link_deps = [
180+
{indent} {link_deps}
181+
{indent} ]{conditional_link_deps},
179182
{indent} data = [
180183
{indent} {data}
181184
{indent} ],
@@ -220,6 +223,11 @@ def render_rust_crate_call(attr, values, bazel_metadata = {}, extra_deps = "", i
220223
rustc_flags, conditional_rustc_flags = render_select(attr.rustc_flags, attr.rustc_flags_select, use_legacy_rules_rust_platforms)
221224
deps, conditional_deps = render_select(attr.deps + bazel_metadata.get("deps", []), attr.deps_select, use_legacy_rules_rust_platforms)
222225
build_script_env_files = getattr(attr, "build_script_env_files", []) + ["cargo_toml_env_vars.env"]
226+
link_deps, conditional_link_deps = render_select(
227+
getattr(attr, "link_deps", []),
228+
getattr(attr, "link_deps_select", {}),
229+
use_legacy_rules_rust_platforms,
230+
)
223231

224232
conditional_build_script_env = render_select_build_script_env(attr.build_script_env_select, use_legacy_rules_rust_platforms)
225233

@@ -250,6 +258,8 @@ def render_rust_crate_call(attr, values, bazel_metadata = {}, extra_deps = "", i
250258
deps = list_indent.join(['"%s"' % d for d in sorted(deps)]),
251259
extra_deps = extra_deps,
252260
conditional_deps = " + " + conditional_deps if conditional_deps else "",
261+
link_deps = list_indent.join(['"%s"' % d for d in sorted(link_deps)]),
262+
conditional_link_deps = " + " + conditional_link_deps if conditional_link_deps else "",
253263
data = list_indent.join(['"%s"' % str(d) for d in attr.data]),
254264
extra_compile_data_attr = extra_compile_data_attr,
255265
crate_features = repr(sorted(crate_features)),
@@ -322,6 +332,8 @@ rust_crate_attrs = {
322332
"data": attr.label_list(),
323333
"deps": attr.label_list(),
324334
"deps_select": _label_list_dict(),
335+
"link_deps": attr.string_list(),
336+
"link_deps_select": attr.string_list_dict(),
325337
"aliases": attr.string_dict(),
326338
"crate_features": attr.string_list(),
327339
"crate_features_select": attr.string_list_dict(),

rs/rust_crate.bzl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ def rust_crate(
2121
version,
2222
aliases,
2323
deps,
24+
link_deps,
2425
data,
2526
crate_features,
2627
triples,
@@ -205,8 +206,10 @@ def rust_crate(
205206
)
206207

207208
if is_proc_macro:
209+
# rust_proc_macro intentionally does not support link_deps.
208210
(_rust_proc_macro if skip_deps_verification else rust_proc_macro)(**kwargs)
209211
else:
212+
kwargs["link_deps"] = link_deps
210213
(_rust_library if skip_deps_verification else rust_library)(**kwargs)
211214

212215
binary_lib_dep = [name] if has_lib else []
@@ -216,6 +219,7 @@ def rust_crate(
216219
compile_data = compile_data,
217220
aliases = aliases,
218221
deps = binary_lib_dep + deps,
222+
link_deps = link_deps,
219223
data = data,
220224
crate_features = crate_features,
221225
crate_root = crate_root,

0 commit comments

Comments
 (0)