我有一个使用declare_directory生成一组文件的宏来实现规则A:
output = ctx.actions.declare_directory("selected")事先不知道这些文件的名称。该实现返回由declare_directory创建的目录,其内容如下:
return DefaultInfo(
files = depset([output]),
)规则A包含在规则B的"srcs“属性中。规则B也是用宏实现的。不幸的是,通过"srcs“属性传递给B实现的文件列表只包含规则A创建的”选定“目录,而不是驻留在该目录中的文件。
我知道Args类支持目录的扩展,因此我可以将“所选”目录中的所有文件的名称传递给一个操作。但是,我所需要的是针对每个单独的文件执行一个单独的操作,用于并行性和缓存。实现这一目标的最佳途径是什么?
发布于 2022-05-23 19:15:57
这是目录输出的预期用例之一(在实现中称为TreeArtifacts ),它是使用ActionTemplate:https://github.com/bazelbuild/bazel/blob/c2100ad420618bb53754508da806b5624209d9be/src/main/java/com/google/devtools/build/lib/actions/ActionTemplate.java#L24-L57实现的
然而,这并不暴露于Starlark,目前在安卓规则AndroidBinary.java和C++ rules CcCompilationHelper.java中只有几种用法。安卓规则和C++规则将被迁移到Starlark,因此这个功能最终可能会在Starlark中提供,但我不确定具体的时间表。最好是在Github上提交一个特性请求。
https://stackoverflow.com/questions/72329331
复制相似问题