# Copyright 2021 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_test",
    "pw_facade",
)

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

licenses(["notice"])

# TODO: pwbug.dev/328679085 - Remove this alias.
alias(
    name = "facade",
    actual = ":pw_assert.facade",
)

pw_facade(
    name = "pw_assert",
    hdrs = [
        "public/pw_assert/assert.h",
        "public/pw_assert/check.h",
        "public/pw_assert/internal/check_impl.h",
        "public/pw_assert/short.h",
    ],
    backend = ":backend",
    includes = [
        "public",
    ],
    deps = [
        ":config",
        "//pw_preprocessor",
    ],
)

label_flag(
    name = "backend",
    build_setting_default = ":backend_multiplexer",
)

label_flag(
    name = "backend_impl",
    build_setting_default = ":backend_impl_multiplexer",
    # For internal tooling: go/build-cleaner/troubleshooting-faq#keep-dep
    tags = ["keep_dep"],
)

cc_library(
    name = "config",
    hdrs = ["public/pw_assert/config.h"],
    includes = ["public"],
    deps = [":config_override"],
)

label_flag(
    name = "config_override",
    build_setting_default = "//pw_build:default_module_config",
)

cc_library(
    name = "libc_assert",
    hdrs = [
        "libc_assert_public_overrides/assert.h",
        "libc_assert_public_overrides/cassert",
        "public/pw_assert/internal/libc_assert.h",
    ],
    includes = [
        "libc_assert_public_overrides",
        "public",
    ],
    deps = [
        "//pw_assert",
        "//pw_preprocessor",
    ],
)

cc_library(
    name = "assert_compatibility_backend",
    hdrs = [
        "assert_compatibility_public_overrides/pw_assert_backend/assert_backend.h",
    ],
    includes = ["assert_compatibility_public_overrides"],
    deps = ["//pw_preprocessor"],
)

cc_library(
    name = "print_and_abort",
    hdrs = ["public/pw_assert/internal/print_and_abort.h"],
    includes = ["public"],
    visibility = ["//visibility:private"],
    deps = [":config"],
)

cc_library(
    name = "print_and_abort_assert_backend",
    hdrs = ["print_and_abort_assert_public_overrides/pw_assert_backend/assert_backend.h"],
    includes = ["print_and_abort_assert_public_overrides"],
    deps = [
        ":config",
        ":print_and_abort",
    ],
)

cc_library(
    name = "print_and_abort_check_backend",
    hdrs =
        ["print_and_abort_check_public_overrides/pw_assert_backend/check_backend.h"],
    includes = ["print_and_abort_check_public_overrides"],
    deps = [":print_and_abort"],
)

cc_library(
    name = "print_and_abort_assert_and_check_backend",
    deps = [
        ":print_and_abort_assert_backend",
        ":print_and_abort_check_backend",
    ],
)

cc_library(
    name = "backend_multiplexer",
    visibility = ["@pigweed//targets:__pkg__"],
    deps = [
        "@pigweed//pw_assert_basic",
    ],
)

alias(
    name = "backend_impl_multiplexer",
    actual = "@pigweed//pw_assert_basic:impl",
    visibility = ["@pigweed//targets:__pkg__"],
)

pw_cc_test(
    name = "assert_facade_test",
    srcs = [
        "assert_facade_test.cc",
        "assert_test.cc",
        "fake_backend.cc",
        "public/pw_assert/internal/check_impl.h",
        "pw_assert_test/fake_backend.h",
    ],
    deps = [
        ":facade",
        "//pw_assert",
        "//pw_compilation_testing:negative_compilation_testing",
        "//pw_preprocessor",
        "//pw_span",
        "//pw_status",
        "//pw_string",
        "//pw_unit_test",
    ],
)

pw_cc_test(
    name = "assert_backend_compile_test",
    srcs = [
        "assert_backend_compile_test.cc",
        "assert_backend_compile_test_c.c",
    ],
    deps = [
        "//pw_assert",
        "//pw_status",
        "//pw_unit_test",
    ],
)
