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

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

licenses(["notice"])

# This module has three facades, each of whose backends are set with a
# different constraint_setting.
#
# - entry: This is the library that handles early exception entry and prepares
#   any CPU state that must be available to the exception handler via the
#   pw_cpu_exception_State object. The backend for this facade is
#   architecture-specific.
constraint_setting(
    name = "entry_constraint_setting",
)

# - handler: This facade is backed by an application-specific handler that
#   determines what to do when an exception is encountered. This may be
#   capturing a crash report before resetting the device, or in some cases
#   handling the exception to allow execution to continue.
constraint_setting(
    name = "handler_constraint_setting",
)

# - support: This facade provides architecture-independent functions that may be
#   helpful for dumping CPU state in various forms. This allows an application
#   to create an application-specific handler that is portable across multiple
#   architectures.
constraint_setting(
    name = "support_constraint_setting",
)

pw_facade(
    name = "entry",
    hdrs = [
        "public/pw_cpu_exception/entry.h",
        "public/pw_cpu_exception/state.h",
    ],
    backend = ":entry_backend",
    includes = ["public"],
    deps = [
        "//pw_preprocessor",
    ],
)

pw_facade(
    name = "handler",
    srcs = ["start_exception_handler.cc"],
    hdrs = ["public/pw_cpu_exception/handler.h"],
    backend = ":handler_backend",
    implementation_deps = [
        "//pw_preprocessor",
    ],
    includes = ["public"],
    deps = [":entry"],
)

pw_facade(
    name = "support",
    hdrs = ["public/pw_cpu_exception/support.h"],
    backend = ":support_backend",
    includes = ["public"],
    deps = [
        ":entry",
    ],
)

constraint_value(
    name = "basic_handler_backend",
    constraint_setting = "//pw_cpu_exception:handler_constraint_setting",
)

cc_library(
    name = "basic_handler",
    srcs = ["basic_handler.cc"],
    deps = [
        ":entry",
        ":handler_facade",
        "//pw_log",
    ],
)

# Override-able flags for each facade backend.
label_flag(
    name = "entry_backend",
    build_setting_default = ":entry_backend_multiplexer",
)

label_flag(
    name = "entry_backend_impl",
    build_setting_default = ":entry_backend_impl_multiplexer",
)

label_flag(
    name = "handler_backend",
    build_setting_default = ":handler_backend_multiplexer",
)

label_flag(
    name = "support_backend",
    build_setting_default = ":support_backend_multiplexer",
)

# Default facade backends.
alias(
    name = "entry_backend_multiplexer",
    actual = select({
        "//pw_cpu_exception_cortex_m:entry_backend": "@pigweed//pw_cpu_exception_cortex_m:cpu_exception",
        "//conditions:default": "//pw_build:unspecified_backend",
    }),
)

alias(
    name = "entry_backend_impl_multiplexer",
    actual = select({
        "//pw_cpu_exception_cortex_m:entry_backend": "@pigweed//pw_cpu_exception_cortex_m:cpu_exception_impl",
        "//conditions:default": "//pw_build:unspecified_backend",
    }),
)

alias(
    name = "handler_backend_multiplexer",
    actual = select({
        ":basic_handler_backend": ":basic_handler",
        "//conditions:default": "//pw_build:unspecified_backend",
    }),
)

alias(
    name = "support_backend_multiplexer",
    actual = select({
        "//pw_cpu_exception_cortex_m:support_backend": "@pigweed//pw_cpu_exception_cortex_m:support",
        "//conditions:default": "//pw_build:unspecified_backend",
    }),
)
