在 'bazel build' 期间,`target.runfiles` 目录何时正确设置?
During 'bazel build', when is `target.runfiles` directory properly set up?
对于 cc_binary(或 py_binary、sh_binary),bazel 何时创建其运行文件目录并正确设置所有符号链接?
- 它是在构建 cc_binary 之后立即创建的,并且在将此 cc_binary 作为输入的任何规则之前创建,或者
- 它是在所有目标的整个构建过程完成后创建的吗?
我正在尝试编写自定义规则以将 cc_binary 的 runfiles 目录中的内容打包到 tarball 中。此自定义规则将 cc_binary 及其运行文件中的所有目标作为输入。如果cc_binary建好后runfiles目录设置好了,那我直接pack这个目录就可以了。如果没有,我可能需要在我的自定义规则中自己设置一个tmp runfiles目录。
此外,这种行为是否保证会保留在未来的版本中?
非常感谢!
Bazel 不保证任何顺序;它所保证的是,到构建结束时,二进制文件和运行文件树都应该在那里。
如果你想在这两个都被构建之后执行一个动作,你需要同时依赖二进制文件和它的 runfiles manifest
。但是,这并不能保证运行文件树将位于打包操作规则所在的沙箱中。
我 认为 可以从 ctx.actions.run(input_manifests=)
和 ctx.resolve_command
中制作一些东西来做到这一点,尽管目前它非常神秘。
对于 cc_binary(或 py_binary、sh_binary),bazel 何时创建其运行文件目录并正确设置所有符号链接?
- 它是在构建 cc_binary 之后立即创建的,并且在将此 cc_binary 作为输入的任何规则之前创建,或者
- 它是在所有目标的整个构建过程完成后创建的吗?
我正在尝试编写自定义规则以将 cc_binary 的 runfiles 目录中的内容打包到 tarball 中。此自定义规则将 cc_binary 及其运行文件中的所有目标作为输入。如果cc_binary建好后runfiles目录设置好了,那我直接pack这个目录就可以了。如果没有,我可能需要在我的自定义规则中自己设置一个tmp runfiles目录。
此外,这种行为是否保证会保留在未来的版本中?
非常感谢!
Bazel 不保证任何顺序;它所保证的是,到构建结束时,二进制文件和运行文件树都应该在那里。
如果你想在这两个都被构建之后执行一个动作,你需要同时依赖二进制文件和它的 runfiles manifest
。但是,这并不能保证运行文件树将位于打包操作规则所在的沙箱中。
我 认为 可以从 ctx.actions.run(input_manifests=)
和 ctx.resolve_command
中制作一些东西来做到这一点,尽管目前它非常神秘。