# 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/chip.gni")
import("//build_overrides/cyw30739_sdk.gni")

import("${chip_root}/examples/platform/infineon/cyw30739/args.gni")
import("${matter_wpan_sdk_build_root}/matter_wpan_executable.gni")

app_name = "light_switch_app"
cyw30739_project_dir =
    "${chip_root}/examples/light-switch-app/infineon/cyw30739"

matter_wpan_example("wpan_example") {
  sources = [ "${cyw30739_project_dir}/include/CHIPProjectConfig.h" ]

  include_dirs = [ "${cyw30739_project_dir}/include" ]
}

template("matter_wpan_app") {
  forward_variables_from(invoker, [ "board" ])

  import("${matter_wpan_sdk_build_root}/boards/${board}/args.gni")

  matter_wpan_executable(target_name) {
    sources = [
      "src/AppShellCommands.cpp",
      "src/AppTask.cpp",
      "src/BindingHandler.cpp",
      "src/ButtonHandler.cpp",
      "src/LightSwitch.cpp",
      "src/ZclCallbacks.cpp",
    ]

    deps = [
      "${chip_root}/examples/shell/shell_common:shell_common",
      app_data_model,
    ]

    include_dirs = [ "include" ]
  }
}

foreach(board, matter_wpan_sdk_board_list) {
  matter_wpan_app("${app_name}-${board}") {
  }
}

group("default") {
  deps = []
  foreach(board, matter_wpan_sdk_board_list) {
    deps += [ ":${app_name}-${board}" ]
  }
}
