From 973677c0b5590757caaefbe3c360980ddb1fc115 Mon Sep 17 00:00:00 2001 From: Alex Tercete Date: Mon, 20 Jan 2025 15:59:37 +0000 Subject: [PATCH] feat: add `labgrid_binary` --- labgrid/binary/BUILD.bazel | 15 ++++++++++ labgrid/binary/defs.bzl | 5 ++++ labgrid/binary/rule.bzl | 60 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 80 insertions(+) create mode 100644 labgrid/binary/BUILD.bazel create mode 100644 labgrid/binary/defs.bzl create mode 100644 labgrid/binary/rule.bzl diff --git a/labgrid/binary/BUILD.bazel b/labgrid/binary/BUILD.bazel new file mode 100644 index 00000000..8c152c42 --- /dev/null +++ b/labgrid/binary/BUILD.bazel @@ -0,0 +1,15 @@ +load("@bazel_skylib//:bzl_library.bzl", "bzl_library") + +bzl_library( + name = "defs", + srcs = ["defs.bzl"], + visibility = ["//visibility:public"], + deps = [":rule"], +) + +bzl_library( + name = "rule", + srcs = ["rule.bzl"], + visibility = ["//visibility:public"], + deps = ["//labgrid/cfg:store"], +) diff --git a/labgrid/binary/defs.bzl b/labgrid/binary/defs.bzl new file mode 100644 index 00000000..7aac7607 --- /dev/null +++ b/labgrid/binary/defs.bzl @@ -0,0 +1,5 @@ +load(":rule.bzl", _binary = "binary") + +visibility("public") + +labgrid_binary = _binary diff --git a/labgrid/binary/rule.bzl b/labgrid/binary/rule.bzl new file mode 100644 index 00000000..32386260 --- /dev/null +++ b/labgrid/binary/rule.bzl @@ -0,0 +1,60 @@ +load("//labgrid/cfg:store.bzl", _cfg = "store") + +visibility("//...") + +DOC = """Run an executable within the labgrid environment""" + +ATTRS = { + "src": attr.label( + doc = "The executable to run within the labgrid environment", + executable = True, + cfg = "exec", + ), + "platform": attr.label( + doc = "Platform to transition to.", + providers = [platform_common.PlatformInfo], + ), + "_executor": attr.label( + doc = "The LabGrid environment executor", + default = "//labgrid/executor", + executable = True, + cfg = "exec", + ), +} + +def _runfile(label, file): + path = file.short_path + if path.startswith("../"): + return path.removeprefix("../") + return "{}/{}".format(label.workspace_name or "_main", path) + +def implementation(ctx): + arguments = ctx.actions.declare_file("{}.args".format(ctx.label.name)) + args = ctx.actions.args() + args.add("--") + args.add(_runfile(ctx.attr.src.label, ctx.executable.src)) + ctx.actions.write(output = arguments, content = args) + + executable = ctx.actions.declare_file(ctx.label.name) + ctx.actions.symlink( + output = executable, + target_file = ctx.executable._executor, + is_executable = True, + ) + + files = depset([executable]) + root_symlinks = {"extra.args": arguments} + runfiles = ctx.runfiles([ctx.executable.src], root_symlinks = root_symlinks) + runfiles = runfiles.merge(ctx.attr._executor.default_runfiles) + runfiles = runfiles.merge(ctx.attr.src.default_runfiles) + return DefaultInfo(executable = executable, files = files, runfiles = runfiles) + +labgrid_binary = rule( + doc = DOC, + attrs = ATTRS, + implementation = implementation, + cfg = _cfg, + executable = True, +) + +binary = labgrid_binary -- GitLab