• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright 2020 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
15import("//build_overrides/pigweed.gni")
16
17import("$dir_pw_bloat/bloat.gni")
18import("$dir_pw_build/target_types.gni")
19
20_decoder_partial = {
21  deps = [
22    "$dir_pw_bloat:bloat_this_binary",
23    "$dir_pw_preprocessor",
24    "$dir_pw_protobuf",
25  ]
26  sources = [ "decoder_partial.cc" ]
27}
28
29pw_source_set("proto_bloat") {
30  public = [ "proto_bloat.h" ]
31  deps = [
32    "$dir_pw_containers",
33    "$dir_pw_preprocessor",
34    "$dir_pw_protobuf",
35    "$dir_pw_status",
36    "$dir_pw_stream",
37  ]
38  sources = [ "proto_bloat.cc" ]
39}
40
41pw_executable("proto_base") {
42  deps = [
43    ":proto_bloat",
44    "$dir_pw_bloat:bloat_this_binary",
45  ]
46  sources = [ "proto_base.cc" ]
47}
48
49pw_executable("encode_decode_core") {
50  deps = [
51    ":proto_bloat",
52    "$dir_pw_bloat:bloat_this_binary",
53  ]
54  sources = [ "encode_decode_core.cc" ]
55}
56
57pw_executable("message_core") {
58  deps = [
59    ":proto_bloat",
60    "$dir_pw_bloat:bloat_this_binary",
61  ]
62  sources = [ "message_core.cc" ]
63}
64
65pw_executable("messages_no_codegen") {
66  defines = [ "_PW_PROTOBUF_SIZE_REPORT_NO_CODEGEN=1" ]
67  deps = [
68    ":proto_bloat",
69    "$dir_pw_bloat:bloat_this_binary",
70    "..:codegen_test_protos.pwpb",
71  ]
72  sources = [ "simple_codegen_comparison.cc" ]
73}
74
75pw_executable("messages_wire_format") {
76  defines = [ "_PW_PROTOBUF_SIZE_REPORT_WIRE_FORMAT=1" ]
77  deps = [
78    ":proto_bloat",
79    "$dir_pw_bloat:bloat_this_binary",
80    "..:codegen_test_protos.pwpb",
81  ]
82  sources = [ "simple_codegen_comparison.cc" ]
83}
84
85pw_executable("messages_message") {
86  defines = [ "_PW_PROTOBUF_SIZE_REPORT_MESSAGE=1" ]
87  deps = [
88    ":proto_bloat",
89    "$dir_pw_bloat:bloat_this_binary",
90    "..:codegen_test_protos.pwpb",
91  ]
92  sources = [ "simple_codegen_comparison.cc" ]
93}
94
95pw_executable("oneof_no_codegen") {
96  defines = [ "_PW_PROTOBUF_SIZE_REPORT_NO_CODEGEN=1" ]
97  deps = [
98    ":proto_bloat",
99    "$dir_pw_bloat:bloat_this_binary",
100    "..:codegen_test_protos.pwpb",
101  ]
102  sources = [ "oneof_codegen_comparison.cc" ]
103}
104
105pw_executable("oneof_wire_format") {
106  defines = [ "_PW_PROTOBUF_SIZE_REPORT_WIRE_FORMAT=1" ]
107  deps = [
108    ":proto_bloat",
109    "$dir_pw_bloat:bloat_this_binary",
110    "..:codegen_test_protos.pwpb",
111  ]
112  sources = [ "oneof_codegen_comparison.cc" ]
113}
114
115pw_executable("oneof_message") {
116  defines = [ "_PW_PROTOBUF_SIZE_REPORT_MESSAGE=1" ]
117  deps = [
118    ":proto_bloat",
119    "$dir_pw_bloat:bloat_this_binary",
120    "..:codegen_test_protos.pwpb",
121  ]
122  sources = [ "oneof_codegen_comparison.cc" ]
123}
124
125pw_toolchain_size_diff("decoder_partial") {
126  base_executable = pw_bloat_empty_base
127  diff_executable = _decoder_partial
128  title = "Size of all decoder methods"
129}
130
131pw_toolchain_size_diff("decoder_incremental") {
132  base_executable = _decoder_partial
133  diff_executable = {
134    deps = [
135      "$dir_pw_bloat:bloat_this_binary",
136      "$dir_pw_preprocessor",
137      "$dir_pw_protobuf:pw_protobuf",
138    ]
139    sources = [ "decoder_incremental.cc" ]
140  }
141  title = "Adding more fields to decode callback"
142}
143
144pw_size_diff("simple_codegen_size_comparison") {
145  title = "Pigweed protobuf codegen size report"
146  source_filter = "pw::protobuf_size_report::*"
147  binaries = [
148    {
149      target = ":messages_no_codegen"
150      base = ":message_core"
151      label = "Direct wire-format proto encoder"
152    },
153    {
154      target = ":messages_wire_format"
155      base = ":message_core"
156      label = "Generated wrapped wire-format encoder"
157    },
158    {
159      target = ":messages_message"
160      base = ":message_core"
161      label = "Generated message encoder"
162    },
163  ]
164}
165
166pw_size_diff("oneof_codegen_size_comparison") {
167  title = "Pigweed protobuf codegen size report"
168  source_filter = "pw::protobuf_size_report::*"
169  binaries = [
170    {
171      target = ":oneof_no_codegen"
172      base = ":message_core"
173      label = "Direct wire-format proto encoder"
174    },
175    {
176      target = ":oneof_wire_format"
177      base = ":message_core"
178      label = "Generated wrapped wire-format encoder"
179    },
180    {
181      target = ":oneof_message"
182      base = ":message_core"
183      label = "Generated message encoder"
184    },
185  ]
186}
187
188pw_size_diff("message_size_report") {
189  title = "Pigweed protobuf message size report"
190  binaries = [
191    {
192      target = ":one_message_struct_write_vs_base"
193      base = ":proto_base"
194      label = "Message encoder flash cost (incl. wire-format encoder)"
195    },
196    {
197      target = ":one_message_struct_write_vs_encoder"
198      base = ":encoder_full"
199      label = "Message encoder flash cost (excl. wire-format encoder)"
200    },
201  ]
202}
203
204pw_size_diff("protobuf_overview") {
205  title = "Pigweed protobuf encoder size report"
206  source_filter = "pw::protobuf::*|section .code"
207  binaries = [
208    {
209      target = ":encode_decode_core"
210      base = ":proto_base"
211      label = "Full wire-format proto encode/decode library"
212    },
213    {
214      target = ":message_core"
215      base = ":proto_base"
216      label = "Including table-based `Message` encoder and decoder"
217    },
218  ]
219}
220