启用远程缓存的非密封 Bazel 操作
Posted
技术标签:
【中文标题】启用远程缓存的非密封 Bazel 操作【英文标题】:non-hermetic Bazel action to enable remote caching 【发布时间】:2019-12-12 23:49:15 【问题描述】:我一直在为依赖于“自定义”(如果您熟悉验证器)的工具迭代 bazel 规则。该工具应该读取参数和输入并生成 cpp 文件。下面定义了调用验证器的动作
ctx.actions.run(
arguments = [args],
executable = verilator_toolchain.verilator_bin,
inputs = inputs,
outputs = [verilator_output],
progress_message = "[Verilator] Compiling ".format(ctx.label),
)
问题在于,赋予此操作的可执行文件在不同平台之间/完全/不一样——它稍大,在此处比较 mac 和 linux 可执行文件时具有不同的哈希值。
我可以相信输出可以是相同的,并且我想为两个平台的此操作共享一个远程缓存;是否有“最佳实践”,我可以将此操作重写为非封闭的,因此工具链二进制文件不被视为缓存的“输入”?我认为 cpp 规则的作用与此类似。
【问题讨论】:
【参考方案1】:不,除了编写不正确的非封闭规则之外,没有办法阻止 Bazel 将所有操作输入放入哈希键中。
【讨论】:
好吧,但我有兴趣解决的问题是重新定义规则 s.t.此可执行文件不被视为此操作的直接输入。我可能是错的,但我认为基于 cpp 的规则通过使用external/local_config_cc/cc_wrapper.sh
而不是直接调用 gcc/clang 做了类似的事情
好吧,当然,您可以在您的操作中设置execution_requirements = "no-sandbox
,然后做任何您想做的事情。没有这样的“最佳实践”,因为非密封动作不是最佳实践。我相信cc_wrapper.sh
的主要原因是为编译器设置环境变量。以上是关于启用远程缓存的非密封 Bazel 操作的主要内容,如果未能解决你的问题,请参考以下文章
Mybatis-plus流程图解和使用,一级和二级缓存禁用启用详解,map的k-v入库,自增id,分页查询等各种骚操作
Mybatis-plus流程图解和使用,一级和二级缓存禁用启用详解,map的k-v入库,自增id,分页查询等各种骚操作