Protocol Buffers - Google's data interchange format (grpc依赖)
https://developers.google.com/protocol-buffers/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
137 lines
4.3 KiB
137 lines
4.3 KiB
# This BUILD file shows how to use protobuf with bazel. Before you can use |
|
# proto_library/<lang>_proto_library rules in a BUILD file, you need to |
|
# include protobuf repo as remote repositories in your WORKSPACE file. See |
|
# the WORKSPACE file in the same directory with this BUILD file for an |
|
# example. |
|
|
|
load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_proto_library") |
|
load("@rules_java//java:defs.bzl", "java_binary", "java_lite_proto_library", "java_proto_library") |
|
load("@rules_pkg//:mappings.bzl", "pkg_files", "strip_prefix") |
|
load("@rules_proto//proto:defs.bzl", "proto_library") |
|
|
|
# For each .proto file, a proto_library target should be defined. This target |
|
# is not bound to any particular language. Instead, it defines the dependency |
|
# graph of the .proto files (i.e., proto imports) and serves as the provider |
|
# of .proto source files to the protocol compiler. |
|
# |
|
# Remote repository "com_google_protobuf" must be defined to use this rule. |
|
proto_library( |
|
name = "addressbook_proto", |
|
srcs = ["addressbook.proto"], |
|
deps = ["@com_google_protobuf//:timestamp_proto"], |
|
) |
|
|
|
# The cc_proto_library rule generates C++ code for a proto_library rule. It |
|
# must have exactly one proto_library dependency. If you want to use multiple |
|
# proto_library targets, create a separate cc_proto_library target for each |
|
# of them. |
|
# |
|
# Remote repository "com_google_protobuf_cc" must be defined to use this rule. |
|
cc_proto_library( |
|
name = "addressbook_cc_proto", |
|
deps = [":addressbook_proto"], |
|
) |
|
|
|
# cc_library/cc_binary targets can depend on cc_proto_library targets. |
|
cc_binary( |
|
name = "add_person_cpp", |
|
srcs = ["add_person.cc"], |
|
deps = [":addressbook_cc_proto"], |
|
) |
|
|
|
cc_binary( |
|
name = "list_people_cpp", |
|
srcs = ["list_people.cc"], |
|
deps = [":addressbook_cc_proto"], |
|
) |
|
|
|
# Similar to cc_proto_library but for Java. |
|
# |
|
# Remote repository "com_google_protobuf_java" must be defined to use this rule. |
|
java_proto_library( |
|
name = "addressbook_java_proto", |
|
deps = [":addressbook_proto"], |
|
) |
|
|
|
java_binary( |
|
name = "add_person_java", |
|
srcs = ["AddPerson.java"], |
|
main_class = "AddPerson", |
|
deps = [":addressbook_java_proto"], |
|
) |
|
|
|
java_binary( |
|
name = "list_people_java", |
|
srcs = ["ListPeople.java"], |
|
main_class = "ListPeople", |
|
deps = [":addressbook_java_proto"], |
|
) |
|
|
|
# Java lite. |
|
# |
|
# Remote repository "com_google_protobuf_javalite" must be defined to use this |
|
# rule. |
|
java_lite_proto_library( |
|
name = "addressbook_java_lite_proto", |
|
deps = [":addressbook_proto"], |
|
) |
|
|
|
# Java lite API is a subset of the regular Java API so if you only uses this |
|
# subset in your code, you can actually compile your code against both (i.e., |
|
# share code between server build and Android build). |
|
# |
|
# The lite version has a smaller code size, and you can see that by comparing |
|
# the resulted .jar file: |
|
# |
|
# $ bazel build :add_person_java_deploy.jar :add_person_java_lite_deploy.jar |
|
# $ ls -l bazel-bin/*_deploy.jar |
|
# -r-xr-xr-x 1 xiaofeng eng 1230797 Sep 8 12:24 bazel-bin/add_person_java_deploy.jar |
|
# -r-xr-xr-x 1 xiaofeng eng 236166 Sep 8 12:24 bazel-bin/add_person_java_lite_deploy.jar |
|
# |
|
# In the above example, the lite .jar file is 6 times smaller. With proper |
|
# proguard inlining/stripping, the difference can be much more larger than |
|
# that. |
|
java_binary( |
|
name = "add_person_java_lite", |
|
srcs = ["AddPerson.java"], |
|
main_class = "AddPerson", |
|
deps = [":addressbook_java_lite_proto"], |
|
) |
|
|
|
java_binary( |
|
name = "list_people_java_lite", |
|
srcs = ["ListPeople.java"], |
|
main_class = "ListPeople", |
|
deps = [":addressbook_java_lite_proto"], |
|
) |
|
|
|
# Files included in all source distributions |
|
pkg_files( |
|
name = "dist_files", |
|
srcs = [ |
|
"AddPerson.java", |
|
"BUILD", |
|
"CMakeLists.txt", |
|
"ListPeople.java", |
|
"Makefile", |
|
"README.md", |
|
"WORKSPACE", |
|
"add_person.cc", |
|
"add_person.dart", |
|
"add_person.py", |
|
"addressbook.proto", |
|
"go/cmd/add_person/add_person.go", |
|
"go/cmd/add_person/add_person_test.go", |
|
"go/cmd/list_people/list_people.go", |
|
"go/cmd/list_people/list_people_test.go", |
|
"go/go.mod", |
|
"go/go.sum", |
|
"list_people.cc", |
|
"list_people.dart", |
|
"list_people.py", |
|
"pubspec.yaml", |
|
], |
|
prefix = "examples/", |
|
strip_prefix = strip_prefix.from_root(""), |
|
visibility = ["//visibility:public"], |
|
)
|
|
|