# 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/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}/InetPlatformConfig.h",
    "${silabs_platform_dir}/KeyValueStoreManagerImpl.h",
    "${silabs_platform_dir}/Logging.cpp",
    "${silabs_platform_dir}/PlatformManagerImpl.h",
    "${silabs_platform_dir}/SilabsConfig.cpp",
    "${silabs_platform_dir}/SilabsConfig.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",
    ]
  }

  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",
    ]
  }
}
