# Copyright (c) 2021-2023 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}/src/platform/telink/args.gni")

assert(chip_device_platform == "telink")

static_library("telink") {
  sources = [
    "../SingletonConfigurationManager.cpp",
    "../Zephyr/BLEAdvertisingArbiter.cpp",
    "../Zephyr/BLEAdvertisingArbiter.h",
    "../Zephyr/ConfigurationManagerImpl.cpp",
    "../Zephyr/DiagnosticDataProviderImpl.cpp",
    "../Zephyr/DiagnosticDataProviderImpl.h",
    "../Zephyr/DiagnosticDataProviderImplGetter.cpp",
    "../Zephyr/KeyValueStoreManagerImpl.cpp",
    "../Zephyr/Logging.cpp",
    "../Zephyr/PlatformManagerImpl.cpp",
    "../Zephyr/SystemTimeSupport.cpp",
    "../Zephyr/ZephyrConfig.cpp",
    "../Zephyr/ZephyrConfig.h",
    "BLEManagerImpl.cpp",
    "BLEManagerImpl.h",
    "BlePlatformConfig.h",
    "CHIPDevicePlatformConfig.h",
    "CHIPDevicePlatformEvent.h",
    "CHIPPlatformConfig.h",
    "ConfigurationManagerImpl.h",
    "ConnectivityManagerImpl.cpp",
    "ConnectivityManagerImpl.h",
    "InetPlatformConfig.h",
    "KeyValueStoreManagerImpl.h",
    "NFCManagerImpl.cpp",
    "NFCManagerImpl.h",
    "PlatformManagerImpl.h",
    "SystemPlatformConfig.h",
  ]

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

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

  if (chip_enable_factory_data) {
    sources += [
      "FactoryDataParser.c",
      "FactoryDataParser.h",
      "FactoryDataProvider.cpp",
      "FactoryDataProvider.h",
    ]
  }

  if (chip_enable_openthread) {
    sources += [
      "../OpenThread/OpenThreadUtils.cpp",
      "ThreadStackManagerImpl.cpp",
      "ThreadStackManagerImpl.h",
    ]

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

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