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

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

licenses(["notice"])  # Apache License 2.0

pw_cc_facade(
    name = "context_facade",
    hdrs = [
        "public/pw_interrupt/context.h",
    ],
    includes = ["public"],
)

pw_cc_library(
    name = "context",
    deps = [
        ":context_facade",
        "@pigweed_config//:pw_interrupt_backend",
    ],
)

pw_cc_library(
    name = "backend_multiplexer",
    # Normally this would be done in the backend packages but because there is
    # no host implementation we have to define this here.
    target_compatible_with = select({
        "@platforms//cpu:armv7-m": [],
        "@platforms//cpu:armv7e-m": [],
        "@platforms//cpu:armv8-m": [],
        "//conditions:default": ["@platforms//:incompatible"],
    }),
    visibility = ["@pigweed_config//:__pkg__"],
    deps = select({
        "@platforms//cpu:armv7-m": ["//pw_interrupt_cortex_m:context_armv7m"],
        "@platforms//cpu:armv7e-m": ["//pw_interrupt_cortex_m:context_armv7m"],
        "@platforms//cpu:armv8-m": ["//pw_interrupt_cortex_m:context_armv8m"],
        # This is required for this to be a valid select when building for the
        # host i.e. 'bazel build //pw_interrupt/...'. The
        # target_compatible_with attribute is used to skip this target when
        # built with a wildcard. If explicitly depended on for a host build
        # the build will fail.
        "//conditions:default": [],
    }),
)
