# Copyright (c) 2021 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/chip.gni")
import("//build_overrides/k32w0_sdk.gni")
import("//build_overrides/openthread.gni")
import("${chip_root}/third_party/simw-top-mini/simw_config.gni")

import("${k32w0_sdk_build_root}/k32w0_executable.gni")
import("${k32w0_sdk_build_root}/k32w0_sdk.gni")

assert(current_os == "freertos")

k32w0_platform_dir = "${chip_root}/examples/platform/nxp/k32w/k32w0"

k32w0_sdk("sdk") {
  sources = [
    "${k32w0_platform_dir}/app/project_include/OpenThreadConfig.h",
    "include/CHIPProjectConfig.h",
    "include/FreeRTOSConfig.h",
    "main/include/app_config.h",
  ]

  public_deps =
      [ "${chip_root}/third_party/openthread/platforms:libopenthread-platform" ]

  include_dirs = [
    "main/include",
    "main",
    "include",
    "${k32w0_platform_dir}/app/project_include",
    "${k32w0_platform_dir}/app/support",
    "${k32w0_platform_dir}/util/include",
  ]

  defines = [
    # shell app uses openthread but does not have the NETWORK_COMMISSIONING cluster or zap config.
    "_NO_NETWORK_COMMISSIONING_DRIVER_",
  ]

  if (is_debug) {
    defines += [ "BUILD_RELEASE=0" ]
  } else {
    defines += [ "BUILD_RELEASE=1" ]
  }
}

k32w0_executable("shell_app") {
  output_name = "chip-k32w0x-shell-example"

  sources = [
    "${k32w0_platform_dir}/util/LEDWidget.cpp",
    "${k32w0_platform_dir}/util/include/LEDWidget.h",
    "main/AppTask.cpp",
    "main/main.cpp",
  ]

  deps = [
    ":sdk",
    "${chip_root}/examples/lock-app/lock-common",
    "${chip_root}/examples/shell/shell_common:shell_common",
    "${chip_root}/third_party/mbedtls:mbedtls",
    "${chip_root}/third_party/simw-top-mini:se05x",
    "${k32w0_platform_dir}/app/support:freertos_mbedtls_utils",
  ]

  cflags = [ "-Wconversion" ]

  output_dir = root_out_dir

  ldscript = "${k32w0_platform_dir}/app/ldscripts/chip-k32w0x-linker.ld"

  inputs = [ ldscript ]

  ldflags = [ "-T" + rebase_path(ldscript, root_build_dir) ]
}

group("k32w0") {
  deps = [ ":shell_app" ]
}

group("default") {
  deps = [ ":k32w0" ]
}
