Regras de buffer de protocolo

Regras

proto_lang_toolchain

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

Obsoleto. https://github.com/bazelbuild/rules_proto (link em inglês).

Especifica como uma regra de Lang_proto_library (por exemplo, java_proto_library) precisa invocar o protocompilador. Algumas regras de Lang_proto_library permitem especificar qual conjunto de ferramentas usar usando sinalizações de linha de comando. Consulte a documentação.

Normalmente, você não deve escrever esse tipo de regra, a menos que queira ajustar seu compilador Java.

Não há compilador. O proto-compiler é retirado da regra proto_library a que anexamos. Ela é transmitida como uma sinalização de linha de comando para o Blaze. Vários recursos exigem que um proto-compilador seja invocado na própria regra proto_library. É vantajoso impor que o compilador usado pela Lang_proto_library seja igual ao proto_library.

Exemplos

Um exemplo simples seria:

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

Argumentos

Atributos
name

Name; required

Um nome exclusivo para o destino.

blacklisted_protos

List of labels; optional

Nenhum código será gerado para arquivos no atributo srcs de blacklisted_protos. Ele é usado para arquivos .proto que já estão vinculados aos ambientes de execução proto, como any.proto.
command_line

String; required

Esse valor será transmitido ao proto-compiler para gerar o código. Inclua apenas as partes específicas desse gerador/plug-in de código (por exemplo, não inclua parâmetros -I).
  • $(OUT) é específica para a biblioteca Lang_proto_library. Espera-se que as regras definam como elas interpretam a variável. Para Java, por exemplo, $(OUT) será substituído pelo nome de arquivo src-jar a ser criado.
mnemonic

String; optional; default is "GenProto"

Esse valor será definido como a ação mnemônica na ação protoc.
plugin

Label; optional

Se fornecidos, serão disponibilizados para a ação que chama o protocompilador e transmitidos para o protocompilador: --plugin=protoc-gen-PLUGIN=.
plugin_format_flag

String; optional

Se fornecido, esse valor será transmitido ao proto-compiler para usar o plug-in. O valor precisa conter um único %s que é substituído pelo executável do plug-in. --plugin=protoc-gen-PLUGIN=.
progress_message

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

Esse valor será definido como a mensagem de progresso na ação protoc.
proto_compiler

Label; optional

O executável do compilador proto. Se fornecido, esse destino será usado como um protocompilador para gerar o código.
runtime

Label; optional

Uma biblioteca específica da linguagem na qual o código gerado é compilado. O comportamento exato é específico da biblioteca Lang_proto_library. Java, por exemplo, precisa ser compilado com o ambiente de execução.

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)

Obsoleto. Use https://github.com/bazelbuild/rules_proto.

Use proto_library para definir bibliotecas de buffers de protocolo que podem ser usadas em várias linguagens. Um proto_library pode estar listado na cláusula deps de regras compatíveis, como java_proto_library.

Quando compilado na linha de comando, um proto_library cria um arquivo denominado foo-descriptor-set.proto.bin, que é o conjunto de descritores para as mensagens que a regra define. O arquivo é um FileDescriptorSet serializado, descrito em https://developers.google.com/protocol-buffers/docs/techniques#self-description.

Ele contém apenas informações sobre os arquivos .proto mencionados diretamente por uma regra proto_library. A coleção de conjuntos de descritores transitivos está disponível no provedor Starlark [ProtoInfo].transitive_descriptor_sets. Consulte a documentação em ProtoInfo.java.

Organização de código recomendada:

  • Uma regra proto_library por arquivo .proto.
  • Um arquivo chamado foo.proto estará em uma regra chamada foo_proto, localizada no mesmo pacote.
  • Um [language]_proto_library que envolve um proto_library chamado foo_proto precisa ser chamado de foo_[language]_proto e estar localizado no mesmo pacote.

Argumentos

Atributos
name

Name; required

Um nome exclusivo para o destino.

deps

List of labels; optional

A lista de outras regras proto_library de que a segmentação depende. Um proto_library só pode depender de outros destinos proto_library. Isso pode não depender de bibliotecas específicas da linguagem.
srcs

List of labels; optional

A lista de arquivos .proto e .protodevel que são processados para criar o destino. Geralmente, esse tipo de lista não é vazia. Um caso de uso em que srcs pode estar vazio é uma biblioteca de alias. Essa é uma regra proto_library que tem uma ou mais outras proto_library em deps. Esse padrão pode ser usado, por exemplo, para exportar uma API pública com um nome persistente.
exports

List of labels; optional

Lista de destinos proto_library que podem ser referenciados por meio de "import public" na fonte proto.
import_prefix

String; optional

O prefixo a ser adicionado aos caminhos dos arquivos .proto nesta regra.

Quando definido, os arquivos de origem .proto no atributo srcs dessa regra podem ser acessados pelo valor desse atributo anexado ao caminho relativo ao repositório.

O prefixo no atributo strip_import_prefix é removido antes da adição desse prefixo.

strip_import_prefix

String; optional

O prefixo a ser removido dos caminhos dos arquivos .proto nesta regra.

Quando definidos, os arquivos de origem .proto no atributo srcs desta regra podem ser acessados no caminho com esse prefixo cortado.

Se for um caminho relativo (que não começa com uma barra), ele será usado como relativo ao pacote. Se for absoluto, ele será entendido como um caminho relativo ao repositório.

O prefixo no atributo import_prefix é adicionado depois que ele é removido.