Spec-Zone.ru › Bazel 6.4

Правила Protocol Buffer

Правила

  • proto_lang_toolchain
  • proto_library

proto_lang_toolchain

proto_lang_toolchain(name, blacklisted_protos, command_line, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, licenses, mnemonic, output_files, plugin, plugin_format_flag, progress_message, proto_compiler, restricted_to, runtime, tags, target_compatible_with, testonly, visibility)

Устарело. Пожалуйста, используйте https://github.com/bazelbuild/rules_proto вместо этого.

Определяет, как правило LANG_proto_library (например, java_proto_library) должно вызывать прото-компилятор. Некоторые правила LANG_proto_library позволяют указать, какую использовать цепочку инструментов, используя флаги командной строки; ознакомьтесь с их документацией.

Обычно вам не нужно писать такие правила, если вы не хотите настроить Java-компилятор.

Компилятора нет. Прото-компилятор берется из правила proto_library, которое мы прикрепляем. Он передается как флаг командной строки в Blaze. Несколько функций требуют вызова прото-компилятора для самого правила proto_library. Выгодно обеспечить, чтобы компилятор, используемый правилом LANG_proto_library, был таким же, как тот, proto_library использует.

Примеры

Простой пример:

proto_lang_toolchain(
    name = "javalite_toolchain",
    command_line = "--javalite_out=shared,immutable:$(OUT)",
    plugin = ":javalite_plugin",
    runtime = ":protobuf_lite",
)

Аргументы

Атрибуты
name

Name; required

Уникальное имя для этой цели.

blacklisted_protos

List of labels; optional

Для файлов в атрибуте srcs правила blacklisted_protos не будет сгенерирован код. Это используется для файлов .proto, которые уже связаны с прото-временно́й средой, например, any.proto.
command_line

String; required

Это значение будет передано прото-компилятору для генерации кода. Включайте только части, специфичные для данного кодогенератора/плагина (например, не включайте параметры -I).
  • $(OUT) специфичен для LANG_proto_library. Ожидается, что правила определят, как они интерпретируют эту переменную. Например, для Java $(OUT) будет заменено именем файла src-jar для создания.
mnemonic

String; optional; default is "GenProto"

Это значение будет установлено в качестве мнемоники в действии protoc.
output_files

String; optional; default is "legacy"

Управляет тем, как $(OUT) в command_line форматируется, либо путём указания пути к одному файлу, либо выходной директории в случае нескольких файлов. Возможные значения: "single", "multiple".
plugin

Label; optional

Если указано, оно будет доступно для действия, вызывающего прото-компилятор, и будет передано прото-компилятору: --plugin=protoc-gen-PLUGIN=.
plugin_format_flag

String; optional

Если указано, это значение будет передано прото-компилятору для использования плагина. Значение должно содержать один %s, который заменяется исполняемым файлом плагина. --plugin=protoc-gen-PLUGIN=.
progress_message

String; optional; default is "Generating proto_library %{label}"

Это значение будет установлено в качестве сообщения о прогрессе в действии protoc.
proto_compiler

Label; optional

Исполняемый файл прото-компилятора. Если указано, этот целевой объект будет использоваться как прото-компилятор для генерации кода.
runtime

Label; optional

Языковая библиотека, к которой компилируется сгенерированный код. Точное поведение зависит от LANG_proto_library. Например, для Java нужно скомпилировать против временно́й среды.

proto_library

proto_library(name, deps, srcs, data, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, exports, features, import_prefix, licenses, restricted_to, strip_import_prefix, tags, target_compatible_with, testonly, visibility)

Устарело. Пожалуйста, используйте https://github.com/bazelbuild/rules_proto вместо этого.

Используйте proto_library для определения библиотек protocol buffers, которые могут использоваться из нескольких языков. proto_library может быть перечислен в разделе deps поддерживаемых правил, таких как java_proto_library.

При компиляции в командной строке, proto_library создает файл с именем foo-descriptor-set.proto.bin, который является набором описателей для сообщений в атрибуте srcs правила. Файл — сериализованный FileDescriptorSet, который описан в https://developers.google.com/protocol-buffers/docs/techniques#self-description.

Он содержит только информацию о файлах .proto непосредственно указанных правилом proto_library; коллекция транзитивных наборов описателей доступна через провайдер Starlark [ProtoInfo].transitive_descriptor_sets. Смотрите документацию в ProtoInfo.java.

Рекомендуемая организация кода:

  • Одно правило proto_library на один файл .proto.
  • Файл с именем foo.proto будет в правиле с именем foo_proto, расположенном в том же пакете.
  • Правило [language]_proto_library обертывающее правило proto_library с именем foo_proto должно называться foo_[language]_proto, и быть расположенным в том же пакете.

Аргументы

Атрибуты
name

Name; required

Уникальное имя для этой цели.

deps

List of labels; optional

Список других правил proto_library на которые ссылается целевой объект. Правило proto_library может зависеть только от других целей proto_library. Оно не может зависеть от языковых библиотек.
srcs

List of labels; optional

Список файлов .proto и .protodevel , которые обрабатываются для создания целевого объекта. Обычно список не пустой. Один из вариантов, где srcs может быть пустым, это alias-библиотека. Это правило proto_library с одним или несколькими другими правилами proto_library в deps. Этот шаблон может использоваться для экспорта публичного API под постоянным именем.
exports

List of labels; optional

Список целей proto_library, которые можно указать посредством "import public" в исходном файле proto.
import_prefix

String; optional

Префикс, добавляемый к путям файлов .proto в этом правиле.

При установке, файлы исходного кода .proto в атрибуте srcs этого правила доступны по пути с добавленным префиксом в его репозиторие-относительном пути.

Префикс в атрибуте strip_import_prefix удаляется перед добавлением этого префикса.

strip_import_prefix

String; optional

Префикс, удаляемый из путей файлов .proto в этом правиле.

При установке, файлы исходного кода .proto в атрибуте srcs этого правила доступны по их пути с удалённым префиксом.

Если это относительный путь (не начинающийся с косой черты), он рассматривается как пакетно-относительный. Если это абсолютный путь, он понимается как репозиторие-относительный путь.

Префикс в атрибуте import_prefix добавляется после удаления этого префикса.

За исключением случаев, указанных в противном случае, содержание этой страницы лицензировано по Creative Commons Attribution 4.0 License, а примеры кода лицензированы по Apache 2.0 License. Подробности см. в Политике Google для разработчиков. Java является зарегистрированной торговой маркой Oracle и/или её аффилированных организаций.

Последнее обновление 2023-10-20 UTC.

Licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License.
https://bazel.build/versions/6.4.0/reference/be/protocol-buffer

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API