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

Quy tắc

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)

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

Chỉ định cách 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 cần sử dụng bằng cờ hiệu 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 các loại quy tắc đó trừ khi 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. Chuỗi này được truyền dưới dạng một cờ dòng lệnh cho Blaze. Một số tính năng yêu cầu gọi trình biên dịch proto_library ngay trên chính quy tắc proto_library. Vì vậy, việc thực thi trình biên dịch mà lang_proto_library sử dụng giống như trình biên dịch mà proto_library thực hiện.

Ví dụ

Một ví dụ đơn giản là:

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

Name; required

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

blacklisted_protos

List of labels; optional

Hệ thống sẽ không tạo mã cho các tệp trong thuộc tính srcs của blacklisted_protos. Mã này được dùng cho các tệp .proto đã được liên kết với môi trường thời gian chạy proto, chẳng hạn như any.proto.
command_line

String; required

Giá trị này sẽ được chuyển đến trình biên dịch proto-compiler để tạo mã. Chỉ thê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 tham số -I)
  • $(OUT) là dành riêng cho lang_proto_library. Các quy tắc này 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

String; optional; default is "GenProto"

Giá trị này sẽ được đặt làm ghi nhớ về hành động protoc.
plugin

Label; optional

Nếu được cung cấp, nó sẽ có sẵn cho hành động gọi trình biên dịch proto và được chuyển đến trình biên dịch proto: --plugin=protoc-gen-PLUGIN=.
plugin_format_flag

String; optional

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

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

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

Label; optional

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

Label; optional

Thư viện dành riêng cho ngôn ngữ dùng để biên dịch mã đã tạo. 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

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)

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ể sử dụng được trong 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. Tệp này là phần mô tả được đặt cho các thông điệp mà quy tắc srcs. 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 quy tắc proto_library đề cập trực tiếp; tập hợp các bộ 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 bằng ProtoInfo.java.

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

  • Một quy tắc proto_library cho mỗi .proto tệp.
  • 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 sẽ được gọi là foo_[language]_proto và nằm trong cùng một gói.

Đối số

Thuộc tính
name

Name; required

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

deps

List of labels; optional

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. Quá trình này có thể không phụ thuộc vào thư viện dành riêng cho từng ngôn ngữ.
srcs

List of labels; optional

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à một alias-library (thư viện bí danh). Đây là một quy tắc proto_library có một hoặc nhiều proto_library khác trong deps. Mẫu này có thể được dùng để, chẳng hạn như xuất một API công khai dưới một tên cố định.
exports

List of labels; optional

Danh sách các mục tiêu proto_library có thể được tham chiếu thông qua mục "import công khai" trong nguồn proto.
import_prefix

String; optional

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

Khi đặt, bạn có thể truy cập vào tệp nguồn .proto trong thuộc tính srcs của quy tắc này 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 về 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

String; optional

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

Khi đặ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 được tại đường dẫn của các tệp đó với tiền tố này bị cắt bỏ.

Nếu đó là một đường dẫn tương đối (không bắt đầu bằng dấu gạch chéo), thì đường dẫn đó được xem là đường dẫn tương đối với gói. Nếu đó là giá trị tuyệt đối, thì URL đó được hiểu là đường dẫn tương đối với 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á.