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

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

import("$dir_pw_build/module_config.gni")
import("$dir_pw_build/target_types.gni")
import("$dir_pw_cpu_exception/backend.gni")
import("$dir_pw_docgen/docs.gni")
import("$dir_pw_protobuf_compiler/proto.gni")
import("$dir_pw_unit_test/test.gni")

declare_args() {
  # The build target that overrides the default configuration options for this
  # module. This should point to a source set that provides defines through a
  # public config (which may -include a file or add defines directly).
  pw_cpu_exception_cortex_m_CONFIG = pw_build_DEFAULT_MODULE_CONFIG
}

pw_source_set("config") {
  public_deps = [
    "$dir_pw_preprocessor:arch",
    pw_cpu_exception_cortex_m_CONFIG,
  ]
  public = [ "pw_cpu_exception_cortex_m_private/config.h" ]
  visibility = [ ":*" ]
}

config("public_include_path") {
  include_dirs = [ "public" ]
  visibility = [ ":*" ]
}

config("backend_config") {
  include_dirs = [ "public_overrides" ]
  visibility = [ ":*" ]
}

pw_source_set("support") {
  deps = [
    ":config",
    ":cortex_m_constants",
    ":util",
    "$dir_pw_cpu_exception:support.facade",
    "$dir_pw_preprocessor:arch",
    dir_pw_log,
    dir_pw_string,
  ]
  sources = [ "support.cc" ]
}

# The following targets are deprecated, use ":support" instead.
group("support_armv7m") {
  public_deps = [ ":support" ]
}
group("support_armv8m") {
  public_deps = [ ":support" ]
}

pw_source_set("util") {
  public_configs = [ ":public_include_path" ]
  public = [ "public/pw_cpu_exception_cortex_m/util.h" ]
  public_deps = [ ":cpu_state" ]
  deps = [
    ":config",
    ":cortex_m_constants",
    "$dir_pw_preprocessor:arch",
    dir_pw_log,
  ]
  sources = [ "util.cc" ]
}

pw_source_set("proto_dump") {
  public_configs = [ ":public_include_path" ]
  public_deps = [
    ":cpu_exception_armv7m",
    dir_pw_protobuf,
    dir_pw_status,
    dir_pw_stream,
  ]
  public = [ "public/pw_cpu_exception_cortex_m/proto_dump.h" ]
  deps = [
    ":config",
    ":cpu_state_protos.pwpb",
  ]
  sources = [ "proto_dump.cc" ]
}

# The following targets are deprecated, use ":proto_dump" instead.
group("proto_dump_armv7m") {
  public_deps = [ ":proto_dump" ]
}
group("proto_dump_armv8m") {
  public_deps = [ ":proto_dump" ]
}

pw_proto_library("cpu_state_protos") {
  sources = [ "pw_cpu_exception_cortex_m_protos/cpu_state.proto" ]
}

pw_source_set("cpu_state") {
  public_configs = [ ":public_include_path" ]
  public = [ "public/pw_cpu_exception_cortex_m/cpu_state.h" ]
  public_deps = [
    "$dir_pw_preprocessor",
    "$dir_pw_preprocessor:arch",
  ]
}

pw_source_set("cpu_exception") {
  public_configs = [
    ":backend_config",
    ":public_include_path",
  ]
  public = [ "public_overrides/pw_cpu_exception_backend/state.h" ]
  public_deps = [
    ":cpu_state",
    "$dir_pw_preprocessor",
    "$dir_pw_preprocessor:arch",
  ]
}

# The following targets are deprecated, use ":cpu_exception" instead.
group("cpu_exception_armv7m") {
  public_deps = [ ":cpu_exception" ]
}
group("cpu_exception_armv8m") {
  public_deps = [ ":cpu_exception" ]
}

pw_source_set("cpu_exception.impl") {
  sources = [ "entry.cc" ]
  deps = [
    ":config",
    ":cortex_m_constants",
    ":cpu_state",
    "$dir_pw_cpu_exception:entry.facade",
    "$dir_pw_cpu_exception:handler",
    "$dir_pw_preprocessor:arch",
  ]
}

# The following targets are deprecated, use ":cpu_exception.impl" instead.
group("cpu_exception_armv7m.impl") {
  public_deps = [ ":cpu_exception.impl" ]
}
group("cpu_exception_armv8m.impl") {
  public_deps = [ ":cpu_exception.impl" ]
}

pw_source_set("snapshot") {
  public_configs = [ ":public_include_path" ]
  public_deps = [
    ":cpu_state",
    ":cpu_state_protos.pwpb",
    "$dir_pw_thread:protos.pwpb",
    "$dir_pw_thread:snapshot",
    dir_pw_protobuf,
    dir_pw_status,
  ]
  public = [ "public/pw_cpu_exception_cortex_m/snapshot.h" ]
  sources = [ "snapshot.cc" ]
  deps = [
    ":config",
    ":cortex_m_constants",
    ":proto_dump",
    "$dir_pw_cpu_exception:support",
    dir_pw_log,
  ]
}

# The following targets are deprecated, use ":snapshot" instead.
group("snapshot_armv7m") {
  public_deps = [ ":snapshot" ]
}
group("snapshot_armv8m") {
  public_deps = [ ":snapshot" ]
}

pw_source_set("cortex_m_constants") {
  public = [ "pw_cpu_exception_cortex_m_private/cortex_m_constants.h" ]
  public_deps = [ "$dir_pw_preprocessor:arch" ]
  visibility = [ ":*" ]
}

# The following targets are deprecated, use ":cortex_m_constants" instead.
group("cortex_m_constants_armv7m") {
  public_deps = [ ":cortex_m_constants" ]
  visibility = [ ":*" ]
}
group("cortex_m_constants_armv8m") {
  public_deps = [ ":cortex_m_constants" ]
  visibility = [ ":*" ]
}

pw_test_group("tests") {
  tests = [ ":cpu_exception_entry_test" ]
}

# TODO(pwbug/583): Add ARMv8-M mainline coverage.
pw_test("cpu_exception_entry_test") {
  enable_if = pw_cpu_exception_ENTRY_BACKEND ==
              "$dir_pw_cpu_exception_cortex_m:cpu_exception"
  deps = [
    ":cortex_m_constants",
    ":cpu_exception",
    ":cpu_state",
    "$dir_pw_cpu_exception:entry",
    "$dir_pw_cpu_exception:handler",
    "$dir_pw_cpu_exception:support",
  ]
  sources = [ "exception_entry_test.cc" ]
}

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