Bazel外部依赖关系在另一个规则中用作工具的规则中不必要地重建

问题描述

我正在处理一组Bazel rules,其中一个test rule也作为工具从另一个executable rule内部执行。测试规则取决于external tool构建的rules_foreign_cc

symbiyosys_test = rule(
    implementation = _symbiyosys_test_impl,doc = "Formal verification of (System) Verilog.",attrs = {
        ...,"_yosys_toolchain": attr.label(
            doc = "Yosys toolchain.",default = Label("@rules_symbiyosys//symbiyosys/tools:yosys"),),"_yices_toolchain": attr.label(
            doc = "yices toolchain.",default = Label("@rules_symbiyosys//symbiyosys/tools:yices"),},test = True,)

symbiyosys_trace = rule(
    implementation = _symbiyosys_trace_impl,doc = "View VCD trace from Symbiyosys.",attrs = {
        "test": attr.label(
            doc = "Symbiyosys test target to produce VCD file.",mandatory = True,executable = True,cfg = "exec",...,)

使用原始的Bazel缓存,当使用bazel test //examples:counter_fail运行测试规则的实例时,将构建外部工具。当使用bazel run //examples:counter_fail_trace运行可执行规则的实例(利用测试规则)时,也会构建外部工具。在这两个上下文中构建了外部工具后,随后的测试或运行将使用缓存的输出

由于测试和可执行规则具有相同的配置(“ exec”),因此似乎不需要两次构建外部工具。我有一种预感,这可能与bazel testbazel run调用不同的命令行选项有关,从而导致缓存错过了外部依赖项。

我的问题主要是什么导致此重建,以及如何摆脱它?只需回答一下,有什么技术可以挖掘导致此重建的原因?我已经尝试了一些基本的Bazel查询,但是运气不高。

编辑

我还没有破解这个。我确实怀疑bazel testbazel run间的细微差别,但不幸的是,关于文档中两者之间的区别有特别有限的信息。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)