|
@@ -4,15 +4,33 @@
|
|
|
|
|
|
|
|
"""Supports running a tool from the install filegroup."""
|
|
"""Supports running a tool from the install filegroup."""
|
|
|
|
|
|
|
|
-load("@rules_python//python:defs.bzl", "py_binary")
|
|
|
|
|
-
|
|
|
|
|
-def run_tool(name, tool, data, env):
|
|
|
|
|
- # TODO: Fix the driver file discovery in order to allow symlinks.
|
|
|
|
|
- py_binary(
|
|
|
|
|
- name = name,
|
|
|
|
|
- main = "run_tool.py",
|
|
|
|
|
- srcs = ["run_tool.py"],
|
|
|
|
|
- args = ["$(location {})".format(tool)],
|
|
|
|
|
- data = [tool] + data,
|
|
|
|
|
- env = env,
|
|
|
|
|
|
|
+def _run_tool_impl(ctx):
|
|
|
|
|
+ tool_files = ctx.attr.tool.files.to_list()
|
|
|
|
|
+ if len(tool_files) != 1:
|
|
|
|
|
+ fail("Expected 1 tool file, found {0}".format(len(tool_files)))
|
|
|
|
|
+ ctx.actions.symlink(
|
|
|
|
|
+ output = ctx.outputs.executable,
|
|
|
|
|
+ target_file = tool_files[0],
|
|
|
|
|
+ is_executable = True,
|
|
|
)
|
|
)
|
|
|
|
|
+ return [
|
|
|
|
|
+ DefaultInfo(
|
|
|
|
|
+ runfiles = ctx.runfiles(files = ctx.files.data),
|
|
|
|
|
+ ),
|
|
|
|
|
+ RunEnvironmentInfo(environment = ctx.attr.env),
|
|
|
|
|
+ ]
|
|
|
|
|
+
|
|
|
|
|
+run_tool = rule(
|
|
|
|
|
+ doc = "Helper for running a tool in a filegroup.",
|
|
|
|
|
+ implementation = _run_tool_impl,
|
|
|
|
|
+ attrs = {
|
|
|
|
|
+ "data": attr.label_list(allow_files = True),
|
|
|
|
|
+ "env": attr.string_dict(),
|
|
|
|
|
+ "tool": attr.label(
|
|
|
|
|
+ allow_single_file = True,
|
|
|
|
|
+ executable = True,
|
|
|
|
|
+ cfg = "target",
|
|
|
|
|
+ ),
|
|
|
|
|
+ },
|
|
|
|
|
+ executable = True,
|
|
|
|
|
+)
|