1*1b3f573fSAndroid Build Coastguard Worker# This BUILD file shows how to use protobuf with bazel. Before you can use 2*1b3f573fSAndroid Build Coastguard Worker# proto_library/<lang>_proto_library rules in a BUILD file, you need to 3*1b3f573fSAndroid Build Coastguard Worker# include protobuf repo as remote repositories in your WORKSPACE file. See 4*1b3f573fSAndroid Build Coastguard Worker# the WORKSPACE file in the same directory with this BUILD file for an 5*1b3f573fSAndroid Build Coastguard Worker# example. 6*1b3f573fSAndroid Build Coastguard Worker 7*1b3f573fSAndroid Build Coastguard Workerload("@rules_cc//cc:defs.bzl", "cc_binary", "cc_proto_library") 8*1b3f573fSAndroid Build Coastguard Workerload("@rules_java//java:defs.bzl", "java_binary", "java_lite_proto_library", "java_proto_library") 9*1b3f573fSAndroid Build Coastguard Workerload("@rules_pkg//:mappings.bzl", "pkg_files", "strip_prefix") 10*1b3f573fSAndroid Build Coastguard Workerload("@rules_proto//proto:defs.bzl", "proto_library") 11*1b3f573fSAndroid Build Coastguard Worker 12*1b3f573fSAndroid Build Coastguard Worker# For each .proto file, a proto_library target should be defined. This target 13*1b3f573fSAndroid Build Coastguard Worker# is not bound to any particular language. Instead, it defines the dependency 14*1b3f573fSAndroid Build Coastguard Worker# graph of the .proto files (i.e., proto imports) and serves as the provider 15*1b3f573fSAndroid Build Coastguard Worker# of .proto source files to the protocol compiler. 16*1b3f573fSAndroid Build Coastguard Worker# 17*1b3f573fSAndroid Build Coastguard Worker# Remote repository "com_google_protobuf" must be defined to use this rule. 18*1b3f573fSAndroid Build Coastguard Workerproto_library( 19*1b3f573fSAndroid Build Coastguard Worker name = "addressbook_proto", 20*1b3f573fSAndroid Build Coastguard Worker srcs = ["addressbook.proto"], 21*1b3f573fSAndroid Build Coastguard Worker deps = ["@com_google_protobuf//:timestamp_proto"], 22*1b3f573fSAndroid Build Coastguard Worker) 23*1b3f573fSAndroid Build Coastguard Worker 24*1b3f573fSAndroid Build Coastguard Worker# The cc_proto_library rule generates C++ code for a proto_library rule. It 25*1b3f573fSAndroid Build Coastguard Worker# must have exactly one proto_library dependency. If you want to use multiple 26*1b3f573fSAndroid Build Coastguard Worker# proto_library targets, create a separate cc_proto_library target for each 27*1b3f573fSAndroid Build Coastguard Worker# of them. 28*1b3f573fSAndroid Build Coastguard Worker# 29*1b3f573fSAndroid Build Coastguard Worker# Remote repository "com_google_protobuf_cc" must be defined to use this rule. 30*1b3f573fSAndroid Build Coastguard Workercc_proto_library( 31*1b3f573fSAndroid Build Coastguard Worker name = "addressbook_cc_proto", 32*1b3f573fSAndroid Build Coastguard Worker deps = [":addressbook_proto"], 33*1b3f573fSAndroid Build Coastguard Worker) 34*1b3f573fSAndroid Build Coastguard Worker 35*1b3f573fSAndroid Build Coastguard Worker# cc_library/cc_binary targets can depend on cc_proto_library targets. 36*1b3f573fSAndroid Build Coastguard Workercc_binary( 37*1b3f573fSAndroid Build Coastguard Worker name = "add_person_cpp", 38*1b3f573fSAndroid Build Coastguard Worker srcs = ["add_person.cc"], 39*1b3f573fSAndroid Build Coastguard Worker deps = [":addressbook_cc_proto"], 40*1b3f573fSAndroid Build Coastguard Worker) 41*1b3f573fSAndroid Build Coastguard Worker 42*1b3f573fSAndroid Build Coastguard Workercc_binary( 43*1b3f573fSAndroid Build Coastguard Worker name = "list_people_cpp", 44*1b3f573fSAndroid Build Coastguard Worker srcs = ["list_people.cc"], 45*1b3f573fSAndroid Build Coastguard Worker deps = [":addressbook_cc_proto"], 46*1b3f573fSAndroid Build Coastguard Worker) 47*1b3f573fSAndroid Build Coastguard Worker 48*1b3f573fSAndroid Build Coastguard Worker# Similar to cc_proto_library but for Java. 49*1b3f573fSAndroid Build Coastguard Worker# 50*1b3f573fSAndroid Build Coastguard Worker# Remote repository "com_google_protobuf_java" must be defined to use this rule. 51*1b3f573fSAndroid Build Coastguard Workerjava_proto_library( 52*1b3f573fSAndroid Build Coastguard Worker name = "addressbook_java_proto", 53*1b3f573fSAndroid Build Coastguard Worker deps = [":addressbook_proto"], 54*1b3f573fSAndroid Build Coastguard Worker) 55*1b3f573fSAndroid Build Coastguard Worker 56*1b3f573fSAndroid Build Coastguard Workerjava_binary( 57*1b3f573fSAndroid Build Coastguard Worker name = "add_person_java", 58*1b3f573fSAndroid Build Coastguard Worker srcs = ["AddPerson.java"], 59*1b3f573fSAndroid Build Coastguard Worker main_class = "AddPerson", 60*1b3f573fSAndroid Build Coastguard Worker deps = [":addressbook_java_proto"], 61*1b3f573fSAndroid Build Coastguard Worker) 62*1b3f573fSAndroid Build Coastguard Worker 63*1b3f573fSAndroid Build Coastguard Workerjava_binary( 64*1b3f573fSAndroid Build Coastguard Worker name = "list_people_java", 65*1b3f573fSAndroid Build Coastguard Worker srcs = ["ListPeople.java"], 66*1b3f573fSAndroid Build Coastguard Worker main_class = "ListPeople", 67*1b3f573fSAndroid Build Coastguard Worker deps = [":addressbook_java_proto"], 68*1b3f573fSAndroid Build Coastguard Worker) 69*1b3f573fSAndroid Build Coastguard Worker 70*1b3f573fSAndroid Build Coastguard Worker# Java lite. 71*1b3f573fSAndroid Build Coastguard Worker# 72*1b3f573fSAndroid Build Coastguard Worker# Remote repository "com_google_protobuf_javalite" must be defined to use this 73*1b3f573fSAndroid Build Coastguard Worker# rule. 74*1b3f573fSAndroid Build Coastguard Workerjava_lite_proto_library( 75*1b3f573fSAndroid Build Coastguard Worker name = "addressbook_java_lite_proto", 76*1b3f573fSAndroid Build Coastguard Worker deps = [":addressbook_proto"], 77*1b3f573fSAndroid Build Coastguard Worker) 78*1b3f573fSAndroid Build Coastguard Worker 79*1b3f573fSAndroid Build Coastguard Worker# Java lite API is a subset of the regular Java API so if you only uses this 80*1b3f573fSAndroid Build Coastguard Worker# subset in your code, you can actually compile your code against both (i.e., 81*1b3f573fSAndroid Build Coastguard Worker# share code between server build and Android build). 82*1b3f573fSAndroid Build Coastguard Worker# 83*1b3f573fSAndroid Build Coastguard Worker# The lite version has a smaller code size, and you can see that by comparing 84*1b3f573fSAndroid Build Coastguard Worker# the resulted .jar file: 85*1b3f573fSAndroid Build Coastguard Worker# 86*1b3f573fSAndroid Build Coastguard Worker# $ bazel build :add_person_java_deploy.jar :add_person_java_lite_deploy.jar 87*1b3f573fSAndroid Build Coastguard Worker# $ ls -l bazel-bin/*_deploy.jar 88*1b3f573fSAndroid Build Coastguard Worker# -r-xr-xr-x 1 xiaofeng eng 1230797 Sep 8 12:24 bazel-bin/add_person_java_deploy.jar 89*1b3f573fSAndroid Build Coastguard Worker# -r-xr-xr-x 1 xiaofeng eng 236166 Sep 8 12:24 bazel-bin/add_person_java_lite_deploy.jar 90*1b3f573fSAndroid Build Coastguard Worker# 91*1b3f573fSAndroid Build Coastguard Worker# In the above example, the lite .jar file is 6 times smaller. With proper 92*1b3f573fSAndroid Build Coastguard Worker# proguard inlining/stripping, the difference can be much more larger than 93*1b3f573fSAndroid Build Coastguard Worker# that. 94*1b3f573fSAndroid Build Coastguard Workerjava_binary( 95*1b3f573fSAndroid Build Coastguard Worker name = "add_person_java_lite", 96*1b3f573fSAndroid Build Coastguard Worker srcs = ["AddPerson.java"], 97*1b3f573fSAndroid Build Coastguard Worker main_class = "AddPerson", 98*1b3f573fSAndroid Build Coastguard Worker deps = [":addressbook_java_lite_proto"], 99*1b3f573fSAndroid Build Coastguard Worker) 100*1b3f573fSAndroid Build Coastguard Worker 101*1b3f573fSAndroid Build Coastguard Workerjava_binary( 102*1b3f573fSAndroid Build Coastguard Worker name = "list_people_java_lite", 103*1b3f573fSAndroid Build Coastguard Worker srcs = ["ListPeople.java"], 104*1b3f573fSAndroid Build Coastguard Worker main_class = "ListPeople", 105*1b3f573fSAndroid Build Coastguard Worker deps = [":addressbook_java_lite_proto"], 106*1b3f573fSAndroid Build Coastguard Worker) 107*1b3f573fSAndroid Build Coastguard Worker 108*1b3f573fSAndroid Build Coastguard Worker# Files included in all source distributions 109*1b3f573fSAndroid Build Coastguard Workerpkg_files( 110*1b3f573fSAndroid Build Coastguard Worker name = "dist_files", 111*1b3f573fSAndroid Build Coastguard Worker srcs = [ 112*1b3f573fSAndroid Build Coastguard Worker "AddPerson.java", 113*1b3f573fSAndroid Build Coastguard Worker "BUILD.bazel", 114*1b3f573fSAndroid Build Coastguard Worker "CMakeLists.txt", 115*1b3f573fSAndroid Build Coastguard Worker "ListPeople.java", 116*1b3f573fSAndroid Build Coastguard Worker "Makefile", 117*1b3f573fSAndroid Build Coastguard Worker "README.md", 118*1b3f573fSAndroid Build Coastguard Worker "WORKSPACE", 119*1b3f573fSAndroid Build Coastguard Worker "add_person.cc", 120*1b3f573fSAndroid Build Coastguard Worker "add_person.dart", 121*1b3f573fSAndroid Build Coastguard Worker "add_person.py", 122*1b3f573fSAndroid Build Coastguard Worker "addressbook.proto", 123*1b3f573fSAndroid Build Coastguard Worker "go/cmd/add_person/add_person.go", 124*1b3f573fSAndroid Build Coastguard Worker "go/cmd/add_person/add_person_test.go", 125*1b3f573fSAndroid Build Coastguard Worker "go/cmd/list_people/list_people.go", 126*1b3f573fSAndroid Build Coastguard Worker "go/cmd/list_people/list_people_test.go", 127*1b3f573fSAndroid Build Coastguard Worker "go/go.mod", 128*1b3f573fSAndroid Build Coastguard Worker "go/go.sum", 129*1b3f573fSAndroid Build Coastguard Worker "list_people.cc", 130*1b3f573fSAndroid Build Coastguard Worker "list_people.dart", 131*1b3f573fSAndroid Build Coastguard Worker "list_people.py", 132*1b3f573fSAndroid Build Coastguard Worker "pubspec.yaml", 133*1b3f573fSAndroid Build Coastguard Worker ], 134*1b3f573fSAndroid Build Coastguard Worker prefix = "examples/", 135*1b3f573fSAndroid Build Coastguard Worker strip_prefix = strip_prefix.from_root(""), 136*1b3f573fSAndroid Build Coastguard Worker visibility = ["//visibility:public"], 137*1b3f573fSAndroid Build Coastguard Worker) 138