3

上下文:我正在尝试为https://github.com/tensorflow/tensorflow/issues/37861提供修复,其中手动列出了外部依赖项的头文件,但该列表是特定于版本的,因此无法跟上迄今为止。

怎么了:

  • tf_http_archive(name = "com_google_protobuf", system_build_file = clean_dep("//third_party/systemlibs:protobuf.BUILD") ...)被调用
  • tf_http_archive是一个repository_rule实际上只有ctx.template("BUILD.bazel", ctx.attr.system_build_file, {...}, False)
  • protobuf.BUILD里面有一个列表HEADERS = ["google/protobuf/any.pb.h", ...],它被传递给调用的hdrs参数cc_library
  • 一个明显的genrule符号链接这些头文件(我$(INCLUDEDIR)$(@D)Bazel 不是很熟悉,但 IIUC 是稍后使用的一些内部构建目录)

由于我一般不熟悉 Bazel,因此我假设标题列表是必需的,并且存在一个$(INCLUDEDIR)/google/protobuf文件夹并且位于系统上的某个位置(其他),例如/usr/local/include.

有什么方法可以通过 glob 或类似方式获取格式(即相对于 )的所有文件*.h?Bazel函数不适用于绝对路径,因此无法使用。*.inc$(INCLUDEDIR)glob

我发现https://github.com/bazelbuild/bazel/issues/8846建议new_local_repository与 abuild_file和 a一起使用path(在这种情况下)$(INCLUDEDIR),但我不知道如何将其应用于tf_http_archive(有一些条件要么下载依赖项,要么只使用 system_build_file)。这似乎也可以避免符号链接(无论如何我都非常怀疑,因为该文件夹是通过-iquote但包含样式添加的#include <...>,请参阅我在https://github.com/tensorflow/tensorflow/issues/37861中的评论)

为问题做出贡献的人或为什么在调用中似乎忽略了 action_env 环境变量的想法的人的奖励积分native.cc_library

4

0 回答 0