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

import("${chip_root}/build/chip/buildconfig_header.gni")
import("${chip_root}/src/crypto/crypto.gni")

silabs_platform_dir = "${chip_root}/src/platform/silabs"

assert(chip_device_platform == "efr32")

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

if (chip_crypto == "platform") {
  import("//build_overrides/mbedtls.gni")
}

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

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

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

  # Add platform crypto implementation
  if (chip_crypto == "platform") {
    sources += [
      "CHIPCryptoPALPsaEfr32.cpp",
      "Efr32OpaqueKeypair.h",
      "Efr32PsaOpaqueKeypair.cpp",
      "Efr32PsaOperationalKeystore.cpp",
      "Efr32PsaOperationalKeystore.h",
    ]

    public_deps += [
      "${chip_root}/src/crypto",
      "${mbedtls_root}:mbedtls",
    ]
  }

  # Add pigweed KVS
  deps = [
    "$dir_pw_kvs:crc16",
    "$dir_pw_log",
  ]
  public_deps += [
    "$dir_pw_checksum",
    "$dir_pw_kvs",
  ]
  if (chip_enable_openthread) {
    public_deps += [ "${chip_root}/third_party/openthread:openthread" ]

    deps += [ "${chip_root}/third_party/openthread:openthread_cli" ]

    sources += [
      "${silabs_platform_dir}/ThreadStackManagerImpl.h",
      "../../OpenThread/OpenThreadUtils.cpp",
      "ConnectivityManagerImpl.cpp",
      "ThreadStackManagerImpl.cpp",
    ]

    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 += [
      "${silabs_platform_dir}/ConnectivityManagerImpl_WIFI.cpp",
      "${silabs_platform_dir}/NetworkCommissioningWiFiDriver.cpp",
      "${silabs_platform_dir}/NetworkCommissioningWiFiDriver.h",
    ]
  }
}
