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

Báo cáo vấn đề Xem nguồn Nightly · 8.0 7.4 . 7.3 · 7.2 · 7.1 · 7.0 · 6.5

Quy tắc

proto_lang_toolchain

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

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 một quy tắc LANG_proto_library (ví dụ: java_proto_library) sẽ gọi trình biên dịch proto. Một số quy tắc LANG_proto_library cho phép chỉ định chuỗi công cụ nào sẽ sử dụng bằ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 proto được lấy từ quy tắc proto_library mà chúng ta đính kèm. Cờ này được truyền dưới dạng cờ 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 proto trên chính quy tắc proto_library. Bạn nên 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.

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 duy nhất cho mục tiêu này.

blacklisted_protos

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

Sẽ không có mã nào được tạo cho các tệp trong thuộc tính srcs của blacklisted_protos. Phương thức 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) là dành riêng cho LANG_proto_library. Các quy tắc dự kiến sẽ xác định cách 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 để tạo.
mnemonic

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

Giá trị này sẽ được đặt làm từ viết tắt trên thao tác protoc.
output_files

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

Kiểm soát cách định dạng $(OUT) trong command_line, bằng đường dẫn đến một tệp 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" (đơn), "multiple" (nhiều).
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 proto và sẽ được chuyển đến trình biên dịch proto: --plugin=protoc-gen-PLUGIN=<executable>.
plugin_format_flag

Chuỗi; 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ị này 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; 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.
proto_compiler

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

Tệp thực thi của trình biên dịch proto. Nếu được cung cấp, mục tiêu này sẽ được dùng làm trình biên dịch nguyên mẫu để tạo mã.
runtime

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

Thư viện dành riêng cho ngôn ngữ mà mã được tạo được biên dịch. Hành vi chính xác là dành riêng cho LANG_proto_library. Ví dụ: Java phải biên dịch dựa trên thời gian chạy.

proto_library

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

Không dùng nữa. Thay vào đó, vui lòng sử dụng https://github.com/bazelbuild/rules_proto.

Sử dụng proto_library để xác định các thư viện vùng đệm giao thức có thể được sử 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 foo-descriptor-set.proto.bin. Đây là tập hợp chỉ số mô tả cho các thông báo nguồn quy tắc. Tệp này là một FileDescriptorSet đã chuyển đổi tuần tự, được mô tả trong https://developers.google.com/protocol-buffers/docs/techniques#self-description.

Tệp này 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; bộ sưu tập các tập hợp chỉ số mô tả bắc cầu có sẵn thông qua nhà cung cấp Starlark [ProtoInfo].transitive_descriptor_sets. Xem tài liệu trong ProtoInfo.java.

Cách sắp xếp mã đề xuất:

  • Một quy tắc proto_library cho mỗi tệp .proto.
  • Tệp có tên foo.proto sẽ nằm trong quy tắc có tên foo_proto, nằm trong cùng một gói.
  • [language]_proto_library gói proto_library có tên 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 duy nhất 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. Không được 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à danh sách không trống. Một trường hợp sử dụng mà srcs có thể trống là thư viện-bí danh. Đây là quy tắc proto_library có một hoặc nhiều proto_library khác trong deps. Bạn có thể sử 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

Danh sách cho phép không bắt buộc ngăn việc xuất lại thư viện proto 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" (nhập công khai) trong nguồn proto.
import_prefix

Chuỗi; 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 đặt, bạn có thể truy cập vào các tệp nguồn .proto trong thuộc tính srcs của quy tắc này tại là giá trị của thuộc tính này được thêm vào đầu đườ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 thêm tiền tố này.

strip_import_prefix

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

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

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

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 đó sẽ được coi là đường dẫn tương đối với gói. Nếu là đường dẫn tuyệt đối, thì đường dẫn này được hiểu là đường dẫn tương đối đến kho lưu trữ.

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