消费 declare_directory 的内容

Consuming contents of declare_directory

我用一个宏实现了规则 A,该宏使用 declare_directory 生成一组文件:

output = ctx.actions.declare_directory("selected")

事先不知道这些文件的名称。 returns 由 declare_directory 创建的目录的实现具有以下内容:

return DefaultInfo(
    files = depset([output]),
)

规则 A 包含在规则 B 的“srcs”属性中。规则 B 也通过宏实现。不幸的是,通过“srcs”属性传递给 B 实现的文件列表仅包含由规则 A 创建的“选定”目录,而不是驻留在该目录中的文件。

我知道 Args class 支持目录扩展,因此我可以将“选定”目录中的所有文件的名称传递给单个操作。然而,我需要的是对每个单独的文件进行并行和缓存的单独操作。实现该目标的最佳方法是什么?

这是目录输出(在实现中称为 TreeArtifacts)的预期用例之一,它是使用 ActionTemplate 实现的: https://github.com/bazelbuild/bazel/blob/c2100ad420618bb53754508da806b5624209d9be/src/main/java/com/google/devtools/build/lib/actions/ActionTemplate.java#L24-L57

然而,这并没有暴露给 Starlark,并且目前在 Android 规则 AndroidBinary.java and C++ rules CcCompilationHelper.java 中只有几个用法。 Android 规则和 C++ 规则将迁移到 Starlark,因此此功能最终可能会在 Starlark 中可用,但我不确定任何具体的时间表。在 Github.

上提交功能请求可能会很好