xref: /aosp_15_r20/external/skia/bazel/download_config_files.bzl (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1"""This module defines the download_config_files rule.
2
3   This allows external clients to get the configuration files that our custom
4   Bazel rules for repos like Freetype depend on.
5
6   Clients don't have to use this rule if they build those libraries their own
7   way or want to use their own custom configurations.
8
9   Skia doesn't use this rule directly, instead it uses a local_repository rule
10   to make those configs available while still being defined in the same repo.
11   Clients cannot use local_repository to refer to something in the Skia source
12   code though, thus the need for a way for them to get those independently.
13
14   TODO(kjlubick) Make this more hermetic by having a place to download (and verify)
15   the files from that is more robust.
16   """
17
18def _download_config_files_impl(repo_ctx):
19    # This will create one or more files in the [bazel sandbox]/external/[name] folder.
20    for dst, src in repo_ctx.attr.files.items():
21        # I'd prefer to download a single zip that we can verify with sha256,
22        # or at least download from https://skia.googlesource.com/skia, however
23        # the latter only lets one download base64-encoded files and I would prefer
24        # not to depend on something like https://docs.aspect.build/rulesets/aspect_bazel_lib/docs/base64
25        url = "https://raw.githubusercontent.com/google/skia/{}/{}".format(repo_ctx.attr.skia_revision, src)
26
27        # https://bazel.build/rules/lib/builtins/repository_ctx#download
28        repo_ctx.download(url, output = dst)
29
30# https://bazel.build/rules/lib/globals/bzl#repository_rule
31download_config_files = repository_rule(
32    implementation = _download_config_files_impl,
33    local = False,
34    attrs = {
35        # Maps dst (in this created repo) to src (relative to the Skia root).
36        "files": attr.string_dict(mandatory = True),
37        # The git version of the Skia repo from which to extract files.
38        "skia_revision": attr.string(mandatory = True),
39    },
40)
41