| # Copyright 2020 The Pigweed Authors |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); you may not |
| # use this file except in compliance with the License. You may obtain a copy of |
| # the License at |
| # |
| # https://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
| # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
| # License for the specific language governing permissions and limitations under |
| # the License. |
| |
| import("//build_overrides/pigweed.gni") |
| |
| import("$dir_pw_bloat/bloat.gni") |
| import("$dir_pw_build/target_types.gni") |
| |
| _decoder_partial = { |
| deps = [ |
| "$dir_pw_bloat:bloat_this_binary", |
| "$dir_pw_preprocessor", |
| "$dir_pw_protobuf", |
| ] |
| sources = [ "decoder_partial.cc" ] |
| } |
| |
| pw_source_set("proto_bloat") { |
| public = [ "proto_bloat.h" ] |
| deps = [ |
| "$dir_pw_containers", |
| "$dir_pw_preprocessor", |
| "$dir_pw_protobuf", |
| "$dir_pw_status", |
| "$dir_pw_stream", |
| ] |
| sources = [ "proto_bloat.cc" ] |
| } |
| |
| pw_executable("proto_base") { |
| deps = [ |
| ":proto_bloat", |
| "$dir_pw_bloat:bloat_this_binary", |
| ] |
| sources = [ "proto_base.cc" ] |
| } |
| |
| pw_executable("encode_decode_core") { |
| deps = [ |
| ":proto_bloat", |
| "$dir_pw_bloat:bloat_this_binary", |
| ] |
| sources = [ "encode_decode_core.cc" ] |
| } |
| |
| pw_executable("message_core") { |
| deps = [ |
| ":proto_bloat", |
| "$dir_pw_bloat:bloat_this_binary", |
| ] |
| sources = [ "message_core.cc" ] |
| } |
| |
| pw_executable("messages_no_codegen") { |
| defines = [ "_PW_PROTOBUF_SIZE_REPORT_NO_CODEGEN=1" ] |
| deps = [ |
| ":proto_bloat", |
| "$dir_pw_bloat:bloat_this_binary", |
| "..:codegen_test_protos.pwpb", |
| ] |
| sources = [ "simple_codegen_comparison.cc" ] |
| } |
| |
| pw_executable("messages_wire_format") { |
| defines = [ "_PW_PROTOBUF_SIZE_REPORT_WIRE_FORMAT=1" ] |
| deps = [ |
| ":proto_bloat", |
| "$dir_pw_bloat:bloat_this_binary", |
| "..:codegen_test_protos.pwpb", |
| ] |
| sources = [ "simple_codegen_comparison.cc" ] |
| } |
| |
| pw_executable("messages_message") { |
| defines = [ "_PW_PROTOBUF_SIZE_REPORT_MESSAGE=1" ] |
| deps = [ |
| ":proto_bloat", |
| "$dir_pw_bloat:bloat_this_binary", |
| "..:codegen_test_protos.pwpb", |
| ] |
| sources = [ "simple_codegen_comparison.cc" ] |
| } |
| |
| pw_executable("oneof_no_codegen") { |
| defines = [ "_PW_PROTOBUF_SIZE_REPORT_NO_CODEGEN=1" ] |
| deps = [ |
| ":proto_bloat", |
| "$dir_pw_bloat:bloat_this_binary", |
| "..:codegen_test_protos.pwpb", |
| ] |
| sources = [ "oneof_codegen_comparison.cc" ] |
| } |
| |
| pw_executable("oneof_wire_format") { |
| defines = [ "_PW_PROTOBUF_SIZE_REPORT_WIRE_FORMAT=1" ] |
| deps = [ |
| ":proto_bloat", |
| "$dir_pw_bloat:bloat_this_binary", |
| "..:codegen_test_protos.pwpb", |
| ] |
| sources = [ "oneof_codegen_comparison.cc" ] |
| } |
| |
| pw_executable("oneof_message") { |
| defines = [ "_PW_PROTOBUF_SIZE_REPORT_MESSAGE=1" ] |
| deps = [ |
| ":proto_bloat", |
| "$dir_pw_bloat:bloat_this_binary", |
| "..:codegen_test_protos.pwpb", |
| ] |
| sources = [ "oneof_codegen_comparison.cc" ] |
| } |
| |
| pw_toolchain_size_diff("decoder_partial") { |
| base_executable = pw_bloat_empty_base |
| diff_executable = _decoder_partial |
| title = "Size of all decoder methods" |
| } |
| |
| pw_toolchain_size_diff("decoder_incremental") { |
| base_executable = _decoder_partial |
| diff_executable = { |
| deps = [ |
| "$dir_pw_bloat:bloat_this_binary", |
| "$dir_pw_preprocessor", |
| "$dir_pw_protobuf:pw_protobuf", |
| ] |
| sources = [ "decoder_incremental.cc" ] |
| } |
| title = "Adding more fields to decode callback" |
| } |
| |
| pw_size_diff("simple_codegen_size_comparison") { |
| title = "Pigweed protobuf codegen size report" |
| source_filter = "pw::protobuf_size_report::*" |
| binaries = [ |
| { |
| target = ":messages_no_codegen" |
| base = ":message_core" |
| label = "Direct wire-format proto encoder" |
| }, |
| { |
| target = ":messages_wire_format" |
| base = ":message_core" |
| label = "Generated wrapped wire-format encoder" |
| }, |
| { |
| target = ":messages_message" |
| base = ":message_core" |
| label = "Generated message encoder" |
| }, |
| ] |
| } |
| |
| pw_size_diff("oneof_codegen_size_comparison") { |
| title = "Pigweed protobuf codegen size report" |
| source_filter = "pw::protobuf_size_report::*" |
| binaries = [ |
| { |
| target = ":oneof_no_codegen" |
| base = ":message_core" |
| label = "Direct wire-format proto encoder" |
| }, |
| { |
| target = ":oneof_wire_format" |
| base = ":message_core" |
| label = "Generated wrapped wire-format encoder" |
| }, |
| { |
| target = ":oneof_message" |
| base = ":message_core" |
| label = "Generated message encoder" |
| }, |
| ] |
| } |
| |
| pw_size_diff("message_size_report") { |
| title = "Pigweed protobuf message size report" |
| binaries = [ |
| { |
| target = ":one_message_struct_write_vs_base" |
| base = ":proto_base" |
| label = "Message encoder flash cost (incl. wire-format encoder)" |
| }, |
| { |
| target = ":one_message_struct_write_vs_encoder" |
| base = ":encoder_full" |
| label = "Message encoder flash cost (excl. wire-format encoder)" |
| }, |
| ] |
| } |
| |
| pw_size_diff("protobuf_overview") { |
| title = "Pigweed protobuf encoder size report" |
| source_filter = "pw::protobuf::*|section .code" |
| binaries = [ |
| { |
| target = ":encode_decode_core" |
| base = ":proto_base" |
| label = "Full wire-format proto encode/decode library" |
| }, |
| { |
| target = ":message_core" |
| base = ":proto_base" |
| label = "Including table-based `Message` encoder and decoder" |
| }, |
| ] |
| } |