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

assert(chip_device_platform == "cc13x4_26x4")

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

static_library("cc13x4_26x4") {
  sources = [
    "../../FreeRTOS/SystemTimeSupport.cpp",
    "../../SingletonConfigurationManager.cpp",
    "../CC13XX_26XXConfig.cpp",
    "../CC13XX_26XXConfig.h",
    "../ConfigurationManagerImpl.cpp",
    "../ConnectivityManagerImpl.cpp",
    "../DiagnosticDataProviderImpl.cpp",
    "../DiagnosticDataProviderImpl.h",
    "../KeyValueStoreManagerImpl.cpp",
    "../Logging.cpp",
    "../PlatformManagerImpl.cpp",
    "../Random.c",
    "BlePlatformConfig.h",
    "CHIPDevicePlatformConfig.h",
    "CHIPDevicePlatformEvent.h",
    "ConnectivityManagerImpl.h",
    "InetPlatformConfig.h",
    "KeyValueStoreManagerImpl.h",
    "PlatformManagerImpl.h",
    "SystemPlatformConfig.h",
  ]

  deps = [ "${chip_root}/src/platform/logging:headers" ]

  public = [
    "${chip_root}/src/credentials/CHIPCert.h",
    "${chip_root}/src/credentials/CertificationDeclaration.h",
    "${chip_root}/src/credentials/DeviceAttestationCredsProvider.h",
  ]

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

  if (chip_enable_ble) {
    sources += [
      "../BLEManagerImpl.cpp",
      "BLEManagerImpl.h",
    ]
  }

  if (custom_factory_data) {
    sources += [
      "../FactoryDataProvider.cpp",
      "../FactoryDataProvider.h",
    ]
  }

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

  if (chip_enable_openthread) {
    public_deps += [
      "${chip_root}/third_party/openthread:openthread",
      "${chip_root}/third_party/openthread/platforms/ti:libopenthread-ti",
      "${chip_root}/third_party/ti_simplelink_sdk:mbedtls",
      "${chip_root}/third_party/ti_simplelink_sdk:ti_simplelink_sdk",
      "${chip_root}/third_party/ti_simplelink_sdk:ti_simplelink_sysconfig",
    ]

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

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