Regras de buffer de protocolo

Regras

proto_lang_toolchain

Ver origem da regra
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)

Se você estiver usando o Bazel, carregue a regra de https://github.com/bazelbuild/rules_proto.

Especifica como uma regra LANG_proto_library (por exemplo, java_proto_library) deve invocar o proto-compilador. Algumas regras LANG_proto_library permitem especificar qual conjunto de ferramentas usar com flags de linha de comando. Consulte a documentação delas.

Normalmente, não é necessário escrever esse tipo de regra, a menos que você queira ajustar o compilador Java.

Não há compilador. O proto-compilador é extraído da regra proto_library a que anexamos. Ele é transmitido como uma flag de linha de comando para o Blaze. Vários recursos exigem que um proto-compilador seja invocado na própria regra proto_library. É útil impor que o compilador usado por LANG_proto_library seja o mesmo que 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

Nome; obrigatório

Um nome exclusivo para esse destino.

blacklisted_protos

Lista de rótulos; o padrão é []

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

String; obrigatório

Esse valor será transmitido ao proto-compilador 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ífico de LANG_proto_library. As regras precisam definir como interpretam essa variável. Para Java, por exemplo, $(OUT) será substituído por o nome do arquivo src-jar a ser criado.
mnemonic

String; o padrão é "GenProto"

Esse valor será definido como o mnemônico na ação protoc.
output_files

String; o padrão é "legacy"

Controla como $(OUT) em command_line é formatado, seja por um caminho para um único arquivo ou diretório de saída no caso de vários arquivos. Os valores possíveis são: "single", "multiple".
plugin

Rótulo; o padrão é None

Se fornecido, será disponibilizado para a ação que chama o proto-compilador e será transmitido para o proto-compilador: --plugin=protoc-gen-PLUGIN=<executable>.
plugin_format_flag

String; o padrão é ""

Se fornecido, esse valor será transmitido ao proto-compilador 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=<executable>.
progress_message

String; o padrão é "Generating proto_library %{label}"

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

Rótulo; o padrão é None

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

Rótulo; o padrão é None

Uma biblioteca específica do idioma em que o código gerado é compilado. O comportamento exato é específico de LANG_proto_library. O Java, por exemplo, precisa ser compilado no ambiente de execução.

proto_library

Ver origem da regra
proto_library(name, deps, srcs, data, allow_exports, 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ários idiomas. Um proto_library pode ser listado na cláusula deps de regras compatíveis, como java_proto_library.

Quando compilada na linha de comando, uma proto_library cria um arquivo chamado foo-descriptor-set.proto.bin, que é o conjunto de descritores para as mensagens das origens de regra. O arquivo é um FileDescriptorSet serializado, descrito em https://developers.google.com/protocol-buffers/docs/techniques#self-description (links em inglês).

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, que está localizada no mesmo pacote.
  • Uma [language]_proto_library que envolve uma proto_library chamada foo_proto precisa ser chamada de foo_[language]_proto e estar localizada no mesmo pacote.

Argumentos

Atributos
name

Nome; obrigatório

Um nome exclusivo para esse destino.

deps

Lista de rótulos; o padrão é []

A lista de outras regras proto_library de que o destino depende. Um proto_library só pode depender de outros destinos proto_library. Ela não pode depender de bibliotecas específicas do idioma.
srcs

Lista de rótulos; o padrão é []

A lista de .proto e .protodevel arquivos que são processados para criar o destino. Geralmente, essa é uma lista não vazia. Um caso de uso onde 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 para, por exemplo, exportar uma API pública com um nome persistente.
allow_exports

Rótulo; o padrão é None

Uma lista de permissões opcional que impede que a biblioteca proto seja reexportada ou usada em lang_proto_library que não esteja em um dos pacotes listados.
exports

Lista de rótulos; o padrão é []

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

String; o padrão é ""

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

Quando definido, os arquivos de origem .proto no atributo srcs dessa regra ficam acessíveis em é o valor desse atributo anexado ao caminho relativo ao repositório.

O prefixo no atributo strip_import_prefix é removido antes que este prefixo seja adicionado.

strip_import_prefix

String; o padrão é ""

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

Quando definido, os arquivos de origem .proto no atributo srcs dessa regra ficam acessíveis no caminho com esse prefixo cortado.

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

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