diff --git a/toolchain/local/which/BUILD.tmpl.bazel b/toolchain/local/which/BUILD.tmpl.bazel index b1878700d5ba52bd087b784de4c196f6b16fe40b..2b4e39d3faa959bcd6751fd491ddff5a33bb890a 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 6b163e1f7f6803e8cd3454d0018d7fb50f0467ae..756de99dc5cab0a6b7b64e3e261bd3775d7164a2 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 7794a0e203eedc10cd8aca3bb7e30c4737b04ac9..220bdb2208b230571607966d955849d2dc75c8d0 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]