# 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("${chip_root}/build/chip/tools.gni")
import("${chip_root}/src/lib/lib.gni")

assert(chip_build_tools)

executable("chip-tv-app") {
  sources = [
    "${chip_root}/examples/tv-app/tv-common/include/CHIPProjectAppConfig.h",
    "AppImpl.cpp",
    "AppImpl.h",
    "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" ]
  defines = []
  include_dirs = [
    ".",
    "${chip_root}/zzz_generated/chip-tv-app",
    "${chip_root}/src/lib",
  ]

  if (chip_build_libshell) {
    defines += [ "ENABLE_CHIP_SHELL" ]
    sources += [ "AppPlatformShellCommands.cpp" ]
  }

  output_dir = root_out_dir
}

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

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