2016-07-12 37 views
1

我創建了一個文件組規則,以在一個標籤中包含一個庫的所有.proto文件。Bazel規則和文件組不一致性

filegroup(
    name = "protos_all_src", 
    srcs = glob(
     ["**/*.proto"], 
     exclude = [ 
      "protobuf/worker.proto", 
      "protobuf/worker_service.proto", 
      "protobuf/master.proto", 
      "protobuf/master_service.proto", 
     ], 
    ) 
) 

tf_proto_library(
    name = "protos_all", 
    srcs = ":protos_all_src", 
    ), 
... 
) 

但奇怪的是這種格式,這個其他規則失敗:

cc_library(
    name = "lib_internal", 
    srcs = glob(
     [ 
      "lib/**/*.h", 
      "lib/**/*.cc", 
      "platform/*.h", 
      "platform/*.cc", 
     ] + tf_additional_lib_srcs(), 
     exclude = [ 
      "**/*test*", 
      "platform/**/cuda.h", 
      "platform/**/stream_executor.h", 
     ], 
    ), 
    hdrs = [ 
     "lib/core/blocking_counter.h", 
     "lib/core/refcount.h", 
     "lib/gtl/edit_distance.h", 
     "lib/gtl/int_type.h", 
     "lib/gtl/iterator_range.h", 
     "lib/gtl/manual_constructor.h", 
     "lib/gtl/top_n.h", 
     "lib/io/iterator.h", 
     "lib/io/match.h", 
     "lib/jpeg/jpeg_handle.h", 
     "lib/png/png_io.h", 
     "lib/random/random.h", 
     "lib/random/random_distributions.h", 
     "lib/random/weighted_picker.h", 
     "lib/strings/ordered_code.h", 
     "lib/strings/proto_text_util.h", 
     "lib/strings/regexp.h", 
     "lib/strings/scanner.h", 
     "lib/wav/wav_io.h", 
     "platform/demangle.h", 
     "platform/denormal.h", 
     "platform/platform.h", 
     "platform/tensor_coding.h", 
     "platform/tracing.h", 
    ], 
    copts = tf_copts(), 
    linkopts = ["-ldl"], 
    deps = [ 
     ":protos_all_cc", 
     "//tensorflow/core/platform/default/build_config:platformlib", 
     "//third_party/eigen3", 
    ], 
) 

注意protos_all_cc治國DEP。

,如果我恢復到

tf_proto_library(
    name = "protos_all", 
    srcs = glob(
     ["**/*.proto"], 
     exclude = [ 
      "protobuf/worker.proto", 
      "protobuf/worker_service.proto", 
      "protobuf/master.proto", 
      "protobuf/master_service.proto", 
     ], 
    ), 

一切工作正常。

我認爲第一種和第二種格式是完全相等的。我錯過了什麼?

編輯: 的tf_proto_library在這裏定義:

https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/platform/default/build_config.bzl#L26

cc_proto_library這裏定義:

https://github.com/google/protobuf/blob/master/protobuf.bzl#L109

巴澤勒版本:

Build label: 0.2.3-homebrew 
Build target: bazel-out/local-fastbuild/bin/src/main/java/com/google/devtools/build/lib/bazel/BazelServer_deploy.jar 
Build time: Tue May 17 15:07:52 2016 (1463497672) 
Build timestamp: 1463497672 
Build timestamp as int: 1463497672 

回答

0

srcs屬性應該是一個清單,這樣你的protos_all定義應該是

tf_proto_library(
    name = "protos_all", 
    srcs = [":protos_all_src"], # note the list here 
    ... 
) 

也許這只是問題的一個錯字,而真正的問題是什麼東西? 我很奇怪Permission denied問題,當我嘗試你的filegroup方法。

1

你能否粘貼你的實際代碼和錯誤信息?它看起來像有幾個問題,我不確定哪些是複製粘貼錯誤,哪些是代碼。

我猜你遇到的問題是你不能在cc_library規則中將文件(也不是文件組)列爲deps,並且":protos_all_cc"是一個文件組。 deps必須是其他cc_libraries(這是「這條規則應該鏈接在一起的東西」)。但是很難告訴出錯信息和protos_all_cc的定義。