Quy tắc vùng đệm giao thức

Báo cáo vấn đề Xem nguồn Nightly · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

Quy tắc

cc_proto_library

Xem nguồn quy tắc
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 tạo mã C++ từ các tệp .proto.

deps phải trỏ đến các quy tắc proto_library .

Ví dụ:


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

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

proto_library(
    name = "foo_proto",
)

Đối số

Thuộc tính
name

Tên; bắt buộc

Tên riêng cho mục tiêu này.

deps

Danh sách nhãn; mặc định là []

Danh sách các quy tắc proto_library để tạo mã C++.

java_lite_proto_library

Xem nguồn quy tắc
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 tạo mã Java từ các tệp .proto.

deps phải trỏ đến các quy tắc proto_library .

Ví dụ:


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

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

proto_library(
    name = "bar",
)

Đối số

Thuộc tính
name

Tên; bắt buộc

Tên riêng cho mục tiêu này.

deps

Danh sách nhãn; mặc định là []

Danh sách các quy tắc proto_library để tạo mã Java.

java_proto_library

Xem nguồn quy tắc
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 tạo mã Java từ các tệp .proto.

deps phải trỏ đến các quy tắc proto_library .

Ví dụ:


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

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

proto_library(
    name = "foo_proto",
)

Đối số

Thuộc tính
name

Tên; bắt buộc

Tên riêng cho mục tiêu này.

deps

Danh sách nhãn; mặc định là []

Danh sách các quy tắc proto_library để tạo mã Java.

proto_library

Xem nguồn quy tắc
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)

Sử dụng proto_library để xác định các thư viện vùng đệm giao thức có thể được dùng từ nhiều ngôn ngữ. proto_library có thể được liệt kê trong mệnh đề deps của các quy tắc được hỗ trợ, chẳng hạn như java_proto_library.

Khi được biên dịch trên dòng lệnh, proto_library sẽ tạo một tệp có tên là foo-descriptor-set.proto.bin, đây là tập hợp bộ mô tả cho các thông báo mà quy tắc srcs. Tệp này là một FileDescriptorSet được chuyển đổi tuần tự. Bạn có thể xem nội dung mô tả về tệp này tại https://developers.google.com/protocol-buffers/docs/techniques#self-description.

Nó chỉ chứa thông tin về các tệp .proto được đề cập trực tiếp theo quy tắc proto_library; tập hợp các tập hợp bộ mô tả bắc cầu có sẵn thông qua trình cung cấp [ProtoInfo].transitive_descriptor_sets Starlark. Xem tài liệu trong proto_info.bzl.

Cấu trúc mã nên dùng:

  • Mỗi tệp .proto có một quy tắc proto_library.
  • Tệp có tên foo.proto sẽ nằm trong một quy tắc có tên foo_proto, nằm trong cùng một gói.
  • Một [language]_proto_library bao bọc một proto_library có tên là foo_proto phải được gọi là foo_[language]_proto và nằm trong cùng một gói.

Đối số

Thuộc tính
name

Tên; bắt buộc

Tên riêng cho mục tiêu này.

deps

Danh sách nhãn; mặc định là []

Danh sách các quy tắc proto_library khác mà mục tiêu phụ thuộc vào. proto_library chỉ có thể phụ thuộc vào các mục tiêu proto_library khác. Thư viện này có thể không phụ thuộc vào các thư viện dành riêng cho ngôn ngữ.
srcs

Danh sách nhãn; mặc định là []

Danh sách các tệp .proto.protodevel được xử lý để tạo mục tiêu. Đây thường là một danh sách không trống. Một trường hợp sử dụng mà srcs có thể trống là alias-library. Đây là một quy tắc proto_library có một hoặc nhiều proto_library khác trong deps. Bạn có thể dùng mẫu này để xuất một API công khai dưới một tên cố định.
allow_exports

Nhãn; mặc định là None

Một danh sách cho phép không bắt buộc giúp ngăn thư viện proto được xuất lại hoặc sử dụng trong lang_proto_library không có trong một trong các gói được liệt kê.
exports

Danh sách nhãn; mặc định là []

Danh sách các mục tiêu proto_library có thể được tham chiếu thông qua "import public" trong nguồn proto. Đây là lỗi nếu bạn sử dụng "import public" nhưng không liệt kê thư viện tương ứng trong thuộc tính xuất. Xin lưu ý rằng bạn phải liệt kê thư viện trong cả deps và exports vì chưa có tất cả các triển khai lang_proto_library được thay đổi.
import_prefix

Chuỗi; giá trị mặc định là ""

Tiền tố cần thêm vào đường dẫn của các tệp .proto trong quy tắc này.

Khi được thiết lập, các tệp nguồn .proto trong thuộc tính srcs của quy tắc này có thể truy cập được tại giá trị của thuộc tính này được thêm vào trước đường dẫn tương đối của kho lưu trữ.

Tiền tố trong thuộc tính strip_import_prefix sẽ bị xoá trước khi tiền tố này được thêm vào.

strip_import_prefix

Chuỗi; giá trị mặc định là "/"

Tiền tố cần loại bỏ khỏi đường dẫn của các tệp .proto trong quy tắc này.

Khi được đặt, các tệp nguồn .proto trong thuộc tính srcs của quy tắc này có thể truy cập tại đường dẫn của chúng với tiền tố này bị cắt.

Nếu là đường dẫn tương đối (không bắt đầu bằng dấu gạch chéo), thì đường dẫn đó được coi là đường dẫn tương đối của gói. Nếu là đường dẫn tuyệt đối, thì đường dẫn đó được hiểu là đường dẫn tương đối của kho lưu trữ.

Tiền tố trong thuộc tính import_prefix sẽ được thêm sau khi tiền tố này bị loại bỏ.

py_proto_library

Xem nguồn quy tắc
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)
Sử dụng "py_proto_library" để tạo thư viện Python từ các tệp ".proto". Theo quy ước, hãy đặt tên cho quy tắc "py_proto_library" là "foo_py_pb2", khi quy tắc này bao bọc quy tắc "proto_library" "foo_proto". "deps" phải trỏ đến quy tắc "proto_library". Ví dụ: ```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"], ) ```

Đối số

Thuộc tính
name

Tên; bắt buộc

Tên riêng cho mục tiêu này.

deps

Danh sách nhãn; mặc định là []

Danh sách các quy tắc "proto_library" để tạo thư viện Python. Thông thường, đây chỉ là một đích duy nhất: thư viện proto mà bạn quan tâm. Đó có thể là bất kỳ mục tiêu nào cung cấp "ProtoInfo".

proto_lang_toolchain

Xem nguồn quy tắc
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)

Nếu sử dụng Bazel, vui lòng tải quy tắc từ https://github.com/bazelbuild/rules_proto.

Chỉ định cách hoạt động của quy tắc LANG_proto_library (ví dụ: java_proto_library) sẽ gọi trình biên dịch giao thức. Một số quy tắc LANG_proto_library cho phép chỉ định chuỗi công cụ cần sử dụng bằng cách dùng cờ dòng lệnh; hãy tham khảo tài liệu của các quy tắc đó.

Thông thường, bạn không nên viết những loại quy tắc đó, trừ phi bạn muốn điều chỉnh trình biên dịch Java.

Không có trình biên dịch. Trình biên dịch giao thức được lấy từ quy tắc proto_library mà chúng ta đính kèm. Thư mục này được truyền dưới dạng cờ hiệu dòng lệnh đến Blaze. Một số tính năng yêu cầu phải gọi trình biên dịch giao thức trên chính quy tắc proto_library. Việc thực thi trình biên dịch mà LANG_proto_library sử dụng giống với trình biên dịch mà proto_library sử dụng sẽ mang lại lợi ích.

Ví dụ

Ví dụ đơn giản:


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

Đối số

Thuộc tính
name

Tên; bắt buộc

Tên riêng cho mục tiêu này.

allowlist_different_package

Nhãn; mặc định là None

blacklisted_protos

Danh sách nhãn; mặc định là []

Không có mã nào được tạo cho các tệp trong thuộc tính srcs của blacklisted_protos. Điều này được dùng cho các tệp .proto đã được liên kết vào thời gian chạy proto, chẳng hạn như any.proto.
command_line

Chuỗi; bắt buộc

Giá trị này sẽ được chuyển đến trình biên dịch proto để tạo mã. Chỉ bao gồm các phần dành riêng cho trình tạo mã/trình bổ trợ này (ví dụ: không bao gồm các tham số -I)
  • $(OUT) dành riêng cho LANG_proto_library. Các quy tắc dự kiến sẽ xác định cách chúng diễn giải biến này. Ví dụ: đối với Java, $(OUT) sẽ được thay thế bằng tên tệp src-jar cần tạo.
mnemonic

Chuỗi; giá trị mặc định là "GenProto"

Giá trị này sẽ được đặt làm mã ghi nhớ cho thao tác protoc.
output_files

Chuỗi; giá trị mặc định là "legacy"

Kiểm soát cách định dạng $(OUT) trong command_line, bằng cách sử dụng đường dẫn đến một tệp duy nhất hoặc thư mục đầu ra trong trường hợp có nhiều tệp. Các giá trị có thể là: "single", "multiple".
plugin

Nhãn; mặc định là None

Nếu được cung cấp, sẽ được cung cấp cho thao tác gọi trình biên dịch giao thức và sẽ được truyền đến trình biên dịch giao thức:--plugin=protoc-gen-PLUGIN=<executable>.
plugin_format_flag

Chuỗi; giá trị mặc định là ""

Nếu được cung cấp, giá trị này sẽ được truyền đến trình biên dịch proto để sử dụng trình bổ trợ. Giá trị phải chứa một %s duy nhất được thay thế bằng tệp thực thi của trình bổ trợ. --plugin=protoc-gen-PLUGIN=<executable>.
progress_message

Chuỗi; giá trị mặc định là "Generating proto_library %{label}"

Giá trị này sẽ được đặt làm thông báo tiến trình trên thao tác protoc.
protoc_minimal_do_not_use

Nhãn; mặc định là None

runtime

Nhãn; mặc định là None

Một thư viện dành riêng cho ngôn ngữ mà mã được tạo sẽ được biên dịch. Hành vi chính xác tuỳ thuộc vào LANG_proto_library. Ví dụ: Java sẽ biên dịch dựa trên thời gian chạy.
toolchain_type

Nhãn; mặc định là None

proto_toolchain

Xem nguồn quy tắc
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)

Đối số

Thuộc tính
name

Tên; bắt buộc

Tên riêng cho mục tiêu này.

command_line

Chuỗi; giá trị mặc định là "--descriptor_set_out=%s"

mnemonic

Chuỗi; giá trị mặc định là "GenProtoDescriptorSet"

output_files

Chuỗi; giá trị mặc định là "single"

progress_message

Chuỗi; giá trị mặc định là "Generating Descriptor Set proto_library %{label}"

proto_compiler

Nhãn; mặc định là None