# 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)

executable("chip-tv-app") {
  sources = [
    "${chip_root}/examples/tv-app/tv-common/include/CHIPProjectAppConfig.h",
    "AppImpl.cpp",
    "AppImpl.h",
    "AppPlatformShellCommands.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/endpoint-configuration/EndpointConfigurationStorage.cpp",
    "include/endpoint-configuration/EndpointConfigurationStorage.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" ]

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

  output_dir = root_out_dir
}

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