xref: /aosp_15_r20/external/bazelbuild-rules_rust/crate_universe/private/vendor_utils.bzl (revision d4726bddaa87cc4778e7472feed243fa4b6c267f)
1"""Utility functions for use with the `crates_vendor` rule"""
2
3load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_file")
4load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe")
5
6_BUILDIFIER_VERSION = "7.1.1"
7_BUILDIFIER_URL_TEMPLATE = "https://github.com/bazelbuild/buildtools/releases/download/v{version}/{bin}"
8_BUILDIFIER_INTEGRITY = {
9    "buildifier-darwin-amd64": "sha256-d0YNlXr3oCi7GK223EP6ZLbgAGTkc+rINoq4pwOzp0M=",
10    "buildifier-darwin-arm64": "sha256-yZD0sDsn1qDYb/6TAUcypZwYurDE86TMVjS9OxYp/OM=",
11    "buildifier-linux-amd64": "sha256-VLfyzo8idhz60mRBbpEgVq6chkX1nrZYO4RrSGSh7oM=",
12    "buildifier-linux-arm64": "sha256-HZrx9pVqQ5/KKHii+/dguXyl3wD2aeXRlTvrDEYHrHE=",
13    "buildifier-windows-amd64.exe": "sha256-Mx2IPnyjbIu+KKHoUoqccRAvS+Yj+Tn6PSCk2PAEvqs=",
14}
15
16def crates_vendor_deps():
17    """Define dependencies of the `crates_vendor` rule
18
19    Returns:
20        list[struct(repo=str, is_dev_dep=bool)]: List of the dependency repositories.
21    """
22    direct_deps = []
23
24    for bin, integrity in _BUILDIFIER_INTEGRITY.items():
25        repo = "cargo_bazel.{}".format(bin)
26        maybe(
27            http_file,
28            name = repo,
29            urls = [_BUILDIFIER_URL_TEMPLATE.format(
30                bin = bin,
31                version = _BUILDIFIER_VERSION,
32            )],
33            integrity = integrity,
34            downloaded_file_path = "buildifier.exe" if bin.endswith(".exe") else "buildifier",
35            executable = True,
36        )
37        direct_deps.append(struct(repo = repo, is_dev_dep = False))
38
39    return direct_deps
40
41# buildifier: disable=unnamed-macro
42def crates_vendor_deps_targets():
43    """Define dependencies of the `crates_vendor` rule"""
44
45    native.config_setting(
46        name = "linux_amd64",
47        constraint_values = ["@platforms//os:linux", "@platforms//cpu:x86_64"],
48        visibility = ["//visibility:public"],
49    )
50
51    native.config_setting(
52        name = "linux_arm64",
53        constraint_values = ["@platforms//os:linux", "@platforms//cpu:arm64"],
54        visibility = ["//visibility:public"],
55    )
56
57    native.config_setting(
58        name = "macos_amd64",
59        constraint_values = ["@platforms//os:macos", "@platforms//cpu:x86_64"],
60        visibility = ["//visibility:public"],
61    )
62
63    native.config_setting(
64        name = "macos_arm64",
65        constraint_values = ["@platforms//os:macos", "@platforms//cpu:arm64"],
66        visibility = ["//visibility:public"],
67    )
68
69    native.config_setting(
70        name = "windows",
71        constraint_values = ["@platforms//os:windows"],
72        visibility = ["//visibility:public"],
73    )
74
75    native.alias(
76        name = "buildifier",
77        actual = select({
78            ":linux_amd64": "@cargo_bazel.buildifier-linux-amd64//file",
79            ":linux_arm64": "@cargo_bazel.buildifier-linux-arm64//file",
80            ":macos_amd64": "@cargo_bazel.buildifier-darwin-amd64//file",
81            ":macos_arm64": "@cargo_bazel.buildifier-darwin-arm64//file",
82            ":windows": "@cargo_bazel.buildifier-windows-amd64.exe//file",
83        }),
84        visibility = ["//visibility:public"],
85    )
86