Regras de buffer de protocolo

Informar um problema Ver fonte Nightly · 8.3 · 8.2 · 8.1 ·

Regras

cc_proto_library

Ver origem da regra
cc_proto_library(name, deps, aspect_hints, compatible_with, deprecation, exec_compatible_with, exec_group_compatible_with, exec_properties, features, package_metadata, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)

O cc_proto_library gera código C++ de arquivos .proto.

deps precisa apontar para regras de proto_library .

Exemplo:


cc_library(
    name = "lib",
    deps = [":foo_cc_proto"],
)

cc_proto_library(
    name = "foo_cc_proto",
    deps = [":foo_proto"],
)

proto_library(
    name = "foo_proto",
)

Argumentos

Atributos
name

Nome: obrigatório

Um nome exclusivo para essa segmentação.

deps

Lista de rótulos. O padrão é [].

A lista de regras proto_library para gerar código C++.

java_lite_proto_library

Ver origem da regra
java_lite_proto_library(name, deps, aspect_hints, compatible_with, deprecation, exec_compatible_with, exec_group_compatible_with, exec_properties, features, package_metadata, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)

O java_lite_proto_library gera código Java de arquivos .proto.

deps precisa apontar para regras de proto_library .

Exemplo:


java_library(
    name = "lib",
    runtime_deps = [":foo"],
)

java_lite_proto_library(
    name = "foo",
    deps = [":bar"],
)

proto_library(
    name = "bar",
)

Argumentos

Atributos
name

Nome: obrigatório

Um nome exclusivo para essa segmentação.

deps

Lista de rótulos. O padrão é [].

A lista de regras proto_library para gerar código Java.

java_proto_library

Ver origem da regra
java_proto_library(name, deps, aspect_hints, compatible_with, deprecation, exec_compatible_with, exec_group_compatible_with, exec_properties, features, licenses, package_metadata, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)

O java_proto_library gera código Java de arquivos .proto.

deps precisa apontar para regras de proto_library .

Exemplo:


java_library(
    name = "lib",
    runtime_deps = [":foo_java_proto"],
)

java_proto_library(
    name = "foo_java_proto",
    deps = [":foo_proto"],
)

proto_library(
    name = "foo_proto",
)

Argumentos

Atributos
name

Nome: obrigatório

Um nome exclusivo para essa segmentação.

deps

Lista de rótulos. O padrão é [].

A lista de regras proto_library para gerar código Java.

proto_library

Ver origem da regra
proto_library(name, deps, srcs, data, allow_exports, aspect_hints, compatible_with, deprecation, exec_compatible_with, exec_group_compatible_with, exec_properties, exports, features, import_prefix, licenses, package_metadata, restricted_to, strip_import_prefix, tags, target_compatible_with, testonly, toolchains, visibility)

Use proto_library para definir bibliotecas de buffers de protocolo que podem ser usadas em várias linguagens. Um proto_library pode ser 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 chamado foo-descriptor-set.proto.bin, que é o conjunto de descritores para as mensagens que a regra origina. 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 pelo provedor [ProtoInfo].transitive_descriptor_sets do Starlark. Consulte a documentação em proto_info.bzl.

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.
  • 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

Nome: obrigatório

Um nome exclusivo para essa segmentação.

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. Não pode depender de bibliotecas específicas de linguagem.
srcs

Lista de rótulos. O padrão é [].

A lista de arquivos .proto e .protodevel que são processados para criar o destino. Normalmente, essa é uma 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 proto_library em deps. Esse padrão pode ser usado, por exemplo, para exportar uma API pública com um nome permanente.
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 está 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 fonte proto. É um erro usar "import public" sem listar a biblioteca correspondente no atributo "exports". Observe que você precisa listar a biblioteca em "deps" e "exports", já que nem todas as implementações de lang_proto_library foram alteradas ainda.
import_prefix

String; o padrão é ""

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

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

O prefixo no atributo strip_import_prefix é removido antes de ser adicionado.

strip_import_prefix

String; o padrão é "/"

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

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

Se for um caminho relativo (não começar com uma barra), ele será considerado 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 o prefixo é removido.

py_proto_library

Ver origem da regra
py_proto_library(name, deps, aspect_hints, compatible_with, deprecation, exec_compatible_with, exec_group_compatible_with, exec_properties, features, package_metadata, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)
Use "py_proto_library" para gerar bibliotecas Python de arquivos ".proto". A convenção é nomear a regra "py_proto_library" como "foo_py_pb2" quando ela envolve a regra "proto_library" "foo_proto". "deps" precisa apontar para uma regra "proto_library". Exemplo: ```starlark py_library( name = "lib", deps = [":foo_py_pb2"], ) py_proto_library( name = "foo_py_pb2", deps = [":foo_proto"], ) proto_library( name = "foo_proto", srcs = ["foo.proto"], ) ```

Argumentos

Atributos
name

Nome: obrigatório

Um nome exclusivo para essa segmentação.

deps

Lista de rótulos. O padrão é [].

A lista de regras "proto_library" para gerar bibliotecas Python. Normalmente, esse é apenas um destino: a biblioteca proto de interesse. Pode ser qualquer destino que forneça "ProtoInfo".

proto_lang_toolchain

Ver origem da regra
proto_lang_toolchain(name, allowlist_different_package, aspect_hints, blacklisted_protos, command_line, compatible_with, deprecation, exec_compatible_with, exec_group_compatible_with, exec_properties, features, mnemonic, output_files, package_metadata, plugin, plugin_format_flag, progress_message, protoc_minimal_do_not_use, restricted_to, runtime, tags, target_compatible_with, testonly, toolchain_type, toolchains, visibility)

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

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

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

Não há um compilador. O proto-compiler é retirado 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-compiler seja invocado na própria regra proto_library. É recomendável garantir que o compilador usado por LANG_proto_library seja o mesmo que o usado por 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 essa segmentação.

allowlist_different_package

Rótulo; o padrão é None

blacklisted_protos

Lista de rótulos. O padrão é [].

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

String; obrigatório

Esse valor será transmitido ao proto-compiler para gerar o código. Inclua apenas as partes específicas desse gerador de código/plug-in (por exemplo, não inclua parâmetros -I)
  • $(OUT) é específico da LANG_proto_library. As regras precisam definir como interpretar essa variável. Por exemplo, em Java, $(OUT) será substituído pelo 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 um diretório de saída no caso de vários arquivos. Os valores possíveis são: "single" e "multiple".
plugin

Rótulo; o padrão é None

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

String; o padrão é ""

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=<executable>.
progress_message

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

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

Rótulo; o padrão é None

runtime

Rótulo; o padrão é None

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

Rótulo; o padrão é None

proto_toolchain

Ver origem da regra
proto_toolchain(name, aspect_hints, command_line, compatible_with, deprecation, exec_compatible_with, exec_group_compatible_with, exec_properties, features, mnemonic, output_files, package_metadata, progress_message, proto_compiler, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)

Argumentos

Atributos
name

Nome: obrigatório

Um nome exclusivo para essa segmentação.

command_line

String; o padrão é "--descriptor_set_out=%s"

mnemonic

String; o padrão é "GenProtoDescriptorSet"

output_files

String; o padrão é "single"

progress_message

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

proto_compiler

Rótulo; o padrão é None