# 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/k32w0_sdk.gni")
import("//build_overrides/mbedtls.gni")
import("//build_overrides/openthread.gni")

import("${build_root}/config/compiler/compiler.gni")
import("${chip_root}/src/crypto/crypto.gni")
import("${chip_root}/src/lib/core/core.gni")
import("${chip_root}/src/platform/nxp/k32w/k32w0/args.gni")

declare_args() {
  # Location of the k32w0 SDK.
  k32w0_sdk_root = getenv("NXP_K32W0_SDK_ROOT")
  chip_with_DK6 = true
  chip_with_OM15082 = 0
  chip_with_ot_cli = 0
  chip_with_low_power = 0
  build_for_k32w061 = 1
  build_for_k32w041am = 0
  build_for_k32w041a = 0
  build_for_k32w041 = 0
  device = "K32W061"
  board = "k32w061dk6"
  chip_with_ntag = 1
  chip_with_high_power = 0
  chip_with_factory_data = 0
  use_fro_32k = 0
  use_custom_factory_provider = 0
  chip_crypto_flavor = "NXP-Ultrafast-P256"
  chip_reduce_ssbl_size = false
  chip_enable_ota_default_processors = 1
}

assert(k32w0_sdk_root != "", "k32w0_sdk_root must be specified")

if (chip_crypto == "platform") {
  assert(chip_crypto_flavor == "tinycrypt" ||
             chip_crypto_flavor == "NXP-Ultrafast-P256",
         "choose tinycrypt or NXP-Ultrafast-P256 as crypto platform")
}

# Defines an k32w SDK build target.
#
# Parameters:
#   k32w0_sdk_root - The location of the k32w SDK.
#   sources - Extra source files to build.
template("k32w0_sdk") {
  if (defined(invoker.k32w0_sdk_root)) {
    k32w0_sdk_root = invoker.k32w0_sdk_root
  }

  if (defined(invoker.override_is_DK6)) {
    chip_with_DK6 = invoker.override_is_DK6
  }

  assert(k32w0_sdk_root != "", "k32w0_sdk_root must be specified")
  assert(chip_with_OM15082 == 0 || chip_with_DK6,
         "OM15082 expansion board is only supported on DK6 board")
  assert(
      chip_with_low_power == 0 ||
          (chip_with_low_power == 1 && chip_with_OM15082 == 0 &&
               chip_with_ot_cli == 0 && chip_with_se05x == 0),
      "Please disable low power if expansion board, openthread CLI or SE is needed!")

  assert(
      use_custom_factory_provider == 0 || chip_with_factory_data == 1,
      "Please set chip_with_factory_data=1 if using custom factory provider.")

  if (build_for_k32w041am == 1 || build_for_k32w041a == 1 ||
      build_for_k32w041 == 1) {
    build_for_k32w061 = 0
  }

  if (build_for_k32w061 == 1) {
    assert(build_for_k32w061 == 1 && build_for_k32w041am == 0 &&
               build_for_k32w041a == 0 && build_for_k32w041 == 0,
           "Please build for only one platform")
    device = "K32W061"
    board = "k32w061dk6"
    chip_with_ntag = 0
  }
  if (build_for_k32w041am == 1) {
    assert(build_for_k32w041am == 1 && build_for_k32w061 == 0 &&
               build_for_k32w041a == 0 && build_for_k32w041 == 0,
           "Please build for only one platform")
    device = "K32W041AM"
    board = "k32w041amdk6"
    chip_with_ntag = 0
  }
  if (build_for_k32w041a == 1) {
    assert(build_for_k32w041a == 1 && build_for_k32w061 == 0 &&
               build_for_k32w041am == 0 && build_for_k32w041 == 0,
           "Please build for only one platform")
    device = "K32W041A"
    board = "k32w041adk6"
    chip_with_ntag = 0
  }
  if (build_for_k32w041 == 1) {
    assert(build_for_k32w041 == 1 && build_for_k32w061 == 0 &&
               build_for_k32w041am == 0 && build_for_k32w041a == 0,
           "Please build for only one platform")
    device = "K32W041"
    board = "k32w041dk6"
    chip_with_ntag = 0
  }

  print("device:", device)
  print("board:", board)
  print("ntag:", chip_with_ntag)
  print("increased TX power:", chip_with_high_power)
  print("FRO32k: ", use_fro_32k)
  print("low power: ", chip_with_low_power)
  print("OTA default processors: ", chip_enable_ota_default_processors)

  if (chip_with_low_power == 1 && chip_logging == true) {
    print(
        "WARNING: enabling logs in low power might break the LP timings. Use at your own risk!")
    print("WARNING: set chip_logging=false to disable logging.")
  }

  if (chip_crypto == "platform") {
    print("ECC crypto lib: ", chip_crypto_flavor)
  }

  device_lowercase = string_replace(board, "dk6", "")

  sdk_target_name = target_name

  config("${sdk_target_name}_config") {
    include_dirs = []
    if (defined(invoker.include_dirs)) {
      include_dirs += invoker.include_dirs
    }

    # We want to treat SDK headers as system headers, so that warnings in those
    # headers are not fatal.  Therefore don't add them directly to include_dirs;
    # we will add them to cflags below instead.
    _sdk_include_dirs = []

    # Directories specified with -isystem options are scanned in left-to-right order.
    # sha256_alt.h is present in both these paths, but the one from port/matter will
    # be selected, which is intended. Both paths are needed, because some header
    # files are not overwritten (e.g. aes_alt.h).
    _sdk_include_dirs += [
      "${k32w0_sdk_root}/middleware/mbedtls/port/matter",
      "${k32w0_sdk_root}/middleware/mbedtls/port/ksdk",
    ]

    if (chip_with_DK6) {
      if (chip_with_low_power != 0) {
        _sdk_include_dirs += [ "${k32w0_sdk_root}/boards/${board}/wireless_examples/openthread/lped/bm" ]
      } else {
        _sdk_include_dirs += [ "${k32w0_sdk_root}/boards/${board}/wireless_examples/openthread/reed/bm" ]
      }
    }

    if (chip_with_low_power != 0) {
      _sdk_include_dirs += [ "${k32w0_sdk_root}/boards/${board}/wireless_examples/hybrid/ble_ot/lped_ble_wuart/ble_802_15_4_common" ]
    }

    if (chip_with_ntag != 0) {
      _sdk_include_dirs += [
        "${k32w0_sdk_root}/middleware/ntag_i2c_plus/HAL_I2C/inc",
        "${k32w0_sdk_root}/middleware/ntag_i2c_plus/HAL_NTAG/inc",
        "${k32w0_sdk_root}/middleware/ntag_i2c_plus/inc",
        "${k32w0_sdk_root}/middleware/ntag_i2c_plus/HAL_TMR/inc",
      ]
    }

    _sdk_include_dirs += [
      "${chip_root}/src/platform/nxp/k32w/k32w0",
      "${k32w0_sdk_root}/CMSIS/Include",
      "${k32w0_sdk_root}/components/serial_manager",
      "${k32w0_sdk_root}/components/uart",
      "${k32w0_sdk_root}/devices/${device}",
      "${k32w0_sdk_root}/devices/${device}/drivers",
      "${k32w0_sdk_root}/devices/${device}/utilities",
      "${k32w0_sdk_root}/devices/${device}/utilities/debug_console",
      "${k32w0_sdk_root}/devices/${device}/utilities/str",
      "${k32w0_sdk_root}/middleware/wireless/ble_controller/interface",
      "${k32w0_sdk_root}/middleware/wireless/bluetooth/application/common",
      "${k32w0_sdk_root}/middleware/wireless/bluetooth/application/common/gatt_db",
      "${k32w0_sdk_root}/middleware/wireless/bluetooth/application/common/gatt_db/macros",
      "${k32w0_sdk_root}/middleware/wireless/bluetooth/host/config",
      "${k32w0_sdk_root}/middleware/wireless/bluetooth/host/interface",
      "${k32w0_sdk_root}/middleware/wireless/framework/Common",
      "${k32w0_sdk_root}/middleware/wireless/framework/Flash/External/Interface",
      "${k32w0_sdk_root}/middleware/wireless/framework/Flash/Internal",
      "${k32w0_sdk_root}/middleware/wireless/framework/FunctionLib",
      "${k32w0_sdk_root}/middleware/wireless/framework/GPIO",
      "${k32w0_sdk_root}/middleware/wireless/framework/Logging/Interface",
      "${k32w0_sdk_root}/middleware/wireless/framework/Keyboard/Interface",
      "${k32w0_sdk_root}/middleware/wireless/framework/LED/Interface",
      "${k32w0_sdk_root}/middleware/wireless/framework/Lists",
      "${k32w0_sdk_root}/middleware/wireless/framework/LowPower/Interface/${board}",
      "${k32w0_sdk_root}/middleware/wireless/framework/MemManager/Interface",
      "${k32w0_sdk_root}/middleware/wireless/framework/Messaging/Interface",
      "${k32w0_sdk_root}/middleware/wireless/framework/ModuleInfo",
      "${k32w0_sdk_root}/middleware/wireless/framework/OSAbstraction/Interface",
      "${k32w0_sdk_root}/middleware/wireless/framework/OtaSupport/Interface/",
      "${k32w0_sdk_root}/middleware/wireless/framework/Panic/Interface",
      "${k32w0_sdk_root}/middleware/wireless/framework/PDM/Include",
      "${k32w0_sdk_root}/middleware/wireless/framework/RNG/Interface",
      "${k32w0_sdk_root}/middleware/wireless/framework/SecLib",
      "${k32w0_sdk_root}/middleware/wireless/framework/SerialManager/Interface",
      "${k32w0_sdk_root}/middleware/wireless/framework/SerialManager/Source",
      "${k32w0_sdk_root}/middleware/wireless/framework/TimersManager/Interface",
      "${k32w0_sdk_root}/middleware/wireless/framework/TimersManager/Source",
      "${k32w0_sdk_root}/middleware/wireless/framework/XCVR/DK6",
      "${k32w0_sdk_root}/middleware/wireless/framework/XCVR/DK6/Build/Include",
      "${k32w0_sdk_root}/middleware/wireless/ieee-802.15.4/MacDynamic/Include",
      "${k32w0_sdk_root}/middleware/wireless/ieee-802.15.4/uMac/Include",
      "${k32w0_sdk_root}/rtos/amazon-freertos/lib/FreeRTOS/portable/GCC/ARM_CM3",
      "${k32w0_sdk_root}/rtos/amazon-freertos/lib/include",
      "${k32w0_sdk_root}/rtos/amazon-freertos/lib/include/private",
      "${k32w0_sdk_root}/rtos/amazon-freertos/lib/third_party/unity/src",
    ]

    libs = [
      "${k32w0_sdk_root}/middleware/wireless/ble_controller/lib/lib_ble_controller_peripheral_commissioning.a",
      "${k32w0_sdk_root}//middleware/wireless/bluetooth/host/lib/lib_ble_5-0_host_matter_cm4_noFP.a",
      "${k32w0_sdk_root}/middleware/wireless/ieee-802.15.4/lib/libMiniMac_Sched.a",
      "${k32w0_sdk_root}/middleware/wireless/framework/PDM/Library/libPDM_extFlash.a",
      "${k32w0_sdk_root}/middleware/wireless/framework/XCVR/lib/libRadio.a",
    ]

    if (chip_crypto == "platform" &&
        chip_crypto_flavor == "NXP-Ultrafast-P256") {
      libs += [ "${k32w0_sdk_root}/middleware/wireless/framework/SecLib/lib_crypto_m4_dspext.a" ]
    } else {
      libs += [ "${k32w0_sdk_root}/middleware/wireless/framework/SecLib/lib_crypto_m4.a" ]
    }

    defines = [
      "gPWR_CpuClk_48MHz=1",
      "gMainThreadPriority_c=5",
      "CPU_JN518X",
      "CPU_JN518X_REV=2",
      "JENNIC_CHIP_FAMILY_NAME=_JN518x",
      "MAC_PROTO_TAG=1",
      "JENNIC_CHIP_FAMILY_JN518x",
      "gPWR_LDOMEM_0_9V_PD=0",
      "SDK_DEBUGCONSOLE=DEBUGCONSOLE_REDIRECT_TO_SDK",
      "PRINTF_ADVANCED_ENABLE",
      "NO_SYSCORECLK_UPD=0",
      "USE_RTOS=1",
      "USE_SDK_OSA=0",
      "gSerialManagerMaxInterfaces_c=2",
      "FSL_RTOS_FREE_RTOS=1",
      "gTotalHeapSize_c=0x10000",
      "DEBUG_SERIAL_INTERFACE_INSTANCE=0",
      "APP_SERIAL_INTERFACE_INSTANCE=1",
      "gOTA_externalFlash_d=1",
      "gEepromPostedOperations_d=1",
      "gOtaEepromPostedOperations_d=1",
      "gOtaVerifyWrite_d=0",
      "gExternalFlashIsCiphered_d=1",
      "PDM_USE_DYNAMIC_MEMORY=1",
      "PDM_SAVE_IDLE=1",
      "PDM_ENCRYPTION=1",
      "gBootData_None_c=1",
      "PROGRAM_PAGE_SZ=256",
      "configFRTOS_MEMORY_SCHEME=4",
      "osCustomStartup=1",
      "ENABLE_RAM_VECTOR_TABLE=1",
      "gTMR_Enabled_d=1",
      "gTimestamp_Enabled_d=0",
      "CHIP_ENABLE_OPENTHREAD=1",
      "gOtaMemPoolId_c=1",
      "PoolsDetails_c=_block_size_ 32 _number_of_blocks_ 6 _pool_id_(0) _eol_ _block_size_ 256 _number_of_blocks_ 3 _pool_id_(0) _eol_ _block_size_ 512 _number_of_blocks_ 2 _pool_id_(0) _eol_ _block_size_ 768 _number_of_blocks_ 1 _pool_id_(0) _eol_ _block_size_ 268  _number_of_blocks_ 8 _pool_id_(gOtaMemPoolId_c) _eol_",
      "SUPPORT_FOR_15_4=1",
      "gAppMaxConnections_c=1",
      "gAppUseBonding_d=0",
      "gAppUsePairing_d=0",
      "gAppUsePrivacy_d=0",
      "gPasskeyValue_c=999999",
      "gSupportBle=1",
      "SUPPORT_FOR_BLE=1",
      "gEnableBleInactivityTimeNotify=1",
      "gConnPhyUpdateReqTxPhySettings_c=(gLePhy2MFlag_c)",
      "gConnPhyUpdateReqRxPhySettings_c=(gLePhy2MFlag_c)",
      "gConnPhyUpdateReqPhyOptions_c=(gLeCodingNoPreference_c)",
      "DUAL_MODE_APP=1",
      "gMainThreadStackSize_c=5096",
      "HEAP_SIZE=gTotalHeapSize_c",
      "gLoggingActive_d=0",
      "gLogRingPlacementOffset_c=0xF000",
      "gSecLibUseSha256Alt_d=1",
      "gOTA_UseSecLibAes=1",
      "gResetSystemReset_d=1",
    ]

    if (chip_crypto == "platform" &&
        chip_crypto_flavor == "NXP-Ultrafast-P256") {
      defines += [ "EC_P256_DSPEXT=1" ]
    }

    if (use_fro_32k == 1) {
      defines += [ "gClkUseFro32K=1" ]
    } else {
      defines += [ "gClkUseFro32K=0" ]
    }

    if (chip_mdns == "platform") {
      defines += [
        "OPENTHREAD_CONFIG_SRP_CLIENT_ENABLE=1",
        "OPENTHREAD_CONFIG_ECDSA_ENABLE=1",
        "OPENTHREAD_CONFIG_DNS_CLIENT_SERVICE_DISCOVERY_ENABLE=1",
        "OPENTHREAD_CONFIG_DNS_CLIENT_ENABLE=1",
      ]
    }

    if (chip_with_se05x == 1) {
      defines += [
        "MBEDTLS_FREESCALE_FREERTOS_CALLOC_ALT=1",
        "CHIP_DEVICE_CONFIG_CHIP_TASK_STACK_SIZE=9216",
      ]
    }

    if (chip_with_DK6) {
      defines += [
        "gUsePdm_d=1",
        "PDM_EXT_FLASH=1",
        "gEepromType_d=gEepromDevice_MX25R8035F_c",
        "gPdmNbSegments=63",
        "gRadioUsePdm_d=1",
      ]

      if (chip_with_OM15082 != 0) {
        defines += [
          "OM15082=1",
          "gKeyBoardSupported_d=1",
          "gKBD_KeysCount_c=4",
        ]
      } else {
        defines += [
          "gKeyBoardSupported_d=1",
          "gKBD_KeysCount_c=2",
        ]
      }

      if (chip_with_low_power == 0) {
        defines += [
          "gLEDSupported_d=1",
          "gLEDsOnTargetBoardCnt_c=2",
          "gLED_InvertedMode_d=1",
        ]
      }
    }

    if (chip_with_ot_cli == 1) {
      defines += [ "CHIP_DEVICE_CONFIG_THREAD_ENABLE_CLI=1" ]
    }

    if (chip_with_low_power == 1) {
      defines += [
        "cPWR_UsePowerDownMode=1",
        "cPWR_FullPowerDownMode=1",
        "DBG_PostStepTickAssess=0",
        "gPWR_FreqScalingWFI=0",
        "mAppUseTickLessMode_c=1",
        "cPWR_DiscardRunningTimerForPowerDown=1",
      ]

      if (chip_logging == false) {
        defines += [
          "K32W_LOG_ENABLED=0",
          "gUartDebugConsole_d=0",
        ]
      } else {
        defines += [
          "K32W_LOG_ENABLED=1",
          "gUartDebugConsole_d=1",
        ]
      }
    } else {
      defines += [
        "cPWR_UsePowerDownMode=0",
        "cPWR_FullPowerDownMode=0",
        "K32W_LOG_ENABLED=1",
        "gUartDebugConsole_d=1",
      ]
    }

    if (build_for_k32w061 == 1) {
      defines += [ "CPU_K32W061HN" ]
    } else if (build_for_k32w041am == 1) {
      defines += [ "CPU_K32W041AMZ" ]
    } else if (build_for_k32w041a == 1) {
      defines += [ "CPU_K32W041AZ" ]
    } else if (build_for_k32w041 == 1) {
      defines += [ "CPU_K32W041HN" ]
    }

    if (chip_with_high_power == 1) {
      defines += [
        "K32WMCM_APP_BUILD",
        "JENNIC_CHIP_FAMILY_JN518x",
      ]
      _sdk_include_dirs += [
        "${k32w0_sdk_root}/middleware/wireless/ieee-802.15.4/Include",
        "${k32w0_sdk_root}/middleware/wireless/ieee-802.15.4/mMac/Include",
      ]
    }

    if (chip_with_ntag == 1) {
      defines += [
        "CONFIG_CHIP_NFC_COMMISSIONING=1",
        "CHIP_DEVICE_CONFIG_ENABLE_NFC=1",
      ]
    }

    if (chip_with_factory_data == 1) {
      defines += [ "CONFIG_CHIP_K32W0_REAL_FACTORY_DATA=1" ]
    }

    if (chip_enable_ota_default_processors == 1) {
      defines += [ "CONFIG_CHIP_K32W0_OTA_DEFAULT_PROCESSORS=1" ]
    }

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

    cflags = [
      "-Wno-unused-function",
      "-Wno-conversion",
      "-Wno-sign-compare",
      "-Wno-clobbered",
      "-Wno-implicit-fallthrough",
      "-Wno-shadow",
      "-mthumb",
      "-MMD",
      "-MP",
    ]

    if (is_clang) {
      cflags += [
        "-Wno-self-assign",
        "-Wno-parentheses-equality",
      ]
    } else {
      cflags += [
        "-fno-optimize-strlen",

        # TODO After upgrading the compiler we started to see new error from address
        # warning. To allow PR that rolls up compiler we have suppress this warning
        # as an error temporarily.
        # see https://github.com/project-chip/connectedhomeip/issues/26221
        "-Wno-error=address",
      ]
    }

    # Now add our "system-header" include dirs
    foreach(include_dir, _sdk_include_dirs) {
      cflags += [ "-isystem" + rebase_path(include_dir, root_build_dir) ]
    }
  }

  # TODO - Break up this monolith and make it configurable.
  source_set(sdk_target_name) {
    forward_variables_from(invoker, "*")

    if (!defined(sources)) {
      sources = []
    }

    sources += [
      "${k32w0_sdk_root}/components/serial_manager/serial_manager.c",
      "${k32w0_sdk_root}/components/serial_manager/serial_port_uart.c",
      "${k32w0_sdk_root}/components/uart/usart_adapter.c",
      "${k32w0_sdk_root}/devices/${device}/drivers/fsl_adc.c",
      "${k32w0_sdk_root}/devices/${device}/drivers/fsl_aes.c",
      "${k32w0_sdk_root}/devices/${device}/drivers/fsl_clock.c",
      "${k32w0_sdk_root}/devices/${device}/drivers/fsl_common.c",
      "${k32w0_sdk_root}/devices/${device}/drivers/fsl_ctimer.c",
      "${k32w0_sdk_root}/devices/${device}/drivers/fsl_flash.c",
      "${k32w0_sdk_root}/devices/${device}/drivers/fsl_flexcomm.c",
      "${k32w0_sdk_root}/devices/${device}/drivers/fsl_fmeas.c",
      "${k32w0_sdk_root}/devices/${device}/drivers/fsl_gpio.c",
      "${k32w0_sdk_root}/devices/${device}/drivers/fsl_i2c.c",
      "${k32w0_sdk_root}/devices/${device}/drivers/fsl_i2c_freertos.c",
      "${k32w0_sdk_root}/devices/${device}/drivers/fsl_inputmux.c",
      "${k32w0_sdk_root}/devices/${device}/drivers/fsl_pint.c",
      "${k32w0_sdk_root}/devices/${device}/drivers/fsl_power.c",
      "${k32w0_sdk_root}/devices/${device}/drivers/fsl_reset.c",
      "${k32w0_sdk_root}/devices/${device}/drivers/fsl_rng.c",
      "${k32w0_sdk_root}/devices/${device}/drivers/fsl_rtc.c",
      "${k32w0_sdk_root}/devices/${device}/drivers/fsl_sha.c",
      "${k32w0_sdk_root}/devices/${device}/drivers/fsl_spifi.c",
      "${k32w0_sdk_root}/devices/${device}/drivers/fsl_usart.c",
      "${k32w0_sdk_root}/devices/${device}/drivers/fsl_wtimer.c",
      "${k32w0_sdk_root}/devices/${device}/mcuxpresso/startup_${device_lowercase}.c",
      "${k32w0_sdk_root}/devices/${device}/system_${device}.c",
      "${k32w0_sdk_root}/devices/${device}/utilities/debug_console/fsl_debug_console.c",
      "${k32w0_sdk_root}/devices/${device}/utilities/str/fsl_str.c",
      "${k32w0_sdk_root}/middleware/wireless/ble_controller/config/controller_config.c",
      "${k32w0_sdk_root}/middleware/wireless/bluetooth/application/common/ble_conn_manager.c",
      "${k32w0_sdk_root}/middleware/wireless/bluetooth/application/common/ble_host_tasks.c",
      "${k32w0_sdk_root}/middleware/wireless/bluetooth/host/config/ble_globals.c",
      "${k32w0_sdk_root}/middleware/wireless/framework/Common/MicroInt_arm_sdk2.c",
      "${k32w0_sdk_root}/middleware/wireless/framework/Flash/External/Source/Eeprom_MX25R8035F.c",
      "${k32w0_sdk_root}/middleware/wireless/framework/Flash/Internal/Flash_Adapter.c",
      "${k32w0_sdk_root}/middleware/wireless/framework/FunctionLib/FunctionLib.c",
      "${k32w0_sdk_root}/middleware/wireless/framework/GPIO/GPIO_Adapter.c",
      "${k32w0_sdk_root}/middleware/wireless/framework/Keyboard/Source/Keyboard.c",
      "${k32w0_sdk_root}/middleware/wireless/framework/LED/Source/LED.c",
      "${k32w0_sdk_root}/middleware/wireless/framework/Lists/GenericList.c",
      "${k32w0_sdk_root}/middleware/wireless/framework/Logging/Source/dbg_logging.c",
      "${k32w0_sdk_root}/middleware/wireless/framework/LowPower/Source/${board}/PWR.c",
      "${k32w0_sdk_root}/middleware/wireless/framework/LowPower/Source/${board}/PWRLib.c",
      "${k32w0_sdk_root}/middleware/wireless/framework/LowPower/Source/${board}/PWR_setjmp.S",
      "${k32w0_sdk_root}/middleware/wireless/framework/MemManager/Source/MemManager.c",
      "${k32w0_sdk_root}/middleware/wireless/framework/Messaging/Source/Messaging.c",
      "${k32w0_sdk_root}/middleware/wireless/framework/OSAbstraction/Source/fsl_os_abstraction_free_rtos.c",
      "${k32w0_sdk_root}/middleware/wireless/framework/OtaSupport/Source/OtaSupport.c",
      "${k32w0_sdk_root}/middleware/wireless/framework/OtaSupport/Source/OtaUtils.c",
      "${k32w0_sdk_root}/middleware/wireless/framework/PDM/pdm_port.c",
      "${k32w0_sdk_root}/middleware/wireless/framework/Panic/Source/Panic.c",
      "${k32w0_sdk_root}/middleware/wireless/framework/RNG/Source/RNG.c",
      "${k32w0_sdk_root}/middleware/wireless/framework/Reset/Reset.c",
      "${k32w0_sdk_root}/middleware/wireless/framework/SecLib/SecLib.c",
      "${k32w0_sdk_root}/middleware/wireless/framework/SecLib/SecLib_ecp256_sw.c",
      "${k32w0_sdk_root}/middleware/wireless/framework/SerialManager/Source/SerialManager.c",
      "${k32w0_sdk_root}/middleware/wireless/framework/SerialManager/Source/UART_Serial_Adapter.c",
      "${k32w0_sdk_root}/middleware/wireless/framework/TimersManager/Source/TMR_Adapter.c",
      "${k32w0_sdk_root}/middleware/wireless/framework/TimersManager/Source/TimersManager.c",
      "${k32w0_sdk_root}/middleware/wireless/framework/XCVR/DK6/fsl_xcvr.c",
      "${k32w0_sdk_root}/rtos/amazon-freertos/lib/FreeRTOS/event_groups.c",
      "${k32w0_sdk_root}/rtos/amazon-freertos/lib/FreeRTOS/list.c",
      "${k32w0_sdk_root}/rtos/amazon-freertos/lib/FreeRTOS/portable/GCC/ARM_CM3/port.c",
      "${k32w0_sdk_root}/rtos/amazon-freertos/lib/FreeRTOS/portable/MemMang/heap_4.c",
      "${k32w0_sdk_root}/rtos/amazon-freertos/lib/FreeRTOS/queue.c",
      "${k32w0_sdk_root}/rtos/amazon-freertos/lib/FreeRTOS/tasks.c",
      "${k32w0_sdk_root}/rtos/amazon-freertos/lib/FreeRTOS/timers.c",
    ]

    if (chip_with_DK6) {
      sources += [
        "${k32w0_sdk_root}/boards/${board}/wireless_examples/openthread/reed/bm/board.c",
        "${k32w0_sdk_root}/boards/${board}/wireless_examples/openthread/reed/bm/board_utility.c",
        "${k32w0_sdk_root}/boards/${board}/wireless_examples/openthread/reed/bm/hardware_init.c",
      ]

      if (chip_with_se05x != 0) {
        sources += [
          "${chip_root}/third_party/simw-top-mini/repo/demos/ksdk/common/boards/DK6/wireless_examples/chip/clock_config.c",
          "${chip_root}/third_party/simw-top-mini/repo/demos/ksdk/common/boards/DK6/wireless_examples/chip/pin_mux.c",
        ]
      } else {
        sources += [
          "${k32w0_sdk_root}/boards/${board}/wireless_examples/openthread/reed/bm/clock_config.c",
          "${k32w0_sdk_root}/boards/${board}/wireless_examples/openthread/reed/bm/pin_mux.c",
        ]
      }
    }

    if (chip_with_low_power != 0) {
      sources += [ "${k32w0_sdk_root}/boards/${board}/wireless_examples/hybrid/ble_ot/lped_ble_wuart/ble_802_15_4_common/app_dual_mode_low_power.c" ]
    }

    if (chip_with_ntag != 0) {
      sources += [
        "${k32w0_sdk_root}/devices/${device}/drivers/fsl_ntag.c",
        "${k32w0_sdk_root}/middleware/ntag_i2c_plus/HAL_I2C/i2c_jn_fsl.c",
        "${k32w0_sdk_root}/middleware/ntag_i2c_plus/HAL_NTAG/ntag_driver.c",
        "${k32w0_sdk_root}/middleware/ntag_i2c_plus/HAL_TMR/timer_driver_jn.c",
      ]
    }

    if (!defined(public_deps)) {
      public_deps = []
    }

    public_deps += [ "${openthread_root}/src/core:libopenthread_core_headers" ]

    if (!defined(public_configs)) {
      public_configs = []
    }

    public_configs += [ ":${sdk_target_name}_config" ]
  }
}
