Reglas de búfer de protocolo

Denuncia un problema Ver fuente Nightly · 7.4 . 7.3 · 7.2 · 7.1 · 7.0 · 6.5

Reglas

cc_proto_library

Ver la fuente de la regla
cc_proto_library(name, deps, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)

cc_proto_library genera código C++ a partir de archivos .proto.

deps debe apuntar a reglas proto_library .

Ejemplo:


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

Nombre: Obligatorio

Un nombre único para este objetivo.

deps

Es una lista de etiquetas. El valor predeterminado es [].

Es la lista de reglas de proto_library para las que se genera código C++.

java_lite_proto_library

Ver la fuente de la regla
java_lite_proto_library(name, deps, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)

java_lite_proto_library genera código Java a partir de archivos .proto.

deps debe apuntar a reglas proto_library .

Ejemplo:


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

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

proto_library(
    name = "bar",
)

Argumentos

Atributos
name

Nombre: Obligatorio

Un nombre único para este objetivo.

deps

Es una lista de etiquetas. El valor predeterminado es [].

Es la lista de reglas de proto_library para las que se genera código Java.

java_proto_library

Ver la fuente de la regla
java_proto_library(name, deps, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, licenses, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)

java_proto_library genera código Java a partir de archivos .proto.

deps debe apuntar a reglas proto_library .

Ejemplo:


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

Nombre: Obligatorio

Un nombre único para este objetivo.

deps

Es una lista de etiquetas. El valor predeterminado es [].

Es la lista de reglas de proto_library para las que se genera código Java.

proto_library

Ver la fuente de la regla
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, toolchains, visibility)

Si usas Bazel, carga la regla desde https://github.com/bazelbuild/rules_proto.

Usa proto_library para definir bibliotecas de búferes de protocolo que se pueden usar desde varios lenguajes. Se puede incluir un proto_library en la cláusula deps de las reglas compatibles, como java_proto_library.

Cuando se compila en la línea de comandos, un proto_library crea un archivo llamado foo-descriptor-set.proto.bin, que es el descriptor establecido para los mensajes de la fuente de reglas. El archivo es un FileDescriptorSet serializado, que se describe en https://developers.google.com/protocol-buffers/docs/techniques#self-description.

Solo contiene información sobre los archivos .proto que menciona directamente una regla proto_library. La colección de conjuntos de descriptores transitivos está disponible a través del proveedor [ProtoInfo].transitive_descriptor_sets Starlark. Consulta la documentación en proto_info.bzl.

Organización de código recomendada:

  • Una regla proto_library por archivo .proto
  • Un archivo llamado foo.proto estará en una regla llamada foo_proto, que se encuentra en el mismo paquete.
  • Un [language]_proto_library que une un proto_library llamado foo_proto debe llamarse foo_[language]_proto y estar ubicado en el mismo paquete.

Argumentos

Atributos
name

Nombre: Obligatorio

Un nombre único para este objetivo.

deps

Es una lista de etiquetas. El valor predeterminado es [].

Es la lista de otras reglas proto_library de las que depende el destino. Un proto_library solo puede depender de otros objetivos proto_library. Es posible que no dependa de bibliotecas específicas del lenguaje.
srcs

Es una lista de etiquetas. El valor predeterminado es [].

Es la lista de archivos .proto y .protodevel que se procesan para crear el destino. Por lo general, es una lista no vacía. Un caso de uso en el que srcs puede estar vacío es una biblioteca de alias. Esta es una regla proto_library que tiene una o más bibliotecas proto_library en deps. Este patrón se puede usar, por ejemplo, para exportar una API pública con un nombre persistente.
allow_exports

Etiqueta (Label); el valor predeterminado es None

Una lista de entidades permitidas opcional que evita que la biblioteca de protos se vuelva a exportar o se use en una biblioteca de protos de lenguaje que no está en uno de los paquetes enumerados.
exports

Es una lista de etiquetas. El valor predeterminado es [].

Es la lista de destinos de proto_library a los que se puede hacer referencia a través de "import public" en la fuente de proto. Se produce un error si usas "import public", pero no enumeras la biblioteca correspondiente en el atributo exports. Ten en cuenta que enumeraste la biblioteca en dependencias y exportaciones, ya que aún no se cambiaron todas las implementaciones de lang_proto_library.
import_prefix

Cadena; el valor predeterminado es ""

Es el prefijo que se agregará a las rutas de acceso de los archivos .proto en esta regla.

Cuando se establece, se puede acceder a los archivos fuente .proto en el atributo srcs de esta regla en el valor de este atributo que se antepone a su ruta de acceso relativa al repositorio.

El prefijo del atributo strip_import_prefix se quita antes de agregar este prefijo.

strip_import_prefix

Cadena; el valor predeterminado es "/"

Es el prefijo que se quitará de las rutas de acceso de los archivos .proto en esta regla.

Cuando se establece, se puede acceder a los archivos fuente .proto en el atributo srcs de esta regla en su ruta de acceso con este prefijo cortado.

Si es una ruta de acceso relativa (no comienza con una barra), se considera una ruta de acceso relativa al paquete. Si es una ruta de acceso absoluta, se entiende como una ruta de acceso relativa al repositorio.

El prefijo del atributo import_prefix se agrega después de que se quita este prefijo.

py_proto_library

Ver la fuente de la regla
py_proto_library(name, deps, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)
Usa "py_proto_library" para generar bibliotecas de Python a partir de archivos ".proto". La convención es nombrar la regla "py_proto_library" como "foo_py_pb2" cuando une la regla "proto_library" "foo_proto". "deps" debe apuntar a una regla "proto_library". Ejemplo: ```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

Nombre: Obligatorio

Un nombre único para este objetivo.

deps

Es una lista de etiquetas. El valor predeterminado es [].

Es la lista de reglas "proto_library" para las que se generarán bibliotecas de Python. Por lo general, solo se usa un objetivo: la biblioteca de proto de interés. Puede ser cualquier destino que proporcione "ProtoInfo".

proto_lang_toolchain

Ver la fuente de la regla
proto_lang_toolchain(name, allowlist_different_package, blacklisted_protos, command_line, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, mnemonic, output_files, plugin, plugin_format_flag, progress_message, protoc_minimal_do_not_use, restricted_to, runtime, tags, target_compatible_with, testonly, toolchain_type, toolchains, visibility)

Si usas Bazel, carga la regla desde https://github.com/bazelbuild/rules_proto.

Especifica cómo una regla LANG_proto_library (p.ej., java_proto_library) debe invocar al protocompilador. Algunas reglas de LANG_proto_library permiten especificar qué cadena de herramientas usar con marcas de línea de comandos. Consulta su documentación.

Por lo general, no debes escribir ese tipo de reglas, a menos que quieras ajustar tu compilador de Java.

No hay compilador. El protocompilador se toma de la regla proto_library a la que nos adjuntamos. Se pasa como una marca de línea de comandos a Blaze. Varias funciones requieren que se invoque un compilador de proto en la propia regla proto_library. Es beneficioso aplicar el compilador que usa LANG_proto_library es el mismo que el que usa proto_library.

Ejemplos

Un ejemplo simple sería el siguiente:


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

Argumentos

Atributos
name

Nombre: Obligatorio

Un nombre único para este objetivo.

allowlist_different_package

Etiqueta (Label); el valor predeterminado es None

blacklisted_protos

Es una lista de etiquetas. El valor predeterminado es [].

No se generará código para los archivos en el atributo srcs de blacklisted_protos. Se usa para archivos .proto que ya están vinculados a entornos de ejecución de proto, como any.proto.
command_line

Cadena; obligatorio

Este valor se pasará al protocompilador para generar el código. Incluye solo las partes específicas de este generador de código o complemento (p. ej., no incluyas parámetros -I).
  • $(OUT) es específico de LANG_proto_library. Se espera que las reglas definan cómo interpretan esta variable. En Java, por ejemplo, $(OUT) se reemplazará por el nombre del archivo src-jar que se creará.
mnemonic

Cadena; el valor predeterminado es "GenProto"

Este valor se establecerá como mnemónico en la acción de protoc.
output_files

Cadena; el valor predeterminado es "legacy"

Controla cómo se formatea $(OUT) en command_line, ya sea a través de una ruta de acceso a un solo archivo o al directorio de salida en caso de varios archivos. Los valores posibles son “single” y “multiple”.
plugin

Etiqueta (Label); el valor predeterminado es None

Si se proporciona, estará disponible para la acción que llama al protocompilador y se le pasará al protocompilador: --plugin=protoc-gen-PLUGIN=<executable>.
plugin_format_flag

Cadena; el valor predeterminado es ""

Si se proporciona, este valor se pasará a proto-compiler para usar el complemento. El valor debe contener un solo %s que se reemplaza por el ejecutable del complemento. --plugin=protoc-gen-PLUGIN=<executable>.
progress_message

Cadena; el valor predeterminado es "Generating proto_library %{label}"

Este valor se establecerá como el mensaje de progreso en la acción de protoc.
protoc_minimal_do_not_use

Etiqueta (Label); el valor predeterminado es None

runtime

Etiqueta (Label); el valor predeterminado es None

Es una biblioteca específica del lenguaje con la que se compila el código generado. El comportamiento exacto es específico de LANG_proto_library. Java, por ejemplo, debe compilarse en el entorno de ejecución.
toolchain_type

Etiqueta (Label); el valor predeterminado es None

proto_toolchain

Ver la fuente de la regla
proto_toolchain(name, command_line, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, mnemonic, output_files, progress_message, proto_compiler, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)

Argumentos

Atributos
name

Nombre: Obligatorio

Un nombre único para este objetivo.

command_line

Cadena; el valor predeterminado es "--descriptor_set_out=%s"

mnemonic

Cadena; el valor predeterminado es "GenProtoDescriptorSet"

output_files

Cadena; el valor predeterminado es "single"

progress_message

Cadena; el valor predeterminado es "Generating Descriptor Set proto_library %{label}"

proto_compiler

Etiqueta (Label); el valor predeterminado es None