2016-07-12 7 views
1

Я создал правило файловой группы, чтобы иметь в одном ярлыке все .proto-файлы библиотеки.Bazel rules и несогласованность файловой группы

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 как отд.

если вернуться к

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

все работает отлично.

Я ожидаю, что первый и второй формат будут полностью равными. Что мне не хватает?

EDIT: 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

Не могли бы вы вставить свой фактический код и сообщение об ошибке, которое вы получаете? Похоже, есть несколько проблем, и я не уверен, какие ошибки копирования и вставки являются кодом.

Я бы предположил, что проблема заключается в том, что вы не можете перечислять файлы (или файловые группы) как deps в правиле cc_library, а ":protos_all_cc" - это файловая группа. deps должны быть другими cc_libraries (это «вещи, которые это правило должно связывать вместе»). Но с сообщением об ошибке и определением protos_all_cc очень сложно сказать.

 Смежные вопросы

  • Нет связанных вопросов^_^