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

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/ConfigureFabricCommand.cpp",
    "commands/pairing/ConfigureFabricCommand.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",
  ]

  output_dir = root_out_dir
}
