# Copyright (c) 2023 Project CHIP 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
#
# http://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/asr.gni")
import("//build_overrides/build.gni")
import("//build_overrides/chip.gni")
import("${build_root}/toolchain/flashable_executable.gni")

template("asr_executable") {
  output_base_name = get_path_info(invoker.output_name, "name")

  objcopy_image_name = output_base_name + ".bin"
  objcopy_image_format = "binary"

  if (asr_ic_family == "asr595x") {
    objcopy = "${asr_toolchain_root}riscv-asr-elf-objcopy"
  } else if (asr_ic_family == "asr582x") {
    objcopy = "${asr_toolchain_root}arm-none-eabi-objcopy"
  } else {
    objcopy = "objcopy"
  }

  #Copy flashing dependencies to the output directory so that the output
  #is collectively self-contained; this allows flashing to work reliably
  #even if the build and flashing steps take place on different machines
  #or in different containers.

  flashable_executable(target_name) {
    forward_variables_from(invoker, "*")
  }
}
