微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将规则限制为 cpp 工具链的子集?

如何解决如何将规则限制为 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 举报,一经查实,本站将立刻删除。