| # 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.bazel", | 
 |         "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"], | 
 | ) |