# 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"
    },
  ]
}
