# Copyright 2019 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",
)
load("//pw_build:selects.bzl", "TARGET_COMPATIBLE_WITH_HOST_SELECT")

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

licenses(["notice"])

# Library which uses standard C/C++ functions such as memcpy to prevent them
# from showing up within bloat diff reports.
cc_library(
    name = "bloat_this_binary",
    srcs = ["bloat_this_binary.cc"],
    hdrs = ["public/pw_bloat/bloat_this_binary.h"],
    includes = ["public"],
    target_compatible_with = select(TARGET_COMPATIBLE_WITH_HOST_SELECT),
    deps = [
        "//pw_assert",
        "//pw_log",
    ],
)

# Standard minimal base binary for bloat reports.
pw_cc_binary(
    name = "bloat_base",
    srcs = ["base_main.cc"],
    target_compatible_with = select(TARGET_COMPATIBLE_WITH_HOST_SELECT),
    deps = [":bloat_this_binary"],
)
