Aturan Buffering Protokol

Laporkan masalah Lihat sumber Nightly · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

Aturan

cc_proto_library

Lihat sumber aturan
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)

cc_proto_library menghasilkan kode C++ dari file .proto.

deps harus mengarah ke aturan proto_library .

Contoh:


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

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

proto_library(
    name = "foo_proto",
)

Argumen

Atribut
name

Nama; wajib

Nama unik untuk target ini.

deps

Daftar label; defaultnya adalah []

Daftar aturan proto_library untuk menghasilkan kode C++.

java_lite_proto_library

Lihat sumber aturan
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)

java_lite_proto_library menghasilkan kode Java dari file .proto.

deps harus mengarah ke aturan proto_library .

Contoh:


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

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

proto_library(
    name = "bar",
)

Argumen

Atribut
name

Nama; wajib

Nama unik untuk target ini.

deps

Daftar label; defaultnya adalah []

Daftar aturan proto_library untuk membuat kode Java.

java_proto_library

Lihat sumber aturan
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)

java_proto_library menghasilkan kode Java dari file .proto.

deps harus mengarah ke aturan proto_library .

Contoh:


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

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

proto_library(
    name = "foo_proto",
)

Argumen

Atribut
name

Nama; wajib

Nama unik untuk target ini.

deps

Daftar label; defaultnya adalah []

Daftar aturan proto_library untuk membuat kode Java.

proto_library

Lihat sumber aturan
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)

Gunakan proto_library untuk menentukan library buffer protokol yang dapat digunakan dari beberapa bahasa. proto_library dapat dicantumkan dalam klausa deps dari aturan yang didukung, seperti java_proto_library.

Saat dikompilasi di command line, proto_library akan membuat file bernama foo-descriptor-set.proto.bin, yang merupakan set deskriptor untuk pesan yang di-src oleh aturan. File adalah FileDescriptorSet yang diserialisasi, yang dijelaskan di https://developers.google.com/protocol-buffers/docs/techniques#self-description.

Hanya berisi informasi tentang file .proto yang disebutkan secara langsung oleh aturan proto_library; kumpulan set deskriptor transitif tersedia melalui penyedia Starlark [ProtoInfo].transitive_descriptor_sets. Lihat dokumentasi di proto_info.bzl.

Organisasi kode yang direkomendasikan:

  • Satu aturan proto_library per file .proto.
  • File bernama foo.proto akan berada dalam aturan bernama foo_proto, yang berada di paket yang sama.
  • [language]_proto_library yang membungkus proto_library bernama foo_proto harus disebut foo_[language]_proto, dan berada di paket yang sama.

Argumen

Atribut
name

Nama; wajib

Nama unik untuk target ini.

deps

Daftar label; defaultnya adalah []

Daftar aturan proto_library lainnya yang bergantung pada target. proto_library hanya dapat bergantung pada target proto_library lainnya. Mungkin tidak bergantung pada library khusus bahasa.
srcs

Daftar label; defaultnya adalah []

Daftar file .proto dan .protodevel yang diproses untuk membuat target. Ini biasanya berupa daftar yang tidak kosong. Salah satu kasus penggunaan ketika srcs dapat kosong adalah alias-library. Ini adalah aturan proto_library yang memiliki satu atau beberapa proto_library lain di deps. Pola ini dapat digunakan untuk, misalnya, mengekspor API publik dengan nama persisten.
allow_exports

Label; defaultnya adalah None

Daftar yang diizinkan opsional yang mencegah library proto diekspor ulang atau digunakan di lang_proto_library yang tidak ada dalam salah satu paket yang tercantum.
exports

Daftar label; defaultnya adalah []

Daftar target proto_library yang dapat dirujuk melalui "import public" di sumber proto. Error akan terjadi jika Anda menggunakan "import public" tetapi tidak mencantumkan library yang sesuai dalam atribut exports. Perhatikan bahwa Anda harus mencantumkan library di deps dan exports karena tidak semua implementasi lang_proto_library telah diubah.
import_prefix

String; default-nya adalah ""

Awalan yang akan ditambahkan ke jalur file .proto dalam aturan ini.

Jika disetel, file sumber .proto dalam atribut srcs aturan ini dapat diakses di nilai atribut ini yang ditambahkan ke jalur relatif repositorinya.

Awalan dalam atribut strip_import_prefix dihapus sebelum awalan ini ditambahkan.

strip_import_prefix

String; default-nya adalah "/"

Awalan yang akan dihapus dari jalur file .proto dalam aturan ini.

Jika disetel, file sumber .proto dalam atribut srcs aturan ini dapat diakses di jalur dengan awalan ini yang dipotong.

Jika berupa jalur relatif (tidak diawali dengan garis miring), jalur tersebut dianggap sebagai jalur relatif paket. Jika absolut, jalur tersebut dipahami sebagai jalur relatif repositori.

Awalan dalam atribut import_prefix ditambahkan setelah awalan ini dihapus.

py_proto_library

Lihat sumber aturan
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)
Gunakan `py_proto_library` untuk membuat library Python dari file `.proto`. Konvensinya adalah memberi nama aturan `py_proto_library` `foo_py_pb2`, saat membungkus aturan `proto_library` `foo_proto`. `deps` harus mengarah ke aturan `proto_library`. Contoh: ```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"], ) ```

Argumen

Atribut
name

Nama; wajib

Nama unik untuk target ini.

deps

Daftar label; defaultnya adalah []

Daftar aturan `proto_library` untuk membuat library Python. Biasanya hanya ada satu target: pustaka proto yang diinginkan. Target ini dapat berupa target apa pun yang menyediakan `ProtoInfo`.

proto_lang_toolchain

Lihat sumber aturan
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)

Jika menggunakan Bazel, muat aturan dari https://github.com/bazelbuild/rules_proto.

Menentukan cara aturan LANG_proto_library (misalnya, java_proto_library) harus memanggil proto-compiler. Beberapa aturan LANG_proto_library memungkinkan penentuan toolchain yang akan digunakan menggunakan tanda command line; lihat dokumentasinya.

Biasanya Anda tidak boleh menulis aturan semacam itu kecuali jika Anda ingin menyesuaikan compiler Java.

Tidak ada compiler. Proto-compiler diambil dari aturan proto_library yang kita lampirkan. Nilai ini diteruskan sebagai tanda command line ke Blaze. Beberapa fitur memerlukan pemanggilan proto-compiler pada aturan proto_library itu sendiri. Sebaiknya terapkan compiler yang digunakan LANG_proto_library sama dengan yang digunakan proto_library.

Contoh

Contoh sederhananya adalah:


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

Argumen

Atribut
name

Nama; wajib

Nama unik untuk target ini.

allowlist_different_package

Label; defaultnya adalah None

blacklisted_protos

Daftar label; defaultnya adalah []

Tidak ada kode yang akan dibuat untuk file dalam atribut srcs dari blacklisted_protos. Hal ini digunakan untuk file .proto yang sudah ditautkan ke runtime proto, seperti any.proto.
command_line

String; wajib

Nilai ini akan diteruskan ke proto-compiler untuk menghasilkan kode. Hanya sertakan bagian yang khusus untuk generator/plugin kode ini (misalnya, jangan sertakan parameter -I)
  • $(OUT) khusus untuk LANG_proto_library. Aturan diharapkan menentukan cara menafsirkan variabel ini. Misalnya, untuk Java, $(OUT) akan diganti dengan nama file src-jar yang akan dibuat.
mnemonic

String; default-nya adalah "GenProto"

Nilai ini akan ditetapkan sebagai mnemonic pada tindakan protoc.
output_files

String; default-nya adalah "legacy"

Mengontrol cara $(OUT) dalam command_line diformat, baik berdasarkan jalur ke satu file atau direktori output jika ada beberapa file. Nilai yang mungkin adalah: "single", "multiple".
plugin

Label; defaultnya adalah None

Jika disediakan, akan tersedia untuk tindakan yang memanggil proto-compiler, dan akan diteruskan ke proto-compiler: --plugin=protoc-gen-PLUGIN=<executable>.
plugin_format_flag

String; default-nya adalah ""

Jika diberikan, nilai ini akan diteruskan ke proto-compiler untuk menggunakan plugin. Nilai harus berisi satu %s yang diganti dengan file yang dapat dieksekusi plugin. --plugin=protoc-gen-PLUGIN=<executable>.
progress_message

String; default-nya adalah "Generating proto_library %{label}"

Nilai ini akan ditetapkan sebagai pesan progres pada tindakan protoc.
protoc_minimal_do_not_use

Label; defaultnya adalah None

runtime

Label; defaultnya adalah None

Library khusus bahasa yang digunakan untuk mengompilasi kode yang dihasilkan. Perilaku persisnya khusus untuk LANG_proto_library. Misalnya, Java harus dikompilasi terhadap runtime.
toolchain_type

Label; defaultnya adalah None

proto_toolchain

Lihat sumber aturan
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)

Argumen

Atribut
name

Nama; wajib

Nama unik untuk target ini.

command_line

String; default-nya adalah "--descriptor_set_out=%s"

mnemonic

String; default-nya adalah "GenProtoDescriptorSet"

output_files

String; default-nya adalah "single"

progress_message

String; default-nya adalah "Generating Descriptor Set proto_library %{label}"

proto_compiler

Label; defaultnya adalah None