blob: 92873f3bdcdd29b8423229a3a26f444204a89b98 [file] [log] [blame]
Joshua Haberman823eb092021-04-05 12:26:41 -07001# Copyright (c) 2009-2021, Google LLC
Joshua Habermane59d2c82021-04-05 10:47:53 -07002# All rights reserved.
3#
4# Redistribution and use in source and binary forms, with or without
5# modification, are permitted provided that the following conditions are met:
6# * Redistributions of source code must retain the above copyright
7# notice, this list of conditions and the following disclaimer.
8# * Redistributions in binary form must reproduce the above copyright
9# notice, this list of conditions and the following disclaimer in the
10# documentation and/or other materials provided with the distribution.
11# * Neither the name of Google LLC nor the
12# names of its contributors may be used to endorse or promote products
13# derived from this software without specific prior written permission.
14#
15# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
16# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
17# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18# DISCLAIMED. IN NO EVENT SHALL Google LLC BE LIABLE FOR ANY
19# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
20# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
21# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
22# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
24# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25
Protobuf Teamb8edc712022-03-16 08:24:52 -070026# begin:google_only
Protobuf Team Bot306123e2022-11-04 09:25:30 -070027# load("@rules_cc//cc:defs.bzl", "cc_proto_library")
Protobuf Teamb8edc712022-03-16 08:24:52 -070028# end:google_only
29
Joshua Habermane3f41de2020-10-17 13:15:58 -070030load(
31 "//bazel:upb_proto_library.bzl",
32 "upb_proto_library",
33 "upb_proto_reflection_library",
34)
Joshua Haberman4bd34da2020-11-04 20:16:47 -080035load(
36 ":build_defs.bzl",
Joshua Haberman9c87f112020-11-12 17:44:02 -080037 "cc_optimizefor_proto_library",
Joshua Haberman555fbbc2020-11-10 20:20:06 -080038 "expand_suffixes",
Joshua Habermand2446fd2020-11-11 18:02:42 -080039 "proto_library",
Protobuf Teamb8edc712022-03-16 08:24:52 -070040 "tmpl_cc_binary",
Joshua Haberman4bd34da2020-11-04 20:16:47 -080041)
Joshua Habermane3f41de2020-10-17 13:15:58 -070042
Protobuf Team Bot73ee41c2023-05-23 16:36:40 -070043# begin:google_only
44# package(default_applicable_licenses = ["//:license"])
45# end:google_only
46
Joshua Haberman2c166492020-10-17 15:49:11 -070047licenses(["notice"])
Joshua Habermanb7dc7742020-10-17 15:17:36 -070048
Joshua Habermane3f41de2020-10-17 13:15:58 -070049proto_library(
Joshua Haberman555fbbc2020-11-10 20:20:06 -080050 name = "descriptor_proto",
Joshua Habermane3f41de2020-10-17 13:15:58 -070051 srcs = ["descriptor.proto"],
52)
53
54upb_proto_library(
55 name = "benchmark_descriptor_upb_proto",
Joshua Haberman555fbbc2020-11-10 20:20:06 -080056 deps = [":descriptor_proto"],
Joshua Habermane3f41de2020-10-17 13:15:58 -070057)
58
59upb_proto_reflection_library(
60 name = "benchmark_descriptor_upb_proto_reflection",
Joshua Haberman555fbbc2020-11-10 20:20:06 -080061 deps = [":descriptor_proto"],
Joshua Habermane3f41de2020-10-17 13:15:58 -070062)
63
Joshua Habermanc3b56372020-10-31 13:12:18 -070064upb_proto_reflection_library(
65 name = "ads_upb_proto_reflection",
66 deps = ["@com_google_googleapis//:ads_proto"],
67)
68
Joshua Habermane3f41de2020-10-17 13:15:58 -070069cc_proto_library(
70 name = "benchmark_descriptor_cc_proto",
Joshua Haberman555fbbc2020-11-10 20:20:06 -080071 deps = [":descriptor_proto"],
Joshua Habermane3f41de2020-10-17 13:15:58 -070072)
73
74proto_library(
75 name = "benchmark_descriptor_sv_proto",
76 srcs = ["descriptor_sv.proto"],
77)
78
79cc_proto_library(
80 name = "benchmark_descriptor_sv_cc_proto",
81 deps = [":benchmark_descriptor_sv_proto"],
82)
83
Joshua Habermanc9446382022-03-05 10:19:56 -080084cc_test(
Joshua Habermane3f41de2020-10-17 13:15:58 -070085 name = "benchmark",
86 testonly = 1,
87 srcs = ["benchmark.cc"],
88 deps = [
Joshua Haberman1eb7bd32020-11-05 10:39:38 -080089 ":ads_upb_proto_reflection",
Joshua Habermane3f41de2020-10-17 13:15:58 -070090 ":benchmark_descriptor_cc_proto",
91 ":benchmark_descriptor_sv_cc_proto",
92 ":benchmark_descriptor_upb_proto",
93 ":benchmark_descriptor_upb_proto_reflection",
Joshua Habermand5200142023-03-21 09:16:12 -070094 "//:base",
Joshua Habermane3f41de2020-10-17 13:15:58 -070095 "//:descriptor_upb_proto",
Joshua Habermand5200142023-03-21 09:16:12 -070096 "//:mem",
Joshua Habermane3f41de2020-10-17 13:15:58 -070097 "//:reflection",
98 "@com_github_google_benchmark//:benchmark_main",
Joshua Haberman1eb7bd32020-11-05 10:39:38 -080099 "@com_google_absl//absl/container:flat_hash_set",
Protobuf Teamb8edc712022-03-16 08:24:52 -0700100 "@com_google_protobuf//:protobuf",
Joshua Habermane3f41de2020-10-17 13:15:58 -0700101 ],
102)
Joshua Haberman8a3470c2020-10-18 10:35:39 -0700103
104# Size benchmarks.
105
Joshua Haberman4bd34da2020-11-04 20:16:47 -0800106SIZE_BENCHMARKS = {
107 "empty": "Empty",
108 "descriptor": "FileDescriptorSet",
Joshua Haberman555fbbc2020-11-10 20:20:06 -0800109 "100_msgs": "Message100",
110 "200_msgs": "Message200",
111 "100_fields": "Message",
112 "200_fields": "Message",
Joshua Haberman4bd34da2020-11-04 20:16:47 -0800113}
114
115py_binary(
Joshua Haberman555fbbc2020-11-10 20:20:06 -0800116 name = "gen_synthetic_protos",
117 srcs = ["gen_synthetic_protos.py"],
Joshua Habermanda48e012020-11-11 19:00:52 -0800118 python_version = "PY3",
Joshua Haberman555fbbc2020-11-10 20:20:06 -0800119)
120
121py_binary(
122 name = "gen_upb_binary_c",
123 srcs = ["gen_upb_binary_c.py"],
Joshua Haberman8b7dabe2020-11-10 20:44:27 -0800124 python_version = "PY3",
Joshua Haberman555fbbc2020-11-10 20:20:06 -0800125)
126
127py_binary(
128 name = "gen_protobuf_binary_cc",
129 srcs = ["gen_protobuf_binary_cc.py"],
Joshua Haberman8b7dabe2020-11-10 20:44:27 -0800130 python_version = "PY3",
Joshua Haberman4bd34da2020-11-04 20:16:47 -0800131)
132
133genrule(
Joshua Haberman555fbbc2020-11-10 20:20:06 -0800134 name = "do_gen_synthetic_protos",
Joshua Haberman555fbbc2020-11-10 20:20:06 -0800135 outs = [
136 "100_msgs.proto",
137 "200_msgs.proto",
138 "100_fields.proto",
139 "200_fields.proto",
140 ],
Joshua Habermanda48e012020-11-11 19:00:52 -0800141 cmd = "$(execpath :gen_synthetic_protos) $(RULEDIR)",
Protobuf Teamb8edc712022-03-16 08:24:52 -0700142 tools = [":gen_synthetic_protos"],
Joshua Haberman555fbbc2020-11-10 20:20:06 -0800143)
144
145proto_library(
146 name = "100_msgs_proto",
147 srcs = ["100_msgs.proto"],
148)
149
150proto_library(
151 name = "200_msgs_proto",
152 srcs = ["200_msgs.proto"],
153)
154
155proto_library(
156 name = "100_fields_proto",
157 srcs = ["100_fields.proto"],
158)
159
160proto_library(
161 name = "200_fields_proto",
162 srcs = ["200_fields.proto"],
163)
164
165proto_library(
166 name = "empty_proto",
167 srcs = ["empty.proto"],
Joshua Haberman4bd34da2020-11-04 20:16:47 -0800168)
169
170[(
Protobuf Teamb8edc712022-03-16 08:24:52 -0700171 upb_proto_library(
172 name = k + "_upb_proto",
173 deps = [":" + k + "_proto"],
174 ),
175 cc_proto_library(
176 name = k + "_cc_proto",
177 deps = [":" + k + "_proto"],
178 ),
179 tmpl_cc_binary(
180 name = k + "_upb_binary",
181 testonly = 1,
182 args = [
183 package_name() + "/" + k + ".upb.h",
184 "upb_benchmark_" + v,
185 ],
186 gen = ":gen_upb_binary_c",
187 deps = [
188 ":" + k + "_upb_proto",
189 ],
190 ),
191 tmpl_cc_binary(
192 name = k + "_protobuf_binary",
193 testonly = 1,
194 args = [
195 package_name() + "/" + k + ".pb.h",
196 "upb_benchmark::" + v,
197 ],
198 gen = ":gen_protobuf_binary_cc",
199 deps = [
200 ":" + k + "_cc_proto",
201 ],
202 ),
203 cc_optimizefor_proto_library(
204 name = k + "_cc_lite_proto",
205 srcs = [k + ".proto"],
206 outs = [k + "_lite.proto"],
207 optimize_for = "LITE_RUNTIME",
208 ),
209 tmpl_cc_binary(
210 name = k + "_lite_protobuf_binary",
211 testonly = 1,
212 args = [
213 package_name() + "/" + k + "_lite.pb.h",
214 "upb_benchmark::" + v,
215 ],
216 gen = ":gen_protobuf_binary_cc",
217 deps = [
218 ":" + k + "_cc_lite_proto",
219 ],
220 ),
221 cc_optimizefor_proto_library(
222 name = k + "_cc_codesize_proto",
223 srcs = [k + ".proto"],
224 outs = [k + "_codesize.proto"],
225 optimize_for = "CODE_SIZE",
226 ),
227 tmpl_cc_binary(
228 name = k + "_codesize_protobuf_binary",
229 testonly = 1,
230 args = [
231 package_name() + "/" + k + "_codesize.pb.h",
232 "upb_benchmark::" + v,
233 ],
234 gen = ":gen_protobuf_binary_cc",
235 deps = [
236 ":" + k + "_cc_codesize_proto",
237 ],
238 ),
Joshua Haberman9c87f112020-11-12 17:44:02 -0800239) for k, v in SIZE_BENCHMARKS.items()]
Joshua Haberman4bd34da2020-11-04 20:16:47 -0800240
Joshua Haberman555fbbc2020-11-10 20:20:06 -0800241genrule(
Joshua Haberman555fbbc2020-11-10 20:20:06 -0800242 name = "size_data",
Protobuf Teamb8edc712022-03-16 08:24:52 -0700243 testonly = 1,
Joshua Haberman555fbbc2020-11-10 20:20:06 -0800244 srcs = expand_suffixes(
245 SIZE_BENCHMARKS.keys(),
Protobuf Teamb8edc712022-03-16 08:24:52 -0700246 suffixes = [
247 "_upb_binary",
248 "_protobuf_binary",
249 "_lite_protobuf_binary",
250 "_codesize_protobuf_binary",
251 ],
Joshua Haberman555fbbc2020-11-10 20:20:06 -0800252 ),
253 outs = ["size_data.txt"],
Joshua Haberman86f671d2020-11-11 17:13:40 -0800254 # We want --format=GNU which counts rodata with data, not text.
255 cmd = "size $$($$OSTYPE == 'linux-gnu' ? '--format=GNU -d' : '') $(SRCS) > $@",
Joshua Haberman378a27b2020-11-11 19:06:14 -0800256 # "size" sometimes isn't available remotely.
257 local = 1,
Joshua Habermanc2a0cbe2023-02-06 14:21:25 -0800258 tags = ["no-remote-exec"],
Joshua Haberman555fbbc2020-11-10 20:20:06 -0800259)