启用远程缓存的非密封 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 操作的主要内容,如果未能解决你的问题,请参考以下文章

Confluence 6 启用远程 API

curl dns缓存设置

Mybatis-plus流程图解和使用,一级和二级缓存禁用启用详解,map的k-v入库,自增id,分页查询等各种骚操作

Mybatis-plus流程图解和使用,一级和二级缓存禁用启用详解,map的k-v入库,自增id,分页查询等各种骚操作

通过 jboss-cli 启用/禁用 Eclipselink 共享缓存

如何启用IIS7.5的缓存