# Copyright (c) 2022 Project CHIP Authors
# All rights reserved.
#
# 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/bouffalolab/common/args.gni")

assert(chip_device_platform == "bl602")

static_library("BL602") {
  sources = [
    "ConfigurationManagerImpl.cpp",
    "ConnectivityManagerImpl.cpp",
    "DiagnosticDataProviderImpl.cpp",
    "NetworkCommissioningDriver.cpp",
    "PlatformManagerImpl.cpp",
    "wifi_mgmr_portable.c",
  ]

  sources += [
    "../../FreeRTOS/SystemTimeSupport.cpp",
    "../../SingletonConfigurationManager.cpp",
    "../common/BLConfig.cpp",
    "../common/ConfigurationManagerImpl.cpp",
    "../common/ConnectivityManagerImpl.cpp",
    "../common/DiagnosticDataProviderImpl.cpp",
    "../common/KeyValueStoreManagerImpl.cpp",
    "../common/Logging.cpp",
    "../common/PlatformManagerImpl.cpp",
  ]

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

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

  defines =
      [ "CONFIG_BOUFFALOLAB_FACTORY_DATA_ENABLE=${chip_enable_factory_data}" ]
  if (chip_enable_factory_data || chip_enable_factory_data_test) {
    sources += [
      "../common/FactoryDataProvider.cpp",
      "../common/FactoryDataProvider.h",
    ]
  }

  deps = [
    "${chip_root}/src/credentials:credentials_header",
    "${chip_root}/src/lib/dnssd:platform_header",
    "${chip_root}/src/platform/logging:headers",
  ]
  public_deps = [ "${chip_root}/src/platform:platform_base" ]
}
