# 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/core/core.gni")

assert(chip_build_tools)

declare_args() {
  # Use a separate eventloop for CHIP tasks
  config_use_separate_eventloop = true
}

executable("chip-tool") {
  sources = [
    "commands/clusters/ModelCommand.cpp",
    "commands/common/CHIPCommand.cpp",
    "commands/common/CHIPCommand.h",
    "commands/common/Command.cpp",
    "commands/common/CommandInvoker.h",
    "commands/common/Commands.cpp",
    "commands/discover/DiscoverCommand.cpp",
    "commands/discover/DiscoverCommissionablesCommand.cpp",
    "commands/discover/DiscoverCommissionersCommand.cpp",

    # TODO - enable CommissionedListCommand once DNS Cache is implemented
    #    "commands/pairing/CommissionedListCommand.cpp",
    #    "commands/pairing/CommissionedListCommand.h",
    "commands/pairing/OpenCommissioningWindowCommand.cpp",
    "commands/pairing/OpenCommissioningWindowCommand.h",
    "commands/pairing/PairingCommand.cpp",
    "commands/payload/AdditionalDataParseCommand.cpp",
    "commands/payload/SetupPayloadParseCommand.cpp",
    "commands/reporting/ReportingCommand.cpp",
    "commands/tests/TestCommand.cpp",
    "config/PersistentStorage.cpp",
    "main.cpp",
  ]

  defines = [ "CONFIG_USE_SEPARATE_EVENTLOOP=${config_use_separate_eventloop}" ]

  deps = [
    "${chip_root}/src/app/server",
    "${chip_root}/src/app/tests/suites/pics",
    "${chip_root}/src/controller/data_model",
    "${chip_root}/src/lib",
    "${chip_root}/src/platform",
    "${chip_root}/third_party/inipp",
  ]

  cflags = [ "-Wconversion" ]

  include_dirs = [
    ".",
    "${chip_root}/zzz_generated/chip-tool",
  ]

  if (chip_enable_transport_trace) {
    deps += [ "${chip_root}/examples/common/tracing:trace_handlers" ]
  }

  output_dir = root_out_dir
}

group("default") {
  deps = [ ":chip-tool" ]
}
