Joshua Haberman | 823eb09 | 2021-04-05 12:26:41 -0700 | [diff] [blame] | 1 | # Copyright (c) 2009-2021, Google LLC |
Joshua Haberman | e59d2c8 | 2021-04-05 10:47:53 -0700 | [diff] [blame] | 2 | # 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 | |
Joshua Haberman | e3f41de | 2020-10-17 13:15:58 -0700 | [diff] [blame] | 26 | load( |
| 27 | "//bazel:upb_proto_library.bzl", |
| 28 | "upb_proto_library", |
| 29 | "upb_proto_reflection_library", |
| 30 | ) |
Joshua Haberman | 4bd34da | 2020-11-04 20:16:47 -0800 | [diff] [blame] | 31 | load( |
| 32 | ":build_defs.bzl", |
| 33 | "tmpl_cc_binary", |
Joshua Haberman | 9c87f11 | 2020-11-12 17:44:02 -0800 | [diff] [blame] | 34 | "cc_optimizefor_proto_library", |
Joshua Haberman | 555fbbc | 2020-11-10 20:20:06 -0800 | [diff] [blame] | 35 | "expand_suffixes", |
Joshua Haberman | d2446fd | 2020-11-11 18:02:42 -0800 | [diff] [blame] | 36 | "proto_library", |
Joshua Haberman | 4bd34da | 2020-11-04 20:16:47 -0800 | [diff] [blame] | 37 | ) |
Joshua Haberman | e3f41de | 2020-10-17 13:15:58 -0700 | [diff] [blame] | 38 | |
Joshua Haberman | 2c16649 | 2020-10-17 15:49:11 -0700 | [diff] [blame] | 39 | licenses(["notice"]) |
Joshua Haberman | b7dc774 | 2020-10-17 15:17:36 -0700 | [diff] [blame] | 40 | |
Joshua Haberman | e3f41de | 2020-10-17 13:15:58 -0700 | [diff] [blame] | 41 | proto_library( |
Joshua Haberman | 555fbbc | 2020-11-10 20:20:06 -0800 | [diff] [blame] | 42 | name = "descriptor_proto", |
Joshua Haberman | e3f41de | 2020-10-17 13:15:58 -0700 | [diff] [blame] | 43 | srcs = ["descriptor.proto"], |
| 44 | ) |
| 45 | |
| 46 | upb_proto_library( |
| 47 | name = "benchmark_descriptor_upb_proto", |
Joshua Haberman | 555fbbc | 2020-11-10 20:20:06 -0800 | [diff] [blame] | 48 | deps = [":descriptor_proto"], |
Joshua Haberman | e3f41de | 2020-10-17 13:15:58 -0700 | [diff] [blame] | 49 | ) |
| 50 | |
| 51 | upb_proto_reflection_library( |
| 52 | name = "benchmark_descriptor_upb_proto_reflection", |
Joshua Haberman | 555fbbc | 2020-11-10 20:20:06 -0800 | [diff] [blame] | 53 | deps = [":descriptor_proto"], |
Joshua Haberman | e3f41de | 2020-10-17 13:15:58 -0700 | [diff] [blame] | 54 | ) |
| 55 | |
Joshua Haberman | c3b5637 | 2020-10-31 13:12:18 -0700 | [diff] [blame] | 56 | upb_proto_reflection_library( |
| 57 | name = "ads_upb_proto_reflection", |
| 58 | deps = ["@com_google_googleapis//:ads_proto"], |
| 59 | ) |
| 60 | |
Joshua Haberman | e3f41de | 2020-10-17 13:15:58 -0700 | [diff] [blame] | 61 | cc_proto_library( |
| 62 | name = "benchmark_descriptor_cc_proto", |
Joshua Haberman | 555fbbc | 2020-11-10 20:20:06 -0800 | [diff] [blame] | 63 | deps = [":descriptor_proto"], |
Joshua Haberman | e3f41de | 2020-10-17 13:15:58 -0700 | [diff] [blame] | 64 | ) |
| 65 | |
| 66 | proto_library( |
| 67 | name = "benchmark_descriptor_sv_proto", |
| 68 | srcs = ["descriptor_sv.proto"], |
| 69 | ) |
| 70 | |
| 71 | cc_proto_library( |
| 72 | name = "benchmark_descriptor_sv_cc_proto", |
| 73 | deps = [":benchmark_descriptor_sv_proto"], |
| 74 | ) |
| 75 | |
Joshua Haberman | c944638 | 2022-03-05 10:19:56 -0800 | [diff] [blame^] | 76 | cc_test( |
Joshua Haberman | e3f41de | 2020-10-17 13:15:58 -0700 | [diff] [blame] | 77 | name = "benchmark", |
| 78 | testonly = 1, |
| 79 | srcs = ["benchmark.cc"], |
| 80 | deps = [ |
Joshua Haberman | 1eb7bd3 | 2020-11-05 10:39:38 -0800 | [diff] [blame] | 81 | ":ads_upb_proto_reflection", |
Joshua Haberman | e3f41de | 2020-10-17 13:15:58 -0700 | [diff] [blame] | 82 | ":benchmark_descriptor_cc_proto", |
| 83 | ":benchmark_descriptor_sv_cc_proto", |
| 84 | ":benchmark_descriptor_upb_proto", |
| 85 | ":benchmark_descriptor_upb_proto_reflection", |
| 86 | "//:descriptor_upb_proto", |
| 87 | "//:reflection", |
| 88 | "@com_github_google_benchmark//:benchmark_main", |
Joshua Haberman | 1eb7bd3 | 2020-11-05 10:39:38 -0800 | [diff] [blame] | 89 | "@com_google_absl//absl/container:flat_hash_set", |
Joshua Haberman | e3f41de | 2020-10-17 13:15:58 -0700 | [diff] [blame] | 90 | ], |
| 91 | ) |
Joshua Haberman | 8a3470c | 2020-10-18 10:35:39 -0700 | [diff] [blame] | 92 | |
| 93 | # Size benchmarks. |
| 94 | |
Joshua Haberman | 4bd34da | 2020-11-04 20:16:47 -0800 | [diff] [blame] | 95 | SIZE_BENCHMARKS = { |
| 96 | "empty": "Empty", |
| 97 | "descriptor": "FileDescriptorSet", |
Joshua Haberman | 555fbbc | 2020-11-10 20:20:06 -0800 | [diff] [blame] | 98 | "100_msgs": "Message100", |
| 99 | "200_msgs": "Message200", |
| 100 | "100_fields": "Message", |
| 101 | "200_fields": "Message", |
Joshua Haberman | 4bd34da | 2020-11-04 20:16:47 -0800 | [diff] [blame] | 102 | } |
| 103 | |
| 104 | py_binary( |
Joshua Haberman | 555fbbc | 2020-11-10 20:20:06 -0800 | [diff] [blame] | 105 | name = "gen_synthetic_protos", |
| 106 | srcs = ["gen_synthetic_protos.py"], |
Joshua Haberman | da48e01 | 2020-11-11 19:00:52 -0800 | [diff] [blame] | 107 | python_version = "PY3", |
Joshua Haberman | 555fbbc | 2020-11-10 20:20:06 -0800 | [diff] [blame] | 108 | ) |
| 109 | |
| 110 | py_binary( |
| 111 | name = "gen_upb_binary_c", |
| 112 | srcs = ["gen_upb_binary_c.py"], |
Joshua Haberman | 8b7dabe | 2020-11-10 20:44:27 -0800 | [diff] [blame] | 113 | python_version = "PY3", |
Joshua Haberman | 555fbbc | 2020-11-10 20:20:06 -0800 | [diff] [blame] | 114 | ) |
| 115 | |
| 116 | py_binary( |
| 117 | name = "gen_protobuf_binary_cc", |
| 118 | srcs = ["gen_protobuf_binary_cc.py"], |
Joshua Haberman | 8b7dabe | 2020-11-10 20:44:27 -0800 | [diff] [blame] | 119 | python_version = "PY3", |
Joshua Haberman | 4bd34da | 2020-11-04 20:16:47 -0800 | [diff] [blame] | 120 | ) |
| 121 | |
| 122 | genrule( |
Joshua Haberman | 555fbbc | 2020-11-10 20:20:06 -0800 | [diff] [blame] | 123 | name = "do_gen_synthetic_protos", |
| 124 | tools = [":gen_synthetic_protos"], |
| 125 | outs = [ |
| 126 | "100_msgs.proto", |
| 127 | "200_msgs.proto", |
| 128 | "100_fields.proto", |
| 129 | "200_fields.proto", |
| 130 | ], |
Joshua Haberman | da48e01 | 2020-11-11 19:00:52 -0800 | [diff] [blame] | 131 | cmd = "$(execpath :gen_synthetic_protos) $(RULEDIR)", |
Joshua Haberman | 555fbbc | 2020-11-10 20:20:06 -0800 | [diff] [blame] | 132 | ) |
| 133 | |
| 134 | proto_library( |
| 135 | name = "100_msgs_proto", |
| 136 | srcs = ["100_msgs.proto"], |
| 137 | ) |
| 138 | |
| 139 | proto_library( |
| 140 | name = "200_msgs_proto", |
| 141 | srcs = ["200_msgs.proto"], |
| 142 | ) |
| 143 | |
| 144 | proto_library( |
| 145 | name = "100_fields_proto", |
| 146 | srcs = ["100_fields.proto"], |
| 147 | ) |
| 148 | |
| 149 | proto_library( |
| 150 | name = "200_fields_proto", |
| 151 | srcs = ["200_fields.proto"], |
| 152 | ) |
| 153 | |
| 154 | proto_library( |
| 155 | name = "empty_proto", |
| 156 | srcs = ["empty.proto"], |
Joshua Haberman | 4bd34da | 2020-11-04 20:16:47 -0800 | [diff] [blame] | 157 | ) |
| 158 | |
| 159 | [( |
Joshua Haberman | 8a3470c | 2020-10-18 10:35:39 -0700 | [diff] [blame] | 160 | upb_proto_library( |
Joshua Haberman | 4bd34da | 2020-11-04 20:16:47 -0800 | [diff] [blame] | 161 | name = k + "_upb_proto", |
| 162 | deps = [":" + k + "_proto"], |
| 163 | ), |
Joshua Haberman | 8a3470c | 2020-10-18 10:35:39 -0700 | [diff] [blame] | 164 | cc_proto_library( |
Joshua Haberman | 4bd34da | 2020-11-04 20:16:47 -0800 | [diff] [blame] | 165 | name = k + "_cc_proto", |
| 166 | deps = [":" + k + "_proto"], |
| 167 | ), |
| 168 | tmpl_cc_binary( |
| 169 | name = k + "_upb_binary", |
Joshua Haberman | 8a3470c | 2020-10-18 10:35:39 -0700 | [diff] [blame] | 170 | testonly = 1, |
Joshua Haberman | 555fbbc | 2020-11-10 20:20:06 -0800 | [diff] [blame] | 171 | gen = ":gen_upb_binary_c", |
| 172 | args = [ |
Joshua Haberman | da48e01 | 2020-11-11 19:00:52 -0800 | [diff] [blame] | 173 | package_name() + "/" + k + ".upb.h", |
Joshua Haberman | 555fbbc | 2020-11-10 20:20:06 -0800 | [diff] [blame] | 174 | "upb_benchmark_" + v, |
| 175 | ], |
Joshua Haberman | 8a3470c | 2020-10-18 10:35:39 -0700 | [diff] [blame] | 176 | deps = [ |
Joshua Haberman | 4bd34da | 2020-11-04 20:16:47 -0800 | [diff] [blame] | 177 | ":" + k + "_upb_proto", |
Joshua Haberman | 8a3470c | 2020-10-18 10:35:39 -0700 | [diff] [blame] | 178 | ], |
Joshua Haberman | 4bd34da | 2020-11-04 20:16:47 -0800 | [diff] [blame] | 179 | ), |
| 180 | tmpl_cc_binary( |
| 181 | name = k + "_protobuf_binary", |
Joshua Haberman | 8a3470c | 2020-10-18 10:35:39 -0700 | [diff] [blame] | 182 | testonly = 1, |
Joshua Haberman | 555fbbc | 2020-11-10 20:20:06 -0800 | [diff] [blame] | 183 | gen = ":gen_protobuf_binary_cc", |
| 184 | args = [ |
Joshua Haberman | da48e01 | 2020-11-11 19:00:52 -0800 | [diff] [blame] | 185 | package_name() + "/" + k + ".pb.h", |
Joshua Haberman | 555fbbc | 2020-11-10 20:20:06 -0800 | [diff] [blame] | 186 | "upb_benchmark::" + v, |
| 187 | ], |
Joshua Haberman | 8a3470c | 2020-10-18 10:35:39 -0700 | [diff] [blame] | 188 | deps = [ |
Joshua Haberman | 4bd34da | 2020-11-04 20:16:47 -0800 | [diff] [blame] | 189 | ":" + k + "_cc_proto", |
Joshua Haberman | 8a3470c | 2020-10-18 10:35:39 -0700 | [diff] [blame] | 190 | ], |
Joshua Haberman | 4bd34da | 2020-11-04 20:16:47 -0800 | [diff] [blame] | 191 | ), |
Joshua Haberman | 9c87f11 | 2020-11-12 17:44:02 -0800 | [diff] [blame] | 192 | cc_optimizefor_proto_library( |
Joshua Haberman | 4bd34da | 2020-11-04 20:16:47 -0800 | [diff] [blame] | 193 | srcs = [k + ".proto"], |
| 194 | outs = [k + "_lite.proto"], |
| 195 | name = k + "_cc_lite_proto", |
Joshua Haberman | 9c87f11 | 2020-11-12 17:44:02 -0800 | [diff] [blame] | 196 | optimize_for = "LITE_RUNTIME", |
Joshua Haberman | 4bd34da | 2020-11-04 20:16:47 -0800 | [diff] [blame] | 197 | ), |
| 198 | tmpl_cc_binary( |
| 199 | name = k + "_lite_protobuf_binary", |
| 200 | testonly = 1, |
Joshua Haberman | 555fbbc | 2020-11-10 20:20:06 -0800 | [diff] [blame] | 201 | gen = ":gen_protobuf_binary_cc", |
| 202 | args = [ |
Joshua Haberman | da48e01 | 2020-11-11 19:00:52 -0800 | [diff] [blame] | 203 | package_name() + "/" + k + "_lite.pb.h", |
Joshua Haberman | 555fbbc | 2020-11-10 20:20:06 -0800 | [diff] [blame] | 204 | "upb_benchmark::" + v, |
| 205 | ], |
Joshua Haberman | 4bd34da | 2020-11-04 20:16:47 -0800 | [diff] [blame] | 206 | deps = [ |
| 207 | ":" + k + "_cc_lite_proto", |
| 208 | ], |
Joshua Haberman | 9c87f11 | 2020-11-12 17:44:02 -0800 | [diff] [blame] | 209 | ), |
| 210 | cc_optimizefor_proto_library( |
| 211 | srcs = [k + ".proto"], |
| 212 | outs = [k + "_codesize.proto"], |
| 213 | name = k + "_cc_codesize_proto", |
| 214 | optimize_for = "CODE_SIZE", |
| 215 | ), |
| 216 | tmpl_cc_binary( |
| 217 | name = k + "_codesize_protobuf_binary", |
| 218 | testonly = 1, |
| 219 | gen = ":gen_protobuf_binary_cc", |
| 220 | args = [ |
| 221 | package_name() + "/" + k + "_codesize.pb.h", |
| 222 | "upb_benchmark::" + v, |
| 223 | ], |
| 224 | deps = [ |
| 225 | ":" + k + "_cc_codesize_proto", |
| 226 | ], |
| 227 | ) |
| 228 | ) for k, v in SIZE_BENCHMARKS.items()] |
Joshua Haberman | 4bd34da | 2020-11-04 20:16:47 -0800 | [diff] [blame] | 229 | |
Joshua Haberman | 555fbbc | 2020-11-10 20:20:06 -0800 | [diff] [blame] | 230 | genrule( |
| 231 | testonly = 1, |
| 232 | name = "size_data", |
| 233 | srcs = expand_suffixes( |
| 234 | SIZE_BENCHMARKS.keys(), |
Joshua Haberman | 9c87f11 | 2020-11-12 17:44:02 -0800 | [diff] [blame] | 235 | suffixes = ["_upb_binary", "_protobuf_binary", "_lite_protobuf_binary", "_codesize_protobuf_binary"], |
Joshua Haberman | 555fbbc | 2020-11-10 20:20:06 -0800 | [diff] [blame] | 236 | ), |
| 237 | outs = ["size_data.txt"], |
Joshua Haberman | 86f671d | 2020-11-11 17:13:40 -0800 | [diff] [blame] | 238 | # We want --format=GNU which counts rodata with data, not text. |
| 239 | cmd = "size $$($$OSTYPE == 'linux-gnu' ? '--format=GNU -d' : '') $(SRCS) > $@", |
Joshua Haberman | 378a27b | 2020-11-11 19:06:14 -0800 | [diff] [blame] | 240 | # "size" sometimes isn't available remotely. |
| 241 | local = 1, |
Joshua Haberman | 555fbbc | 2020-11-10 20:20:06 -0800 | [diff] [blame] | 242 | ) |