Build 启用远程缓存的非密封Bazel操作

Build 启用远程缓存的非密封Bazel操作,build,bazel,verilator,Build,Bazel,Verilator,我一直在为一个依赖于“自定义”的工具迭代bazel规则(如果您熟悉verilator)。该工具用于读取参数和输入,并生成cpp文件。下面定义了调用verilator的操作 ctx.actions.run( arguments = [args], executable = verilator_toolchain.verilator_bin, inputs = inputs, outputs = [verilator_output], progress_me

我一直在为一个依赖于“自定义”的工具迭代bazel规则(如果您熟悉verilator)。该工具用于读取参数和输入,并生成cpp文件。下面定义了调用verilator的操作

 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规则与此类似。

不,除了编写不正确的非密封规则外,没有办法阻止Bazel将所有操作输入放入哈希键。

当然,但我感兴趣的问题是重新定义规则s.t。此可执行文件不被视为此操作的直接输入。我可能错了,但我认为基于cpp的规则也做了类似的事情,使用
external/local\u config\u cc/cc\u wrapper.sh
而不是直接调用gcc/clang。当然,您可以在您的操作中设置
execution\u requirements={“no sandbox}
,并做任何您想做的事情。没有这样的“最佳实践”“这是因为非密封操作不是最佳实践。我相信cc_wrapper.sh的主要原因是为编译器设置环境变量。