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

assert(chip_build_tools)

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

  output_dir = root_out_dir
}

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