From 5b803a125f7fc44a05e61ed633a0f2eabdc073dd Mon Sep 17 00:00:00 2001 From: Matt Clarkson Date: Fri, 3 May 2024 18:31:33 +0100 Subject: [PATCH] fix(symlink/target): add `files_to_run` property on `ToolchainInfo` provider --- toolchain/local/which/BUILD.tmpl.bazel | 17 ++++++++++--- toolchain/symlink/path/rule.bzl | 34 +++++++++----------------- toolchain/symlink/target/rule.bzl | 10 +++----- 3 files changed, 28 insertions(+), 33 deletions(-) diff --git a/toolchain/local/which/BUILD.tmpl.bazel b/toolchain/local/which/BUILD.tmpl.bazel index b187870..2b4e39d 100644 --- a/toolchain/local/which/BUILD.tmpl.bazel +++ b/toolchain/local/which/BUILD.tmpl.bazel @@ -1,13 +1,22 @@ load("@toolchain_utils//toolchain/symlink/path:defs.bzl", "toolchain_symlink_path") +load("@toolchain_utils//toolchain/symlink/target:defs.bzl", "toolchain_symlink_target") -package(default_visibility = ["//visibility:public"]) - -exports_files(["entrypoint"]) +exports_files( + ["entrypoint"], + visibility = ["//visibility:public"], +) toolchain_symlink_path( + name = "symlink", + path = "{{path}}", + tags = ["no-remote"], +) + +toolchain_symlink_target( name = "{{target}}", basename = "{{basename}}", - path = "{{path}}", tags = ["no-remote"], + target = ":symlink", variable = "{{variable}}", + visibility = ["//visibility:public"], ) diff --git a/toolchain/symlink/path/rule.bzl b/toolchain/symlink/path/rule.bzl index 6b163e1..756de99 100644 --- a/toolchain/symlink/path/rule.bzl +++ b/toolchain/symlink/path/rule.bzl @@ -2,14 +2,12 @@ load("@bazel_skylib//lib:paths.bzl", "paths") visibility("//toolchain/...") -DOC = """Creates a executable symlink to a binary path. +DOC = """Creates an executable symlink to a binary path. This rule can be used to symlink a executable file outside of the workspace. The external executable become part of the Bazel target graph. -It exports the necessary providers for the target to be easily ingested by the native `toolchain` rule. - ``` toolchain_type( name = "type", @@ -20,9 +18,14 @@ toolchain_symlink_path( path = "/usr/bin/gcc", ) +toolchain_symlink_target( + name = "gcc", + target = "gcc-local", +) + toolchain( name = "local", - toolchain = ":gcc-local", + toolchain = ":gcc", toolchain_type = ":type", ) ``` @@ -85,32 +88,19 @@ def implementation(ctx): target_path = ctx.attr.path, ) - variables = platform_common.TemplateVariableInfo({ - variable: executable.path, - }) + runfiles = ctx.runfiles([executable]) + runfiles.merge_all([d[DefaultInfo].default_runfiles for d in ctx.attr.data]) - default = DefaultInfo( + return DefaultInfo( executable = executable, files = depset([executable]), - runfiles = ctx.runfiles(ctx.attr.data + [executable]), + runfiles = runfiles, ) - toolchain = platform_common.ToolchainInfo( - variables = variables, - default = default, - executable = executable, - ) - - return [variables, toolchain, default] - path = rule( doc = DOC, attrs = ATTRS, implementation = implementation, - provides = [ - platform_common.TemplateVariableInfo, - platform_common.ToolchainInfo, - DefaultInfo, - ], + provides = [DefaultInfo], executable = True, ) diff --git a/toolchain/symlink/target/rule.bzl b/toolchain/symlink/target/rule.bzl index 7794a0e..220bdb2 100644 --- a/toolchain/symlink/target/rule.bzl +++ b/toolchain/symlink/target/rule.bzl @@ -50,10 +50,6 @@ ATTRS = { "variable": attr.string( doc = "The variable name for Make or the execution environment. Defaults to `basename.upper()`", ), - "data": attr.label_list( - doc = "Extra files that are needed at runtime.", - allow_files = True, - ), "_windows": attr.label( providers = [platform_common.ConstraintValueInfo], default = "//toolchain/constraint/os:windows", @@ -87,7 +83,6 @@ def implementation(ctx): runfiles = ctx.runfiles([executable, ctx.executable.target]) runfiles = runfiles.merge(ctx.attr.target.default_runfiles) - runfiles = runfiles.merge_all([d[DefaultInfo].default_runfiles for d in ctx.attr.data]) default = DefaultInfo( executable = executable, @@ -97,8 +92,9 @@ def implementation(ctx): toolchain = platform_common.ToolchainInfo( variables = variables, - default = default, - executable = executable, + default = ctx.attr.target[DefaultInfo], + executable = ctx.executable.target, + files_to_run = ctx.attr.target.files_to_run, ) return [variables, toolchain, default] -- GitLab