# Copyright (c) 2021 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/chip.gni")

import("${chip_root}/src/lib/core/core.gni")
import("${chip_root}/src/platform/device.gni")
import("${chip_root}/src/system/system.gni")

source_set("commands") {
  sources = [
    "Help.cpp",
    "Help.h",
    "Meta.cpp",
  ]

  public_deps = [ "${chip_root}/src/lib/shell:shell_core" ]

  if (chip_device_platform != "none") {
    sources += [
      "Config.cpp",
      "Device.cpp",
      "OnboardingCodes.cpp",
    ]
  }

  if (chip_enable_wifi) {
    sources += [
      "WiFi.cpp",
      "WiFi.h",
    ]
  }

  if (chip_enable_ble && chip_device_platform != "none") {
    sources += [ "BLE.cpp" ]
  }

  if (chip_enable_nfc && chip_device_platform != "none") {
    sources += [ "NFC.cpp" ]
  }

  if (chip_device_platform != "none") {
    sources += [ "Dns.cpp" ]
    public_deps += [ "${chip_root}/src/lib/address_resolve" ]
  }

  if (chip_enable_ota_requestor && chip_device_platform != "none" &&
      chip_device_platform != "linux" && chip_device_platform != "darwin") {
    sources += [ "Ota.cpp" ]
  }

  if (chip_system_config_provide_statistics) {
    sources += [ "Stat.cpp" ]
  }

  if (chip_device_platform != "none") {
    public_deps += [ "${chip_root}/src/app/server" ]
  }

  cflags = [ "-Wconversion" ]
}
