如何解决如何将规则限制为 cpp 工具链的子集?
我有这样的规定
do_action = rule (
implementation = _impl,attrs = {
...
"_cc_toolchain": attr.label(default = Label("@bazel_tools//tools/cpp:current_cc_toolchain")),},fragments = ["cpp"],toolchains = [
"@bazel_tools//tools/cpp:toolchain_type",],)
我为自定义 cpu 定义了自定义 cc_toolchain:
toolchain(
name = "cc-toolchain-%{toolchain_name}",toolchain = ":cc-compiler-%{toolchain_name}",# can be run on this platform
target_compatible_with = [
"@platforms//os:windows","@platforms//cpu:x86_64",toolchain_type = "@bazel_tools//tools/cpp:toolchain_type",)
cc_toolchain_suite(
name = "toolchain",toolchains = {
"%{cpu}": ":cc-compiler-%{toolchain_name}",)
我在需要时使用 --crostool_top
选择此工具链。
我希望仅当 --crostool_top 与我的自定义工具链之一匹配时才允许调用我的自定义规则。如何做到这一点?
解决方法
添加一个带有 constraint_setting
的新 constraint_value
,其中只有您的工具链是 var options = document.querySelectorAll('.dropdown-menu.dropdown-menu-right.round-filters li a');
var lookFor = "WINNERS BRACKET";
options.forEach((e) => {
let option = e.innerHTML;
if (option.toUpperCase() == lookFor) {
e.click();
}
})
,然后使所有使用您的规则的目标都target_compatible_with
。
在 BUILD 文件中是这样的:
target_compatible_with
然后在您的所有工具链上将 constraint_setting(name = "is_my_toolchain")
constraint_value(
name = "yes_my_toolchain",constraint_setting = ":is_my_toolchain",)
添加到 yes_my_toolchain
。
在每次使用规则时强制使用它的最简单方法是使用 macro。将实际规则重命名为 target_compatible_with
(因此它是私有的,不能直接从任何 _do_action
文件加载)并添加:
BUILD
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。