diff options
Diffstat (limited to 'rules/prebuilt_file.bzl')
-rw-r--r-- | rules/prebuilt_file.bzl | 42 |
1 files changed, 33 insertions, 9 deletions
diff --git a/rules/prebuilt_file.bzl b/rules/prebuilt_file.bzl index 210a42fa..12e69824 100644 --- a/rules/prebuilt_file.bzl +++ b/rules/prebuilt_file.bzl @@ -18,27 +18,50 @@ PrebuiltFileInfo = provider( "Info needed for prebuilt_file modules", fields = { "src": "Source file of this prebuilt", - "sub_dir": "Optional subdirectory into which to install", + "dir": "Directory into which to install", "filename": "Optional name for the installed file", "installable": "Whether this is directly installable into one of the partitions", }, ) +_handled_dirs = ["etc", "usr/share"] def _prebuilt_file_rule_impl(ctx): + srcs = ctx.files.src + if len(srcs) != 1: + fail("src for", ctx.label.name, "is expected to be singular, but is of len", len(srcs), ":\n", srcs) + + # Is this an acceptable directory, or a subdir under one? + dir = ctx.attr.dir + acceptable = False + for d in _handled_dirs: + if dir == d or dir.startswith(d + "/"): + acceptable = True + break + if not acceptable: + fail("dir for", ctx.label.name, "is `", dir, "`, but we only handle these:\n", _handled_dirs) + return [ PrebuiltFileInfo( - src = ctx.file.src, - sub_dir = ctx.attr.sub_dir, + src = srcs[0], + dir = dir, filename = ctx.attr.filename, installable = ctx.attr.installable, ), + DefaultInfo( + files = depset(srcs), + ), ] _prebuilt_file = rule( implementation = _prebuilt_file_rule_impl, attrs = { - "src": attr.label(mandatory = True, allow_single_file = True), - "sub_dir": attr.string(), + "src": attr.label( + mandatory = True, + allow_files = True, + # TODO(b/217908237): reenable allow_single_file + # allow_single_file = True, + ), + "dir": attr.string(mandatory = True), "filename": attr.string(), "installable": attr.bool(default = True), }, @@ -47,18 +70,19 @@ _prebuilt_file = rule( def prebuilt_file( name, src, - sub_dir = None, + dir, filename = None, installable = True, - # TODO(b/207489266): Fully support; data is currently simply dropped to prevent breakages. + # TODO(b/207489266): Fully support; + # data is currently dropped to prevent breakages from e.g. prebuilt_etc data = [], **kwargs): - "Bazel macro to correspond with the prebuilt_etc Soong module." + "Bazel macro to correspond with the e.g. prebuilt_etc and prebuilt_usr_share Soong modules." _prebuilt_file( name = name, src = src, - sub_dir = sub_dir, + dir = dir, filename = filename, installable = installable, **kwargs |