1# Copyright 2020 The Pigweed Authors 2# 3# Licensed under the Apache License, Version 2.0 (the "License"); you may not 4# use this file except in compliance with the License. You may obtain a copy of 5# the License at 6# 7# https://www.apache.org/licenses/LICENSE-2.0 8# 9# Unless required by applicable law or agreed to in writing, software 10# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 11# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 12# License for the specific language governing permissions and limitations under 13# the License. 14 15import("//build_overrides/pigweed.gni") 16 17import("$dir_pw_build/facade.gni") 18import("$dir_pw_docgen/docs.gni") 19import("backend.gni") 20 21config("default_config") { 22 include_dirs = [ "public" ] 23} 24 25group("pw_cpu_exception") { 26 public_deps = [ 27 ":entry", 28 ":handler", 29 ] 30} 31 32# This module has three facades, each of whose backends are set with a 33# different GN variable. 34# 35# - entry: This is the library that handles early exception entry and prepares 36# any CPU state that must be available to the exception handler via the 37# pw_CpuState object. The backend for this facade will be architecture- 38# specific. 39# Set this facade's backend via `pw_cpu_exception_ENTRY_BACKEND` 40# 41# - handler: This facade is backed by an application-specific handler that 42# determines what to do when an exception is encountered. This may be 43# capturing a crash report before resetting the device, or in some cases 44# handling the exception to allow execution to continue. 45# Set this facade's backend via `pw_cpu_exception_HANDLER_BACKEND` 46# 47# - support: This facade provides architecture-independent functions that may be 48# helpful for dumping CPU state in various forms. This allows an application 49# to create an application-specific handler that is portable across multiple 50# architectures. 51# Set this facade's backend via `pw_cpu_exception_SUPPORT_BACKEND` 52 53pw_facade("entry") { 54 backend = pw_cpu_exception_ENTRY_BACKEND 55 public_configs = [ ":default_config" ] 56 public_deps = [ "$dir_pw_preprocessor" ] 57 deps = [ ":handler.facade" ] 58 public = [ "public/pw_cpu_exception/entry.h" ] 59} 60 61pw_facade("handler") { 62 backend = pw_cpu_exception_HANDLER_BACKEND 63 public_configs = [ ":default_config" ] 64 public_deps = [ "$dir_pw_preprocessor" ] 65 sources = [ "start_exception_handler.cc" ] 66 public = [ "public/pw_cpu_exception/handler.h" ] 67} 68 69# This library is technically optional. It is recommended to use `support` when 70# doing basic dumps of CPU state. As an alternative, projects may choose to 71# directly depend on the entry backend if they require direct access to 72# pw_cpu_exception_State members. 73pw_facade("support") { 74 backend = pw_cpu_exception_SUPPORT_BACKEND 75 public_configs = [ ":default_config" ] 76 public = [ "public/pw_cpu_exception/support.h" ] 77} 78 79pw_source_set("basic_handler") { 80 deps = [ 81 ":handler.facade", 82 dir_pw_log, 83 ] 84 sources = [ "basic_handler.cc" ] 85} 86 87pw_doc_group("docs") { 88 sources = [ "docs.rst" ] 89} 90