Reglas de búfer de protocolo

Reglas

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)

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

Especifica cómo una regla LANG_proto_library (p.ej., java_proto_library) debe invocar el compilador de protocolos. Algunas reglas LANG_proto_library permiten especificar qué cadena de herramientas usar mediante 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 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 protocompilador en la regla proto_library. Resulta beneficioso hacer que el compilador que usa LANG_proto_library sea el mismo que el que hace proto_library.

Ejemplos

Un ejemplo sencillo sería:

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

Argumentos

Atributos
name

Name; required

Un nombre único para este destino.

blacklisted_protos

List of labels; optional

No se generará ningún código para los archivos del 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

String; required

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

String; optional; default is "GenProto"

Este valor se establecerá como el nombre nemotécnico de la acción de protocolo.
plugin

Label; optional

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

String; optional

Si se proporciona, este valor se pasará al compilador de protocolo para que use el complemento. El valor debe contener un solo %s que se reemplace por un ejecutable del complemento. --plugin=protoc-gen-PLUGIN=.
progress_message

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

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

Label; optional

Es el ejecutable del compilador de proto. Si se proporciona, este destino se utilizará como un protocompilador para generar el código.
runtime

Label; optional

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 compilar en el entorno de ejecución.

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)

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 desde varios lenguajes. Un proto_library puede aparecer 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 que 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 mencionados directamente por una regla proto_library. La colección de conjuntos de descriptores transitivos está disponible a través del proveedor [ProtoInfo].transitive_descriptor_sets de Starlark. Consulta la documentación en ProtoInfo.java.

Organización de código recomendada:

  • Una regla proto_library por cada 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

Name; required

Un nombre único para este destino.

deps

List of labels; optional

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 de lenguajes específicos.
srcs

List of labels; optional

La lista de archivos .proto y .protodevel que se procesan para crear el destino. Por lo general, esta lista no está vacía. Un caso de uso en el que srcs puede estar vacío es una alias-library. Esta es una regla proto_library con 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.
exports

List of labels; optional

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

String; optional

El prefijo para agregar a las rutas de acceso de los archivos .proto en esta regla.

Cuando se configura, se puede acceder a los archivos de origen .proto en el atributo srcs de esta regla desde el valor de este atributo antepuesto a su ruta de acceso relativa de repositorio.

Antes de agregar este prefijo, se quita el prefijo del atributo strip_import_prefix.

strip_import_prefix

String; optional

El prefijo que se debe quitar de las rutas de acceso de los archivos .proto en esta regla.

Cuando se configura, 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 relativa (que no comienza con una barra), se toma como una relativa de paquete. Si es una absoluta, se entiende como una ruta relativa de repositorio.

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