# Copyright (c) 2020 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/build.gni")
import("//build_overrides/chip.gni")
import("//build_overrides/ti_simplelink_sdk.gni")

import("${build_root}/toolchain/flashable_executable.gni")
import("${chip_root}/src/platform/cc13xx_26xx/factory_data_config.gni")
import("${chip_root}/src/platform/device.gni")
import("ti_simplelink_board.gni")
import("ti_simplelink_sdk.gni")

declare_args() {
  matter_device_vid = ""
  matter_device_pid = ""
  matter_software_ver = ""
  matter_software_ver_str = ""
}

assert(matter_device_vid != "", "matter_device_vid must be specified")
assert(matter_device_pid != "", "matter_device_pid must be specified")
assert(matter_software_ver != "", "matter_software_ver must be specified")
assert(matter_software_ver_str != "",
       "matter_software_ver_str must be specified")

template("ti_simplelink_executable") {
  simplelink_target_name = target_name

  output_base_name = get_path_info(invoker.output_name, "name")

  #used for OTA image creator for the cc13xx
  if (ti_simplelink_device_family == "cc13x4_26x4") {
    objcopy_image_name = output_base_name + ".hex"
    objcopy_image_format = "ihex"
  } else {
    objcopy_image_name = output_base_name + ".bin"
    objcopy_image_format = "binary"
  }
  objcopy = "arm-none-eabi-objcopy"

  config("${simplelink_target_name}_config") {
    defines = []

    if (defined(invoker.defines)) {
      defines += invoker.defines
    }

    # add OTA options if available
    defines += [
      "CHIP_DEVICE_CONFIG_DEVICE_VENDOR_ID=${matter_device_vid}",
      "CHIP_DEVICE_CONFIG_DEVICE_PRODUCT_ID=${matter_device_pid}",
      "CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION=${matter_software_ver}",
      "CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION_STRING=\"${matter_software_ver_str}\"",
    ]
  }

  flashable_executable("${simplelink_target_name}.out") {
    forward_variables_from(invoker, "*")

    public_configs = [ ":${simplelink_target_name}_config" ]

    if (ti_simplelink_device_family == "cc13x4_26x4") {
      if (chip_enable_ota_requestor) {
        sources +=
            [ "${chip_root}/src/platform/cc13xx_26xx/oad_image_header.c" ]
        if (custom_factory_data) {
          ldscript = "${chip_root}/src/platform/cc13xx_26xx/cc13x4_26x4/cc13x4_cc26x4_freertos_ota_factory_data.lds"
        } else {
          ldscript = "${chip_root}/src/platform/cc13xx_26xx/cc13x4_26x4/cc13x4_cc26x4_freertos_ota.lds"
        }
      } else {
        if (custom_factory_data) {
          ldscript = "${chip_root}/src/platform/cc13xx_26xx/cc13x4_26x4/cc13x4_cc26x4_freertos_factory_data.lds"
        } else {
          ldscript = "${chip_root}/src/platform/cc13xx_26xx/cc13x4_26x4/cc13x4_cc26x4_freertos.lds"
        }
      }
    } else if (ti_simplelink_device_family == "cc32xx") {
      ldscript = "${ti_simplelink_sdk_root}/source/ti/boards/cc32xxsf/cc32xxsf_freertos.lds"
    }

    inputs = [ ldscript ]

    ldflags = [
      "-L" + rebase_path(ti_simplelink_sdk_root + "/source", root_build_dir),
      rebase_path(
          "${target_gen_dir}/sysconfig/ti_utils_build_linker.cmd.genlibs",
          root_build_dir),
      "-T" + rebase_path(ldscript, root_build_dir),
    ]
  }

  if (chip_enable_ota_requestor) {
    if (ti_simplelink_device_family == "cc13x4_26x4") {
      if (custom_factory_data) {
        pw_python_action("${simplelink_target_name}-without-factory-data.hex") {
          public_deps = [ ":${simplelink_target_name}.out.image" ]

          script = "${ti_simplelink_sdk_build_root}/factory_data_trim.py"
          sources = [ "${root_out_dir}/${objcopy_image_name}" ]
          outputs =
              [ "${root_out_dir}/${output_base_name}-without-factory-data.hex" ]

          args = [
            rebase_path("${root_out_dir}/${output_base_name}.hex",
                        root_out_dir),
            rebase_path("${root_out_dir}/${output_base_name}.out.map",
                        root_out_dir),
            rebase_path(
                "${root_out_dir}/${output_base_name}-without-factory-data.hex",
                root_out_dir),
            "cc13x4_26x4",
          ]
        }
        pw_python_action("${simplelink_target_name}-factory-data.hex") {
          script = "${ti_simplelink_sdk_build_root}/create_factory_data.py"
          sources = [
            "${chip_root}/src/platform/cc13xx_26xx/factory_data.schema",
            "${chip_root}/src/platform/cc13xx_26xx/factory_data_cc13xx_26xx.json",
          ]
          outputs = [ "${root_out_dir}/${output_base_name}-factory-data.hex" ]

          args = [
            "-factory_data",
            rebase_path(
                "${chip_root}/src/platform/cc13xx_26xx/factory_data_cc13xx_26xx.json"),
            "-schema",
            rebase_path(
                "${chip_root}/src/platform/cc13xx_26xx/factory_data.schema"),
            "-o",
            rebase_path("${root_out_dir}/${output_base_name}-factory-data.hex",
                        root_out_dir),
            "-device",
            "cc13x4_26x4",
          ]
        }
      }

      # add MCUBoot Header to the executable
      action("${simplelink_target_name}_header.hex") {
        if (custom_factory_data) {
          public_deps =
              [ ":${simplelink_target_name}-without-factory-data.hex" ]
        } else {
          public_deps = [ ":${simplelink_target_name}.out.image" ]
        }

        script = "${ti_simplelink_sdk_root}/source/third_party/mcuboot/scripts/imgtool.py"
        if (custom_factory_data) {
          sources =
              [ "${root_out_dir}/${output_base_name}-without-factory-data.hex" ]
          input_path =
              "${root_out_dir}/${output_base_name}-without-factory-data.hex"
        } else {
          sources = [ "${root_out_dir}/${output_base_name}.hex" ]
          input_path = "${root_out_dir}/${output_base_name}.hex"
        }
        outputs = [ "${root_out_dir}/${output_base_name}_header.hex" ]

        args = [
          "sign",
          "--header-size",
          "0x80",
          "--align",
          "4",
          "--slot-size",
          "0x000F6000",  # must match the flash_map_backend definitions
          "--version",
          matter_software_ver_str,
          "--pad-header",
          "--pad",
          "--key",
          rebase_path(
              "${ti_simplelink_sdk_root}/source/third_party/mcuboot/root-ec-p256.pem",
              root_build_dir),
          rebase_path(input_path, root_out_dir),
          rebase_path("${root_out_dir}/${output_base_name}_header.hex",
                      root_out_dir),
        ]
      }
      action("${simplelink_target_name}_header.bin") {
        inputs = [ "${root_out_dir}/${output_base_name}_header.hex" ]
        outputs = [ "${root_out_dir}/${output_base_name}_header.bin" ]
        deps = [ ":${simplelink_target_name}_header.hex" ]
        args = [
          objcopy,
          "-I",
          "ihex",
          "-O",
          "binary",
          rebase_path("${root_out_dir}/${output_base_name}_header.hex",
                      root_build_dir),
          rebase_path("${root_out_dir}/${output_base_name}_header.bin",
                      root_build_dir),
        ]
        script = "${build_root}/gn_run_binary.py"
      }

      # Generate MCUBoot sysconfig
      ti_sysconfig("${simplelink_target_name}_mcuboot.syscfg") {
        sources = [ "${ti_simplelink_sdk_build_root}/mcuboot/mcuboot.syscfg" ]
        rtos = "nortos"
        outputs = [
          "ti_drivers_config.c",
          "ti_drivers_config.h",
          "ti_devices_config.c",
          "ti_devices_config.h",

          # not traditional source files
          #"ti_utils_build_linker.cmd.genlibs",
          #"syscfg_c.rov.xs",
        ]
      }

      #build MCUBoot bootloader
      # config("${simplelink_target_name}_mcubootloader_config") {
      #   # libs = [ "${ti_simplelink_sdk_root}/source/ti/devices/cc13x4_cc26x4/driverlib/bin/gcc/driverlib.lib" ]
      # }
      flashable_executable("${simplelink_target_name}_mcubootloader") {
        output_name = "${output_base_name}.mcubootloader.out"
        output_dir = root_out_dir
        deps = [
          ":${simplelink_target_name}_mcuboot.syscfg",
          ":build_external_library",
        ]
        public_configs = [ ":external_library_config" ]
        ldscript =
            "${ti_simplelink_sdk_build_root}/mcuboot/mcuboot_cc13x4_cc26x4.lds"
        objcopy_image_name = "${output_base_name}.mcubootloader.hex"
        objcopy_image_format = "ihex"
        inputs = [ ldscript ]
        sources = [
          "${ti_simplelink_sdk_build_root}/mcuboot/flash_map_backend.c",
          "${ti_simplelink_sdk_build_root}/mcuboot/mcuboot_config/mcuboot_config.h",
          "${ti_simplelink_sdk_build_root}/syscalls_stubs.cpp",
          "${ti_simplelink_sdk_root}/source/third_party/mcuboot/boot/bootutil/src/boot_record.c",
          "${ti_simplelink_sdk_root}/source/third_party/mcuboot/boot/bootutil/src/bootutil_misc.c",
          "${ti_simplelink_sdk_root}/source/third_party/mcuboot/boot/bootutil/src/bootutil_public.c",
          "${ti_simplelink_sdk_root}/source/third_party/mcuboot/boot/bootutil/src/caps.c",
          "${ti_simplelink_sdk_root}/source/third_party/mcuboot/boot/bootutil/src/encrypted.c",
          "${ti_simplelink_sdk_root}/source/third_party/mcuboot/boot/bootutil/src/fault_injection_hardening.c",
          "${ti_simplelink_sdk_root}/source/third_party/mcuboot/boot/bootutil/src/fault_injection_hardening_delay_rng_mbedtls.c",
          "${ti_simplelink_sdk_root}/source/third_party/mcuboot/boot/bootutil/src/image_ec.c",
          "${ti_simplelink_sdk_root}/source/third_party/mcuboot/boot/bootutil/src/image_ec256.c",
          "${ti_simplelink_sdk_root}/source/third_party/mcuboot/boot/bootutil/src/image_ed25519.c",
          "${ti_simplelink_sdk_root}/source/third_party/mcuboot/boot/bootutil/src/image_rsa.c",
          "${ti_simplelink_sdk_root}/source/third_party/mcuboot/boot/bootutil/src/image_validate.c",
          "${ti_simplelink_sdk_root}/source/third_party/mcuboot/boot/bootutil/src/loader.c",
          "${ti_simplelink_sdk_root}/source/third_party/mcuboot/boot/bootutil/src/swap_misc.c",
          "${ti_simplelink_sdk_root}/source/third_party/mcuboot/boot/bootutil/src/swap_move.c",
          "${ti_simplelink_sdk_root}/source/third_party/mcuboot/boot/bootutil/src/swap_priv.h",
          "${ti_simplelink_sdk_root}/source/third_party/mcuboot/boot/bootutil/src/swap_scratch.c",
          "${ti_simplelink_sdk_root}/source/third_party/mcuboot/boot/bootutil/src/tlv.c",
          "${ti_simplelink_sdk_root}/source/third_party/mcuboot/boot/ti/source/mcuboot_app/keys.c",
          "${ti_simplelink_sdk_root}/source/third_party/mcuboot/boot/ti/source/mcuboot_app/mcuboot_app.c",
          "${ti_simplelink_sdk_root}/source/third_party/mcuboot/boot/ti/source/mcuboot_app/security_cnt.c",
          "${ti_simplelink_sdk_root}/source/third_party/mcuboot/ext/mbedtls-asn1/src/asn1parse.c",
          "${ti_simplelink_sdk_root}/source/third_party/mcuboot/ext/mbedtls-asn1/src/platform_util.c",
          "${ti_simplelink_sdk_root}/source/third_party/mcuboot/ext/ti-crypto/sl_crypto.c",
          "${ti_simplelink_sdk_root}/source/ti/common/cc26xx/debug/led_debug.c",
          "${ti_simplelink_sdk_root}/source/ti/common/cc26xx/ecc/ECDSACC26X4_driverlib.c",
          "${ti_simplelink_sdk_root}/source/ti/common/cc26xx/sha2/sha2_driverlib.c",
          "${ti_simplelink_sdk_root}/source/ti/common/flash/no_rtos/extFlash/bsp_spi_cc13x4_cc26x4.c",
          "${ti_simplelink_sdk_root}/source/ti/common/flash/no_rtos/extFlash/ext_flash.c",
          "${ti_simplelink_sdk_root}/source/ti/common/mcuboot/boot_seed/boot_seed_cc13x4_cc26x4.c",
        ]

        include_dirs = [
          # === MUST BE BEFORE ===
          # "${ti_simplelink_sdk_root}/source/third_party/mcuboot/boot/ti/source/mcuboot_app"
          # to eclipse the mcuboot config header
          "${ti_simplelink_sdk_build_root}/mcuboot",

          "${ti_simplelink_sdk_root}/kernel/nortos",
          "${ti_simplelink_sdk_root}/source",
          "${ti_simplelink_sdk_root}/source/third_party/mcuboot/boot/bootutil/include",
          "${ti_simplelink_sdk_root}/source/third_party/mcuboot/boot/bootutil/src",
          "${ti_simplelink_sdk_root}/source/third_party/mcuboot/boot/ti/source/mcuboot_app",
          "${ti_simplelink_sdk_root}/source/third_party/mcuboot/ext",
          "${ti_simplelink_sdk_root}/source/third_party/mcuboot/ext/mbedtls-asn1/include",
          "${ti_simplelink_sdk_root}/source/ti",
          "${ti_simplelink_sdk_root}/source/ti/common/cc26xx/ecc",
          "${ti_simplelink_sdk_root}/source/ti/common/cc26xx/sha2",
          "${ti_simplelink_sdk_root}/source/ti/common/flash/no_rtos/extFlash",
        ]

        defines = [
          "EXCLUDE_TRACE",
          "BOOT_LOADER",
        ]

        ldflags = [
          "-eresetISR",
          "-L" +
              rebase_path(ti_simplelink_sdk_root + "/source", root_build_dir),
          "-L" + rebase_path(ti_simplelink_sdk_root + "/kernel/nortos",
                             root_build_dir),
          rebase_path(
              "${target_gen_dir}/${simplelink_target_name}_mcuboot.syscfg/ti_utils_build_linker.cmd.genlibs",
              root_build_dir),
          "-T" + rebase_path(ldscript, root_build_dir),
        ]
      }

      action("${simplelink_target_name}-mcuboot.hex") {
        public_deps = [
          ":${simplelink_target_name}_header.bin",
          ":${simplelink_target_name}_mcubootloader.image",
        ]

        if (custom_factory_data) {
          public_deps += [ ":${simplelink_target_name}-factory-data.hex" ]

          script = "${ti_simplelink_sdk_build_root}/oad_and_factory_data_merge_tool.py"
          sources = [
            "${root_out_dir}/${output_base_name}-factory-data.hex",
            "${root_out_dir}/${output_base_name}.mcubootloader.hex",
            "${root_out_dir}/${output_base_name}_header.bin",
          ]
        } else {
          script = "${ti_simplelink_sdk_build_root}/oad_merge_tool.py"
          sources = [
            "${root_out_dir}/${output_base_name}.mcubootloader.hex",
            "${root_out_dir}/${output_base_name}_header.bin",
          ]
        }

        outputs = [ "${root_out_dir}/${output_base_name}-mcuboot.hex" ]

        if (custom_factory_data) {
          args = [
            rebase_path("${root_out_dir}/${output_base_name}_header.hex",
                        root_build_dir),
            rebase_path("${root_out_dir}/${output_base_name}.mcubootloader.hex",
                        root_build_dir),
            rebase_path("${root_out_dir}/${output_base_name}-factory-data.hex",
                        root_build_dir),
            rebase_path("${root_out_dir}/${output_base_name}-mcuboot.hex",
                        root_build_dir),
          ]
        } else {
          args = [
            rebase_path("${root_out_dir}/${output_base_name}_header.hex",
                        root_build_dir),
            rebase_path("${root_out_dir}/${output_base_name}.mcubootloader.hex",
                        root_build_dir),
            rebase_path("${root_out_dir}/${output_base_name}-mcuboot.hex",
                        root_build_dir),
          ]
        }
      }
      pw_python_action("${target_name}.ota") {
        # For MCUBoot the image could be truncated to the actual executable
        # size. The hex file is padded to the slot size.
        public_deps = [ ":${simplelink_target_name}_header.bin" ]

        script = "${chip_root}/src/app/ota_image_tool.py"
        sources = [ "${root_out_dir}/${output_base_name}_header.bin" ]
        outputs = [ "${root_out_dir}/${output_base_name}.ota" ]

        args = [
          "create",
          rebase_path("${root_out_dir}/${output_base_name}_header.bin",
                      root_build_dir),
          rebase_path("${root_out_dir}/${output_base_name}.ota",
                      root_build_dir),
        ]

        args += [
          "-v",
          matter_device_vid,
          "-p",
          matter_device_pid,
          "-vn",
          matter_software_ver,
          "-vs",
          matter_software_ver_str,
        ]
        if (defined(invoker.ota_digest)) {
          args += [
            "-da",
            matter_ota_digest,
          ]
        } else {
          args += [
            "-da",
            "sha256",
          ]
        }
        if (defined(invoker.ota_args)) {
          args += invoker.ota_args
        }
      }
    }
  } else if (ti_simplelink_device_family == "cc13x4_26x4" &&
             custom_factory_data) {
    pw_python_action("${simplelink_target_name}-without-factory-data.hex") {
      public_deps = [ ":${simplelink_target_name}.out.image" ]

      script = "${ti_simplelink_sdk_build_root}/factory_data_trim.py"
      sources = [ "${root_out_dir}/${objcopy_image_name}" ]
      outputs =
          [ "${root_out_dir}/${output_base_name}-without-factory-data.hex" ]

      args = [
        rebase_path("${root_out_dir}/${output_base_name}.hex", root_out_dir),
        rebase_path("${root_out_dir}/${output_base_name}.out.map",
                    root_out_dir),
        rebase_path(
            "${root_out_dir}/${output_base_name}-without-factory-data.hex",
            root_out_dir),
        "cc13x4_26x4",
      ]
    }
    pw_python_action("${simplelink_target_name}-factory-data.hex") {
      script = "${ti_simplelink_sdk_build_root}/create_factory_data.py"
      sources = [
        "${chip_root}/src/platform/cc13xx_26xx/factory_data.schema",
        "${chip_root}/src/platform/cc13xx_26xx/factory_data_cc13xx_26xx.json",
      ]
      outputs = [ "${root_out_dir}/${output_base_name}-factory-data.hex" ]

      args = [
        "-factory_data",
        rebase_path(
            "${chip_root}/src/platform/cc13xx_26xx/factory_data_cc13xx_26xx.json"),
        "-schema",
        rebase_path(
            "${chip_root}/src/platform/cc13xx_26xx/factory_data.schema"),
        "-o",
        rebase_path("${root_out_dir}/${output_base_name}-factory-data.hex",
                    root_out_dir),
        "-device",
        "cc13x4_26x4",
      ]
    }
    pw_python_action("${simplelink_target_name}-and-factory-data.hex") {
      public_deps = [
        ":${simplelink_target_name}-factory-data.hex",
        ":${simplelink_target_name}-without-factory-data.hex",
      ]
      script = "${ti_simplelink_sdk_build_root}/factory_data_merge_tool.py"
      sources = [
        "${root_out_dir}/${output_base_name}-factory-data.hex",
        "${root_out_dir}/${output_base_name}-without-factory-data.hex",
      ]
      outputs = [ "${root_out_dir}/${output_base_name}-and-factory-data.hex" ]

      args = [
        rebase_path(
            "${root_out_dir}/${output_base_name}-without-factory-data.hex",
            root_build_dir),
        rebase_path("${root_out_dir}/${output_base_name}-factory-data.hex",
                    root_build_dir),
        rebase_path("${root_out_dir}/${output_base_name}-and-factory-data.hex",
                    root_build_dir),
      ]
      args += [ "${root_out_dir}/${output_base_name}-and-factory-data.hex" ]
    }
  }

  group(simplelink_target_name) {
    if (chip_enable_ota_requestor) {
      # Generating the ota binary image
      if (ti_simplelink_device_family == "cc13x4_26x4") {
        data_deps = [
          ":${simplelink_target_name}-mcuboot.hex",
          ":${simplelink_target_name}.ota",
          ":${simplelink_target_name}.out",
        ]
      }
    } else {
      # The executable is the final target.
      data_deps = [ ":${simplelink_target_name}.out" ]
    }

    if (defined(invoker.data_deps)) {
      data_deps += invoker.data_deps
    }
  }
}
