aboutsummaryrefslogtreecommitdiff
path: root/rules/prebuilt_file.bzl
diff options
context:
space:
mode:
Diffstat (limited to 'rules/prebuilt_file.bzl')
-rw-r--r--rules/prebuilt_file.bzl42
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