# 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",
)

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

licenses(["notice"])

deps = [
    "//pw_bloat:bloat_this_binary",
    "//pw_bytes",
    "//pw_checksum",
    "//pw_hdlc",
    "//pw_log",
    "//pw_preprocessor",
    "//pw_span",
    "//pw_stream",
]

pw_cc_binary(
    name = "base",
    srcs = ["hdlc_size_report.cc"],
    deps = deps,
)

pw_cc_binary(
    name = "base_crc",
    srcs = ["hdlc_size_report.cc"],
    copts = ["-DENABLE_CRC=1"],
    deps = deps,
)

pw_cc_binary(
    name = "full",
    srcs = ["hdlc_size_report.cc"],
    copts = [
        "-DENABLE_ENCODE=1",
        "-DENABLE_DECODE=1",
        "-DENABLE_CRC",
    ],
    deps = deps,
)

pw_cc_binary(
    name = "full_crc",
    srcs = ["hdlc_size_report.cc"],
    copts = [
        "-DENABLE_ENCODE=1",
        "-DENABLE_DECODE=1",
    ],
    deps = deps,
)
