bazel - Bazel 外部依赖项在用作另一个规则中的工具的规则中不必要地重建
问题描述
我正在研究一组Bazel 规则,其中一个测试规则也作为工具从另一个可执行规则中执行。测试规则依赖于由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",
),
...,
},
executable = True,
)
使用原始 Bazel 缓存,在使用bazel test //examples:counter_fail
外部工具运行测试规则的实例时构建。当可执行规则的实例(利用测试规则)运行时,也会构建外部工具bazel run //examples:counter_fail_trace
。一旦在这两个上下文中构建了外部工具,后续测试或运行就会使用缓存的输出。
两次构建外部工具似乎没有必要,因为测试和可执行规则都具有相同的配置(“exec”)。我有一种预感,这可能bazel test
与bazel run
调用不同的命令行选项有关,导致缓存错过外部依赖项。
我的问题主要是导致此重建的原因以及如何摆脱它?没有回答这个问题,有哪些技术可以深入挖掘导致这种重建的原因?我尝试了一些基本的 Bazel 查询,但运气不佳。
编辑
这个我还没破解 我确实怀疑两者之间存在细微差别bazel test
,bazel run
但不幸的是,关于两者在文档中的具体差异的信息有限。
解决方案
推荐阅读
- python - ValueError:查看限制最小值 -0.001 小于 1 并且是无效的 Matplotlib 日期值
- oracle - 来自单个表的集合,按列分组
- complexity-theory - 可计算性——图灵机可以计算输入的长度吗?
- ruby-on-rails - Rails 按钮调用控制器方法并且不重定向
- javascript - React Native Audio 播放名称中带有空格的 mp3 文件
- ios - 使用 MTKView 显示解码的视频流会导致不希望的模糊输出
- java - 两种具有不同参数类型的相同方法
- apache - 将 Apache mod_status 与 Prestashop 1.6 一起使用(错误 404)
- apache-kafka - 为什么 Kafka 在 ambari 安装上失败了?
- javascript - 访问数组的单个元素的最佳实践