xref: /aosp_15_r20/external/protobuf/examples/BUILD.bazel (revision 1b3f573f81763fcece89efc2b6a5209149e44ab8)
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