# 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/target_types.gni")
import("$dir_pw_docgen/docs.gni")

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

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

config("armv6m") {
  defines = [ "PW_INTERRUPT_CORTEX_M_ARMV6M=1" ]
}

config("armv7m") {
  defines = [ "PW_INTERRUPT_CORTEX_M_ARMV7M=1" ]
}

config("armv8m") {
  defines = [ "PW_INTERRUPT_CORTEX_M_ARMV8M=1" ]
}

_context_common = {
  public_deps = [ "$dir_pw_interrupt:context.facade" ]
  public_configs = [
    ":public_include_path",
    ":backend_config",
  ]
  public = [
    "public/pw_interrupt_cortex_m/context_inline.h",
    "public_overrides/pw_interrupt_backend/context_inline.h",
  ]
}

# This targets provides the ARMv6-M backend for pw_interrupt's context facade.
pw_source_set("context_armv6m") {
  forward_variables_from(_context_common, "*")
  public_configs += [ ":armv6m" ]
}

# This targets provides the ARMv7-M backend for pw_interrupt's context facade.
pw_source_set("context_armv7m") {
  forward_variables_from(_context_common, "*")
  public_configs += [ ":armv7m" ]
}

# This targets provides the ARMv8-M backend for pw_interrupt's context facade.
pw_source_set("context_armv8m") {
  forward_variables_from(_context_common, "*")
  public_configs += [ ":armv8m" ]
}

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