diff --git a/labgrid/BUILD.bazel b/labgrid/BUILD.bazel index c2f98900725fdef0b2e5d8d464f342f46a139d8d..a636ef4e8af9736c5c2e01dfd49b57d0bb8c5674 100644 --- a/labgrid/BUILD.bazel +++ b/labgrid/BUILD.bazel @@ -1,5 +1,5 @@ -load("@rules_python//python:defs.bzl", "py_test") load("@python_versions//3.11:defs.bzl", "compile_pip_requirements") +load("@rules_python//python:defs.bzl", "py_test") # TODO: generate for more Python interpreter versions and platforms # `rules_uv` would be an easier way to do this diff --git a/labgrid/config/deps.bzl b/labgrid/config/deps.bzl index e0e33c557149d7d2a8aa824e3416a23e62fb4089..9fb9d0e6b3903e1d90e34c586ceb3ff99be29f4a 100644 --- a/labgrid/config/deps.bzl +++ b/labgrid/config/deps.bzl @@ -1,5 +1,5 @@ -load("//labgrid/cfg:unstore.bzl", _cfg = "unstore") load("@rules_python//python:defs.bzl", "PyInfo") +load("//labgrid/cfg:unstore.bzl", _cfg = "unstore") visibility("//labgrid/config/...") diff --git a/labgrid/executor/BUILD.bazel b/labgrid/executor/BUILD.bazel index bc238473e9ffdd3650d2caf69715d418ff2c26b5..f4e357d45ac67dc51373141b69f22fc0400bbcb4 100644 --- a/labgrid/executor/BUILD.bazel +++ b/labgrid/executor/BUILD.bazel @@ -10,6 +10,7 @@ py_binary( name = "executor", srcs = ["executor.py"], data = [ + ":args", "//labgrid/config:data", "//labgrid/config:tools", ], @@ -42,7 +43,15 @@ py_test( "echo", "$${DATA}", ], + data = [ + ":args", + ], main = "executor.py", + # TODO: remove this when we have a default LabGrid configuration toolchain for `arm64-linux` + target_compatible_with = [ + "@platforms//cpu:x86_64", + "@platforms//os:linux", + ], deps = ["host"], ) @@ -58,6 +67,14 @@ py_test( "echo", "$${DATA}", ], + data = [ + ":args", + ], main = "executor.py", + # TODO: remove this when we have a default LabGrid configuration toolchain for `arm64-linux` + target_compatible_with = [ + "@platforms//cpu:x86_64", + "@platforms//os:linux", + ], deps = ["host"], ) diff --git a/labgrid/executor/args.bzl b/labgrid/executor/args.bzl index e09419c6459724a5ac4450e6b39f402c10e2a337..a7ee8eb9d4050828f84f49cdfbab342edc4b3b85 100644 --- a/labgrid/executor/args.bzl +++ b/labgrid/executor/args.bzl @@ -17,26 +17,31 @@ ATTRS = { ), } -def _import_path(short_path): +def _import(short_path): path = short_path.removesuffix(".py") parts = path.split("/") parts = parts[2:] if parts[0] == ".." else parts return ".".join(parts) -def implementation(ctx): - output = ctx.actions.declare_file("executor-args.txt") +def _managers(manager): + return ("--manager", "{}:manager".format(_import(manager.short_path))) - lines = [] - for m in ctx.files._managers: - lines.extend(["--manager", "{}:{}".format(_import_path(m.short_path), "manager")]) - for name, value in ctx.attr._env[EnvironmentInfo].environment.items(): - lines.extend(["--env", name, value]) +def _env(pair): + key, value = pair + return ["--env", key, value] - ctx.actions.write(output, "\n".join(lines)) - return DefaultInfo(files = depset([output])) +def implementation(ctx): + arguments = ctx.actions.declare_file(ctx.label.name) + args = ctx.actions.args() + args.add_all(ctx.files._managers, map_each = _managers) + args.add_all(ctx.attr._env[EnvironmentInfo].environment.items(), map_each = _env) + ctx.actions.write(arguments, content = args) + files = depset([arguments]) + return DefaultInfo(files = files) args = rule( doc = DOC, attrs = ATTRS, implementation = implementation, + provides = [DefaultInfo], ) diff --git a/labgrid/executor/executor.py b/labgrid/executor/executor.py index ba7d34c7be9bbf0fd362254712c10108df60d854..49d5e0754c12bb450ce7d6f2ee57a0c7130a7258 100644 --- a/labgrid/executor/executor.py +++ b/labgrid/executor/executor.py @@ -72,6 +72,10 @@ def main(exe: Path, *args: str) -> int: arguments(prsr) + runfiles = Runfiles.Create() + baked = Path(runfiles.Rlocation("rules_labgrid/labgrid/executor/args")) + args = (f"@{baked}", *args) + parsed = prsr.parse_args(args) cmd = (parsed.program, *parsed.arguments) diff --git a/labgrid/genrule/rule.bzl b/labgrid/genrule/rule.bzl index 50c27211e8bbf89c1caafed56d0407ffb02306eb..0713fa5866fcc8de411e7ec19fb31e8d435484fa 100644 --- a/labgrid/genrule/rule.bzl +++ b/labgrid/genrule/rule.bzl @@ -40,12 +40,6 @@ ATTRS = { executable = True, cfg = "exec", ), - "_executor_args": attr.label( - allow_single_file = True, - doc = "CLI args for the Labgrid environment executor", - default = "//labgrid/executor:args", - cfg = "exec", - ), "_sh": attr.label( doc = "The Shell interpreter", default = "@ape//:bash", @@ -85,7 +79,6 @@ def implementation(ctx): cmd = cmd.replace(key, value) args = ctx.actions.args() - args.add(ctx.file._executor_args, format = "@%s") args.add("--") args.add(ctx.executable._sh) args.add("-c") @@ -94,7 +87,6 @@ def implementation(ctx): ctx.actions.run( executable = ctx.executable._executor, arguments = [args], - inputs = [ctx.file._executor_args], outputs = ctx.outputs.outs, tools = [t.files_to_run for t in (ctx.attr.tools + ctx.attr.srcs)] + [ctx.executable._sh], use_default_shell_env = False, diff --git a/labgrid/run/binary/rule.bzl b/labgrid/run/binary/rule.bzl index f46d02925c9f14c583fa3b69eb7acad1399685d6..28ea2726beb82c70921158e249db9afa4a2b8308 100644 --- a/labgrid/run/binary/rule.bzl +++ b/labgrid/run/binary/rule.bzl @@ -46,12 +46,6 @@ ATTRS = { executable = True, cfg = "exec", ), - "_executor_args": attr.label( - allow_single_file = True, - doc = "CLI args for the Labgrid environment executor", - default = "//labgrid/executor:args", - cfg = "exec", - ), } def implementation(ctx): @@ -77,14 +71,13 @@ def implementation(ctx): } args = ctx.actions.args() - args.add(ctx.file._executor_args, format = "@%s") args.add("--") args.add(ctx.executable.tool) args.add_all(expanded_args) ctx.actions.run( outputs = ctx.outputs.outs, - inputs = ctx.files.srcs + [ctx.file._executor_args], + inputs = ctx.files.srcs, tools = [ctx.executable.tool], executable = ctx.executable._executor, arguments = [args],