• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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