# 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" &&
    pw_boot_BACKEND != "$dir_pw_boot_cortex_m:armv7m" &&
    pw_boot_BACKEND != "$dir_pw_boot_cortex_m:armv8m") {
  group("pw_boot_cortex_m") {
  }
  group("armv7m") {
  }
  group("armv8m") {
  }
} else {
  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"
  }

  pw_source_set("pw_boot_cortex_m") {
    public_configs = [ ":default_config" ]
    public = [ "public/pw_boot_cortex_m/boot.h" ]
    public_deps = [ "$dir_pw_preprocessor" ]
    deps = [
      "$dir_pw_boot:facade",
      "$dir_pw_preprocessor:arch",
      pw_boot_cortex_m_LINKER_SCRIPT,
    ]
    sources = [ "core_init.c" ]
  }

  # These targets are deprecated, use ":pw_boot_cortex_m" directly.
  group("armv7m") {
    public_deps = [ ":pw_boot_cortex_m" ]
  }
  group("armv8m") {
    public_deps = [ ":pw_boot_cortex_m" ]
  }
}

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