# 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.

import("//build_overrides/pigweed.gni")

import("$dir_pw_build/facade.gni")
import("$dir_pw_docgen/docs.gni")
import("backend.gni")

config("default_config") {
  include_dirs = [ "public" ]
}

group("pw_cpu_exception") {
  public_deps = [
    ":entry",
    ":handler",
  ]
}

# This module has three facades, each of whose backends are set with a
# different GN variable.
#
# - 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_CpuState object. The backend for this facade will be architecture-
#   specific.
#   Set this facade's backend via `pw_cpu_exception_ENTRY_BACKEND`
#
# - 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.
#   Set this facade's backend via `pw_cpu_exception_HANDLER_BACKEND`
#
# - 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.
#   Set this facade's backend via `pw_cpu_exception_SUPPORT_BACKEND`

pw_facade("entry") {
  backend = pw_cpu_exception_ENTRY_BACKEND
  public_configs = [ ":default_config" ]
  public_deps = [ "$dir_pw_preprocessor" ]
  deps = [ ":handler.facade" ]
  public = [ "public/pw_cpu_exception/entry.h" ]
}

pw_facade("handler") {
  backend = pw_cpu_exception_HANDLER_BACKEND
  public_configs = [ ":default_config" ]
  public_deps = [ "$dir_pw_preprocessor" ]
  sources = [ "start_exception_handler.cc" ]
  public = [ "public/pw_cpu_exception/handler.h" ]
}

# This library is technically optional. It is recommended to use `support` when
# doing basic dumps of CPU state. As an alternative, projects may choose to
# directly depend on the entry backend if they require direct access to
# pw_cpu_exception_State members.
pw_facade("support") {
  backend = pw_cpu_exception_SUPPORT_BACKEND
  public_configs = [ ":default_config" ]
  public = [ "public/pw_cpu_exception/support.h" ]
}

pw_source_set("basic_handler") {
  deps = [
    ":handler.facade",
    dir_pw_log,
  ]
  sources = [ "basic_handler.cc" ]
}

pw_doc_group("docs") {
  sources = [ "docs.rst" ]
}
