Reglas de búfer de protocolo

Reglas

proto_lang_toolchain

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

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 el compilador de proto. Algunas reglas 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 desees ajustar tu compilador de Java.

No hay compilador. El compilador de proto se toma de la regla proto_library a la que 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 regla proto_library. Es beneficioso aplicar que el compilador que usa LANG_proto_library sea 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 destino.

blacklisted_protos

Lista de etiquetas; el valor predeterminado es []

No se generará código para los archivos en el srcs atributo 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

String; obligatorio

Este valor se pasará al compilador de proto para generar el código. Solo incluye 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. Por ejemplo, para Java, $(OUT) se reemplazará por el nombre de archivo src-jar que se creará.
mnemonic

String; el valor predeterminado es "GenProto"

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

String; el valor predeterminado es "legacy"

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

Etiqueta; el valor predeterminado es None

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

String; el valor predeterminado es ""

Si se proporciona, este valor se pasará al compilador de proto 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

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

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

Etiqueta; el valor predeterminado es None

El ejecutable del compilador de proto. Si se proporciona, este destino se usará como compilador de proto para generar el código.
runtime

Etiqueta; el valor predeterminado es None

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. Por ejemplo, Java debe compilarse en el entorno de ejecución.

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, visibility)

Ya no está disponible. En su lugar, usa https://github.com/bazelbuild/rules_proto.

Usa proto_library para definir bibliotecas de búferes de protocolo que se pueden usar en varios lenguajes. Una proto_library se puede enumerar 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 conjunto de descriptores para los mensajes de la regla srcs. 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 se mencionan directamente en una regla proto_library. La colección de conjuntos de descriptores transitivos está disponible a través del proveedor de Starlark [ProtoInfo].transitive_descriptor_sets. Consulta la documentación en ProtoInfo.java.

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.
  • Una [language]_proto_library que encapsula una proto_library llamada foo_proto debe llamarse foo_[language]_proto y ubicarse en el mismo paquete.

Argumentos

Atributos
name

Nombre; obligatorio

Un nombre único para este destino.

deps

Lista de etiquetas; el valor predeterminado es []

La lista de otras reglas proto_library de las que depende el destino. Una proto_library solo puede depender de otros destinos proto_library. No puede depender de bibliotecas específicas del lenguaje.
srcs

Lista de etiquetas; el valor predeterminado es []

La lista de .proto y .protodevel archivos 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 proto_library en deps. Este patrón se puede usar para, p.ej., exportar una API pública con un nombre persistente.
allow_exports

Etiqueta; el valor predeterminado es None

Una lista de entidades permitidas opcional que impide que la biblioteca de proto se vuelva a exportar o usar en lang_proto_library que no esté en uno de los paquetes enumerados.
exports

Lista de etiquetas; el valor predeterminado es []

Lista de destinos proto_library a los que se puede hacer referencia a través de "import public" en la fuente proto source.
import_prefix

String; el valor predeterminado 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. es el valor de este atributo antepuesto 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

String; el valor predeterminado 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 toma como una relativa al paquete una. Si es una absoluta, se entiende como una ruta de acceso relativa al repositorio.

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