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

declare_args() {
  # This list should contain the necessary defines for setting pw_boot linker
  # script memory regions.
  pw_boot_cortex_m_LINK_CONFIG_DEFINES = []

  # The pw_linker_script that should be used for the target.
  pw_boot_cortex_m_LINKER_SCRIPT = ":cortex_m_linker_script"
}

if (pw_boot_BACKEND == "$dir_pw_boot_cortex_m:armv7m" ||
    pw_boot_BACKEND == "$dir_pw_boot_cortex_m:armv8m") {
  config("default_config") {
    include_dirs = [ "public" ]
  }

  pw_linker_script("cortex_m_linker_script") {
    # pw_boot_cortex_m_LINK_CONFIG_DEFINES is a list of defines provided by the
    # target.
    defines = pw_boot_cortex_m_LINK_CONFIG_DEFINES
    linker_script = "basic_cortex_m.ld"
  }
}

if (pw_boot_BACKEND == "$dir_pw_boot_cortex_m:armv7m") {
  pw_source_set("armv7m") {
    defines = [ "PW_BOOT_CORTEX_M_ARMV7M" ]
    public_configs = [ ":default_config" ]
    public = [ "public/pw_boot_cortex_m/boot.h" ]
    public_deps = [ "$dir_pw_preprocessor" ]
    deps = [
      "$dir_pw_boot:facade",
      pw_boot_cortex_m_LINKER_SCRIPT,
    ]
    sources = [ "core_init.c" ]
  }
} else {
  group("armv7m") {
  }
}

if (pw_boot_BACKEND == "$dir_pw_boot_cortex_m:armv8m") {
  pw_source_set("armv8m") {
    defines = [ "PW_BOOT_CORTEX_M_ARMV8M" ]
    public_configs = [ ":default_config" ]
    public = [ "public/pw_boot_cortex_m/boot.h" ]
    public_deps = [ "$dir_pw_preprocessor" ]
    deps = [
      "$dir_pw_boot:facade",
      pw_boot_cortex_m_LINKER_SCRIPT,
    ]
    sources = [ "core_init.c" ]
  }
} else {
  group("armv8m") {
  }
}

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