bazel - 使用本地 LLVM 存储库构建 TensorFlow 时出错

bazel - Error building TensorFlow with local LLVM repository

本质上,我想 运行 TensorFlow 使用自定义 LLVM 存储库,而不是 bazel 从中提取的 llvm-mirror。

我做了以下修改:

  1. //tensorflow/workspace.bzl 中的 temp_workaround_http_archive 规则更改为:

      native.local_repository (
        name = "llvm",
        path = "/git/llvm/",
      )
    
  2. /git/llvm 我添加了文件 WORKSPACE 包含:

      workspace( name = "llvm" )
    

但是,我知道 llvm.build 文件是必需的,但由于我是 bazel 的新手,所以我不确定它应该位于何处。

我收到以下错误日志:

bazel build --config=opt //tensorflow/tools/pip_package:build_pip_package
ERROR: /git/tensorflow/tensorflow/tools/pip_package/BUILD:81:1: no such package '@llvm//': BUILD file not found on package path and referenced by '//tensorflow/tools/pip_package:licenses'.
ERROR: Analysis of target '//tensorflow/tools/pip_package:build_pip_package' failed; build aborted.
INFO: Elapsed time: 0.219s

我从源代码安装了 TensorFlow。这是版本信息:

$ git rev-parse HEAD
4c3bb1aeb7bb46bea35036433742a720f39ce348

$ bazel version
Build label: 0.4.5
Build target: bazel-out/local-fastbuild/bin/src/main/java/com/google/devtools/build/lib/bazel/BazelServer_deploy.jar
Build time: Thu Mar 16 12:19:38 2017 (1489666778)
Build timestamp: 1489666778
Build timestamp as int: 1489666778

在此先感谢您的帮助!

找到修复。其实很简单。

bazel 中的 local_repository 规则仅适用于外部 bazel 存储库。要使用非 bazel 外部存储库,我们需要使用 new_local_repositorybuild_file 作为参数。

可以使用python的http服务器功能搭建本地文件服务器,如:

python3 -m http.server

然后编辑文件"tensorflow/workspace.bzl"

tf_http_archive(
      name = "llvm",
      urls = [
          "https://mirror.bazel.build/**/195a164675af86f390f9816e53291013d1b551d7.tar.gz",
          "http://localhost:8000/195a164675af86f390f9816e53291013d1b551d7.tar.gz",
          "https://github.com/**/195a164675af86f390f9816e53291013d1b551d7.tar.gz",
      ],
      sha256 = "57a8333f8e6095d49f1e597ca18e591aba8a89d417f4b58bceffc5fe1ffcc02b",
      strip_prefix = "llvm-195a164675af86f390f9816e53291013d1b551d7",
      build_file = str(Label("//third_party/llvm:llvm.BUILD")),
  )

在urls的中间一行添加一个本地文件路径,然后重新构建。