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