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