# Copyright 2022 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.

load(
    "//pw_build:pigweed.bzl",
    "pw_cc_binary",
    "pw_cc_library",
)

package(default_visibility = ["//visibility:public"])

licenses(["notice"])

pw_cc_binary(
    name = "decoder_partial",
    srcs = [
        "decoder_partial.cc",
    ],
    deps = [
        "//pw_bloat:bloat_this_binary",
        "//pw_preprocessor",
        "//pw_protobuf",
    ],
)

pw_cc_binary(
    name = "decoder_incremental",
    srcs = [
        "decoder_incremental.cc",
    ],
    deps = [
        "//pw_bloat:bloat_this_binary",
        "//pw_preprocessor",
        "//pw_protobuf",
    ],
)

pw_cc_library(
    name = "proto_bloat",
    srcs = [
        "proto_bloat.cc",
    ],
    hdrs = ["proto_bloat.h"],
    deps = [
        "//pw_containers",
        "//pw_preprocessor",
        "//pw_protobuf",
        "//pw_status",
        "//pw_stream",
    ],
)

pw_cc_binary(
    name = "proto_base",
    srcs = [
        "proto_base.cc",
    ],
    deps = [
        ":proto_bloat",
        "//pw_bloat:bloat_this_binary",
    ],
)

pw_cc_binary(
    name = "encode_decode_core",
    srcs = [
        "encode_decode_core.cc",
    ],
    deps = [
        ":proto_bloat",
        "//pw_bloat:bloat_this_binary",
    ],
)

pw_cc_binary(
    name = "message_core",
    srcs = [
        "message_core.cc",
    ],
    deps = [
        ":proto_bloat",
        "//pw_bloat:bloat_this_binary",
    ],
)

pw_cc_binary(
    name = "messages_no_codegen",
    srcs = ["simple_codegen_comparison.cc"],
    defines = ["_PW_PROTOBUF_SIZE_REPORT_NO_CODEGEN=1"],
    deps = [
        ":proto_bloat",
        "//pw_bloat:bloat_this_binary",
        "//pw_protobuf:codegen_test_proto_cc.pwpb",
    ],
)

pw_cc_binary(
    name = "messages_wire_format",
    srcs = ["simple_codegen_comparison.cc"],
    defines = ["_PW_PROTOBUF_SIZE_REPORT_WIRE_FORMAT=1"],
    deps = [
        ":proto_bloat",
        "//pw_bloat:bloat_this_binary",
        "//pw_protobuf:codegen_test_proto_cc.pwpb",
    ],
)

pw_cc_binary(
    name = "messages_message",
    srcs = ["simple_codegen_comparison.cc"],
    defines = ["_PW_PROTOBUF_SIZE_REPORT_MESSAGE=1"],
    deps = [
        ":proto_bloat",
        "//pw_bloat:bloat_this_binary",
        "//pw_protobuf:codegen_test_proto_cc.pwpb",
    ],
)

pw_cc_binary(
    name = "oneof_no_codegen",
    srcs = ["oneof_codegen_comparison.cc"],
    defines = ["_PW_PROTOBUF_SIZE_REPORT_NO_CODEGEN=1"],
    deps = [
        ":proto_bloat",
        "//pw_bloat:bloat_this_binary",
        "//pw_protobuf:codegen_test_proto_cc.pwpb",
    ],
)

pw_cc_binary(
    name = "oneof_wire_format",
    srcs = ["oneof_codegen_comparison.cc"],
    defines = ["_PW_PROTOBUF_SIZE_REPORT_WIRE_FORMAT=1"],
    deps = [
        ":proto_bloat",
        "//pw_bloat:bloat_this_binary",
        "//pw_protobuf:codegen_test_proto_cc.pwpb",
    ],
)

pw_cc_binary(
    name = "oneof_message",
    srcs = ["oneof_codegen_comparison.cc"],
    defines = ["_PW_PROTOBUF_SIZE_REPORT_MESSAGE=1"],
    deps = [
        ":proto_bloat",
        "//pw_bloat:bloat_this_binary",
        "//pw_protobuf:codegen_test_proto_cc.pwpb",
    ],
)
