# 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("args.gni")

import("${chip_root}/build/chip/tools.gni")

assert(chip_build_tools)

declare_args() {
  # Enable Wake on LAN cluster
  chip_enable_wake_on_lan = false
}

config("config") {
  include_dirs = [
    ".",
    "${chip_root}/zzz_generated/chip-tv-app",
    "${chip_root}/src/lib",
  ]

  defines = [ "CHIP_ENABLE_WAKE_ON_LAN=${chip_enable_wake_on_lan}" ]

  cflags = [ "-Wconversion" ]
}

executable("chip-tv-app") {
  sources = [
    "${chip_root}/examples/tv-app/tv-common/include/CHIPProjectAppConfig.h",
    "AppImpl.cpp",
    "AppImpl.h",
    "AppPlatformShellCommands.cpp",
    "ZclCallbacks.cpp",
    "include/account-login/AccountLoginManager.cpp",
    "include/account-login/AccountLoginManager.h",
    "include/application-basic/ApplicationBasicManager.cpp",
    "include/application-basic/ApplicationBasicManager.h",
    "include/application-launcher/ApplicationLauncherManager.cpp",
    "include/application-launcher/ApplicationLauncherManager.h",
    "include/audio-output/AudioOutputManager.cpp",
    "include/audio-output/AudioOutputManager.h",
    "include/channel/ChannelManager.cpp",
    "include/channel/ChannelManager.h",
    "include/cluster-change-attribute.cpp",
    "include/cluster-init.cpp",
    "include/content-launcher/ContentLauncherManager.cpp",
    "include/content-launcher/ContentLauncherManager.h",
    "include/keypad-input/KeypadInputManager.cpp",
    "include/keypad-input/KeypadInputManager.h",
    "include/low-power/LowPowerManager.cpp",
    "include/low-power/LowPowerManager.h",
    "include/media-input/MediaInputManager.cpp",
    "include/media-input/MediaInputManager.h",
    "include/media-playback/MediaPlaybackManager.cpp",
    "include/media-playback/MediaPlaybackManager.h",
    "include/target-navigator/TargetNavigatorManager.cpp",
    "include/target-navigator/TargetNavigatorManager.h",
    "include/wake-on-lan/WakeOnLanManager.cpp",
    "include/wake-on-lan/WakeOnLanManager.h",
    "main.cpp",
  ]

  deps = [
    "${chip_root}/examples/platform/linux:app-main",
    "${chip_root}/examples/tv-app/tv-common",
    "${chip_root}/src/lib",
    "${chip_root}/third_party/inipp",
  ]

  cflags = [ "-Wconversion" ]

  public_configs = [ ":config" ]

  if (chip_build_libshell) {
    cflags += [ "-DENABLE_CHIP_SHELL" ]
  }

  output_dir = root_out_dir
}

group("linux") {
  deps = [ ":chip-tv-app" ]
}
