我想为自己的风格在bazel中创建一个工具链。我创建了一个名为toolchain.bzl的文件,此文件中的源为:
BarInfo = provider(
fields = {
"bar": "path to bar executable",
},
doc = "Defines a Bar toolchain based on an SDK",
)
def _bar_toolchain_impl(ctx):
bar_info = ctx.attr.path
platform_bar_info = platform_common.ToolchainInfo(
bar_info = BarInfo(bar = bar_info),
)
return [platform_bar_info]
bar_toolchain = rule(
implementation = _bar_toolchain_impl,
attrs = {
"path": attr.string(
doc = "path to bar executable",
mandatory = False,
),
},
)
这是我在BUILD文件中写的。
load(":toolchain.bzl", "bar_toolchain")
toolchain_type(
name = "toolchain_type",
visibility = ["//visibility:public"],
)
bar_toolchain(
name = "bar_toolchain",
path = "/usr/local/bin/bar",
visibility = ["//visibility:public"],
)
toolchain(
name = "bar_linux",
target_compatible_with = [
"@platforms//os:linux",
"@platforms//cpu:x86_64",
],
toolchain = "//:bar_toolchain",
toolchain_type = "//:toolchain_type",
visibility = ["//visibility:public"],
)
genrule(
name = "build_bar",
srcs = glob(["**/*.bar"]),
outs = ["a.sh"],
cmd = """
touch a.sh
""",
toolchains = ["//:toolchain_type"],
)
但是当我跑步
bazel build // :: build_bar
我收到此错误
'//:toolchain_type'没有强制提供程序:'TemplateVariableInfo'。
我该怎么解决这个问题?
答案 0 :(得分:0)
genrule
的{{3}}仅可用于访问特定于工具链的“生成变量”,这些变量被替换为genrule
的命令字符串。由于您的工具链没有声明make变量,因此Bazel出错了。 toolchains
attribute中介绍了定义工具链的make变量。