blob: 8f6c312ccd1b28adf3fb6117f8518aea69b55a71 [file] [log] [blame]
# 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:compatibility.bzl", "boolean_constraint_value")
load("//pw_build:pw_facade.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",
strip_include_prefix = "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",
],
strip_include_prefix = "public",
deps = [":entry"],
)
pw_facade(
name = "support",
hdrs = ["public/pw_cpu_exception/support.h"],
backend = ":support_backend",
strip_include_prefix = "public",
deps = [
":entry",
],
)
constraint_value(
name = "basic_handler_backend",
constraint_setting = "//pw_cpu_exception:handler_constraint_setting",
)
# TODO: https://github.com/bazelbuild/bazel/issues/23003 - this shouldn't be
# needed, as it should be possible to have a config_setting as to whether
# the entry_backend is "//pw_build:unspecified_backend" or not, but that doesn't
# work currently due to the referenced bug.
boolean_constraint_value(
name = "enabled",
)
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 = "//pw_build:unspecified_backend",
)
label_flag(
name = "entry_backend_impl",
build_setting_default = "//pw_build:unspecified_backend",
)
label_flag(
name = "handler_backend",
build_setting_default = "//pw_build:unspecified_backend",
)
label_flag(
name = "support_backend",
build_setting_default = "//pw_build:unspecified_backend",
)