1# Copyright 2022 The Pigweed Authors 2# 3# Licensed under the Apache License, Version 2.0 (the "License"); you may not 4# use this file except in compliance with the License. You may obtain a copy of 5# the License at 6# 7# https://www.apache.org/licenses/LICENSE-2.0 8# 9# Unless required by applicable law or agreed to in writing, software 10# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 11# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 12# License for the specific language governing permissions and limitations under 13# the License. 14 15load("@rules_cc//cc:cc_library.bzl", "cc_library") 16load("//pw_bloat:pw_cc_size_binary.bzl", "pw_cc_size_binary") 17load("//pw_bloat:pw_size_diff.bzl", "pw_size_diff") 18load("//pw_bloat:pw_size_table.bzl", "pw_size_table") 19 20package( 21 default_visibility = ["//visibility:public"], 22 features = ["-layering_check"], 23) 24 25licenses(["notice"]) 26 27pw_cc_size_binary( 28 name = "decoder_partial_target", 29 srcs = [ 30 "decoder_partial.cc", 31 ], 32 deps = [ 33 "//pw_bloat:bloat_this_binary", 34 "//pw_preprocessor", 35 "//pw_protobuf", 36 ], 37) 38 39pw_size_diff( 40 name = "decoder_partial_diff", 41 base = "//pw_bloat:bloat_base", 42 label = "Full wire-format pw_protobuf decoder", 43 target = ":decoder_partial_target", 44) 45 46pw_size_table( 47 name = "decoder_partial", 48 reports = [ 49 ":decoder_partial_diff", 50 ], 51) 52 53pw_cc_size_binary( 54 name = "decoder_incremental_target", 55 srcs = [ 56 "decoder_incremental.cc", 57 ], 58 deps = [ 59 "//pw_bloat:bloat_this_binary", 60 "//pw_preprocessor", 61 "//pw_protobuf", 62 ], 63) 64 65pw_size_diff( 66 name = "decoder_incremental_diff", 67 base = ":decoder_partial_target", 68 label = "Incremental cost of decoding additional fields", 69 target = ":decoder_incremental_target", 70) 71 72pw_size_table( 73 name = "decoder_incremental", 74 reports = [ 75 ":decoder_incremental_diff", 76 ], 77) 78 79cc_library( 80 name = "proto_bloat", 81 srcs = [ 82 "proto_bloat.cc", 83 ], 84 hdrs = ["proto_bloat.h"], 85 implementation_deps = ["//pw_containers:vector"], 86 deps = [ 87 "//pw_preprocessor", 88 "//pw_protobuf", 89 "//pw_status", 90 "//pw_stream", 91 ], 92) 93 94pw_cc_size_binary( 95 name = "proto_base", 96 srcs = [ 97 "proto_base.cc", 98 ], 99 deps = [ 100 ":proto_bloat", 101 "//pw_bloat:bloat_this_binary", 102 ], 103) 104 105pw_cc_size_binary( 106 name = "encode_decode_core", 107 srcs = [ 108 "encode_decode_core.cc", 109 ], 110 deps = [ 111 ":proto_bloat", 112 "//pw_bloat:bloat_this_binary", 113 ], 114) 115 116pw_cc_size_binary( 117 name = "message_core", 118 srcs = [ 119 "message_core.cc", 120 ], 121 deps = [ 122 ":proto_bloat", 123 "//pw_bloat:bloat_this_binary", 124 ], 125) 126 127pw_cc_size_binary( 128 name = "messages_no_codegen", 129 srcs = ["simple_codegen_comparison.cc"], 130 defines = ["_PW_PROTOBUF_SIZE_REPORT_NO_CODEGEN=1"], 131 deps = [ 132 ":proto_bloat", 133 "//pw_bloat:bloat_this_binary", 134 "//pw_protobuf:codegen_test_proto_pwpb", 135 ], 136) 137 138pw_cc_size_binary( 139 name = "messages_wire_format", 140 srcs = ["simple_codegen_comparison.cc"], 141 defines = ["_PW_PROTOBUF_SIZE_REPORT_WIRE_FORMAT=1"], 142 deps = [ 143 ":proto_bloat", 144 "//pw_bloat:bloat_this_binary", 145 "//pw_protobuf:codegen_test_proto_pwpb", 146 ], 147) 148 149pw_cc_size_binary( 150 name = "messages_message", 151 srcs = ["simple_codegen_comparison.cc"], 152 defines = ["_PW_PROTOBUF_SIZE_REPORT_MESSAGE=1"], 153 deps = [ 154 ":proto_bloat", 155 "//pw_bloat:bloat_this_binary", 156 "//pw_protobuf:codegen_test_proto_pwpb", 157 ], 158) 159 160pw_cc_size_binary( 161 name = "oneof_no_codegen", 162 srcs = ["oneof_codegen_comparison.cc"], 163 defines = ["_PW_PROTOBUF_SIZE_REPORT_NO_CODEGEN=1"], 164 deps = [ 165 ":proto_bloat", 166 "//pw_bloat:bloat_this_binary", 167 "//pw_protobuf:codegen_test_proto_pwpb", 168 ], 169) 170 171pw_cc_size_binary( 172 name = "oneof_wire_format", 173 srcs = ["oneof_codegen_comparison.cc"], 174 defines = ["_PW_PROTOBUF_SIZE_REPORT_WIRE_FORMAT=1"], 175 deps = [ 176 ":proto_bloat", 177 "//pw_bloat:bloat_this_binary", 178 "//pw_protobuf:codegen_test_proto_pwpb", 179 ], 180) 181 182pw_cc_size_binary( 183 name = "oneof_message", 184 srcs = ["oneof_codegen_comparison.cc"], 185 defines = ["_PW_PROTOBUF_SIZE_REPORT_MESSAGE=1"], 186 deps = [ 187 ":proto_bloat", 188 "//pw_bloat:bloat_this_binary", 189 "//pw_protobuf:codegen_test_proto_pwpb", 190 ], 191) 192 193pw_size_diff( 194 name = "protobuf_overview_encode_decode_core", 195 base = ":proto_base", 196 label = "Full wire-format proto encode/decode library", 197 source_filter = "pw::protobuf::*|section .code", 198 target = ":encode_decode_core", 199) 200 201pw_size_diff( 202 name = "protobuf_overview_message_core", 203 base = ":proto_base", 204 label = "Including table-based `Message` encoder and decoder", 205 source_filter = "pw::protobuf::*|section .code", 206 target = ":message_core", 207) 208 209pw_size_table( 210 name = "protobuf_overview", 211 reports = [ 212 ":protobuf_overview_encode_decode_core", 213 ":protobuf_overview_message_core", 214 ], 215) 216 217_PROTOBUF_SOURCE_FILTER = "pw::protobuf_size_report::*" 218 219pw_size_diff( 220 name = "simple_codegen_size_direct_wire_encoder", 221 base = ":message_core", 222 label = "Direct wire format proto encoder", 223 source_filter = _PROTOBUF_SOURCE_FILTER, 224 target = ":messages_no_codegen", 225) 226 227pw_size_diff( 228 name = "simple_codegen_size_wrapped_wire_encoder", 229 base = ":message_core", 230 label = "Generated wrappers for wire format encoder", 231 source_filter = _PROTOBUF_SOURCE_FILTER, 232 target = ":messages_wire_format", 233) 234 235pw_size_diff( 236 name = "simple_codegen_size_message_encoder", 237 base = ":message_core", 238 label = "Generated message encoder", 239 source_filter = _PROTOBUF_SOURCE_FILTER, 240 target = ":messages_message", 241) 242 243pw_size_table( 244 name = "simple_codegen_size_comparison", 245 reports = [ 246 ":simple_codegen_size_direct_wire_encoder", 247 ":simple_codegen_size_wrapped_wire_encoder", 248 ":simple_codegen_size_message_encoder", 249 ], 250) 251 252pw_size_diff( 253 name = "oneof_codegen_size_direct_wire_encoder", 254 base = ":message_core", 255 label = "Direct wire format proto encoder", 256 source_filter = _PROTOBUF_SOURCE_FILTER, 257 target = ":oneof_no_codegen", 258) 259 260pw_size_diff( 261 name = "oneof_codegen_size_wrapped_wire_encoder", 262 base = ":message_core", 263 label = "Generated wrappers for wire format encoder", 264 source_filter = _PROTOBUF_SOURCE_FILTER, 265 target = ":oneof_wire_format", 266) 267 268pw_size_diff( 269 name = "oneof_codegen_size_message_encoder", 270 base = ":message_core", 271 label = "Generated message encoder", 272 source_filter = _PROTOBUF_SOURCE_FILTER, 273 target = ":oneof_message", 274) 275 276pw_size_table( 277 name = "oneof_codegen_size_comparison", 278 reports = [ 279 ":oneof_codegen_size_direct_wire_encoder", 280 ":oneof_codegen_size_wrapped_wire_encoder", 281 ":oneof_codegen_size_message_encoder", 282 ], 283) 284