如何在bazel/tensorflow构建期间添加外部头文件

Pra*_*dra 7 bazel tensorflow

我正在尝试添加外部头文件(如OpenCL头文件)进行tensorflow的一些实验.我试着将它添加到tensorflow/core/BUILD文件下的BUILD文件中:

# This includes implementations of all kernels built into TensorFlow.
cc_library(
    name = "all_kernels",
    visibility = ["//visibility:public"],
    copts = tf_copts() + ["-Ithird_party/include"],    <==== this is the line I added
Run Code Online (Sandbox Code Playgroud)

我还在这个目录中创建了一个软链接,从OpenCL驱动程序(在tensorflow/third_party下)这些头文件的位置(如ln -s/opt/opencl /),但它仍然抱怨它没有找到头文件.

如果我直接添加外部头文件(如/ opt/opencl/CL /),它会抱怨无法包含外部文件(或某些此类内容).

我没有root密码将这些头文件复制到/ usr/include /中.

有人可以解释如何准确地将外部头文件转换为tensorflow进行构建吗?

感谢您的快速帮助.

小智 6

当我使用英特尔 MKL 构建 TensorFlow 并且不得不添加 MKL 标头时,我遇到了类似的问题。我的解决方案如下:

  1. 在第三方文件夹中创建指向标头的符号链接,例如:

    <your tensorflow folder>/third_party/opencl/include -> /opt/OpenCL/include
    
    Run Code Online (Sandbox Code Playgroud)

    使用命令:

    ln -s /opt/OpenCL/include <your tensorflow folder>/third_party/opencl
    
    Run Code Online (Sandbox Code Playgroud)
  2. <your tensorflow folder>/third_party/opencl文件夹中创建简单的 BUILD 文件:

    cc_library(
        name = "opencl",
        hdrs = glob(["include/CL/*.h"]),
        visibility = ["//visibility:public"],
    )
    
    Run Code Online (Sandbox Code Playgroud)
  3. 将 deps 添加到目标库中:

    cc_library(
        name = "all_kernels",
        visibility = ["//visibility:public"],
        copts = tf_copts() + ["-Ithird_party/opencl/include"],
        deps = [
            "//third_party/opencl", 
            ...
        ],
    )
    
    Run Code Online (Sandbox Code Playgroud)
  4. 不要忘记将编译器选项添加到目标库中,如上所示,或者只是作为 bazel 的标志:

     bazel build --copt="-Ithird_party/opencl/include" ...
    
    Run Code Online (Sandbox Code Playgroud)

  • 如果我当选总统,我的第一个行政命令将是关闭“bazel”构建项目,并将作者送往再教育营。 (6认同)

Pet*_*den 0

Bazel 试图非常严格地确保其构建仅包含它知道的文件,以确保它们是可重现的。不幸的是,这可能会让实验变得困难。解决问题的正确方法是为要包含的标头创建一个 BUILD 文件和规则。您也可以通过弄乱 bazel-* 生成的文件夹来破解某些内容,但我不推荐这样做。