blob: bb51df4657029a8c8851e52019dfc74126bec072 [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: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",
}),
)