# 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("//build_overrides/pigweed.gni")

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

assert(chip_device_platform == "efr32")

if (chip_enable_openthread) {
  import("//build_overrides/openthread.gni")
}

static_library("EFR32") {
  sources = [
    "../FreeRTOS/SystemTimeSupport.cpp",
    "../SingletonConfigurationManager.cpp",
    "BLEManagerImpl.cpp",
    "BLEManagerImpl.h",
    "BlePlatformConfig.h",
    "CHIPDevicePlatformConfig.h",
    "CHIPDevicePlatformEvent.h",
    "CHIPMem-Platform.cpp",
    "CHIPPlatformConfig.h",
    "ConfigurationManagerImpl.cpp",
    "ConfigurationManagerImpl.h",
    "ConnectivityManagerImpl.h",
    "DeviceNetworkProvisioningDelegateImpl.cpp",
    "DeviceNetworkProvisioningDelegateImpl.h",
    "DiagnosticDataProviderImpl.cpp",
    "DiagnosticDataProviderImpl.h",
    "EFR32Config.cpp",
    "EFR32Config.h",
    "InetPlatformConfig.h",
    "KeyValueStoreManagerImpl.cpp",
    "KeyValueStoreManagerImpl.h",
    "Logging.cpp",
    "PlatformManagerImpl.cpp",
    "PlatformManagerImpl.h",
    "SystemPlatformConfig.h",
    "freertos_bluetooth.c",
    "freertos_bluetooth.h",
    "gatt_db.c",
    "gatt_db.h",
  ]

  if (chip_enable_ota_requestor) {
    sources += [
      "OTAImageProcessorImpl.cpp",
      "OTAImageProcessorImpl.h",
    ]
  }

  public_deps = [ "${chip_root}/src/platform:platform_base" ]

  # Add pigweed KVS
  deps = [
    "$dir_pw_kvs:crc16",
    "$dir_pw_log",
  ]
  public_deps += [
    "$dir_pw_checksum",
    "$dir_pw_kvs",
  ]

  if (chip_enable_openthread) {
    if (chip_openthread_ftd) {
      public_deps +=
          [ "${chip_root}/third_party/openthread/repo:libopenthread-ftd" ]
    } else {
      public_deps +=
          [ "${chip_root}/third_party/openthread/repo:libopenthread-mtd" ]
    }

    sources += [
      "../OpenThread/OpenThreadUtils.cpp",
      "ConnectivityManagerImpl.cpp",
      "ThreadStackManagerImpl.cpp",
      "ThreadStackManagerImpl.h",
    ]

    if (chip_mdns == "platform") {
      sources += [ "../OpenThread/DnssdImpl.cpp" ]
      deps += [ "${chip_root}/src/lib/dnssd:platform_header" ]
    }

    public_configs = [
      "${chip_root}/src/lib/address_resolve:default_address_resolve_config",
    ]
  }

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