| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 | # 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_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"],)
 |