# Copyright (c) 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("//build_overrides/pigweed.gni")

import("${chip_root}/src/platform/ASR/args.gni")
import("${chip_root}/src/platform/device.gni")

assert(chip_device_platform == "asr")

static_library("ASR") {
  sources = []
  sources += [
    "../SingletonConfigurationManager.cpp",
    "ASRConfig.cpp",
    "ASRConfig.h",
    "ASRFactoryDataProvider.cpp",
    "ASRUtils.cpp",
    "ASRUtils.h",
    "BLEManagerImpl.cpp",
    "BLEManagerImpl.h",
    "BlePlatformConfig.h",
    "CHIPDevicePlatformConfig.h",
    "CHIPDevicePlatformEvent.h",
    "CHIPPlatformConfig.h",
    "ConfigurationManagerImpl.cpp",
    "ConfigurationManagerImpl.h",
    "ConnectivityManagerImpl.cpp",
    "ConnectivityManagerImpl.h",
    "DiagnosticDataProviderImpl.cpp",
    "DiagnosticDataProviderImpl.h",
    "InetPlatformConfig.h",
    "KeyValueStoreManagerImpl.cpp",
    "KeyValueStoreManagerImpl.h",
    "Logging.cpp",
    "LwIPCoreLock.cpp",
    "NetworkCommissioningDriver.h",
    "NetworkCommissioningWiFiDriver.cpp",
    "PlatformManagerImpl.cpp",
    "PlatformManagerImpl.h",
    "SystemPlatformConfig.h",
    "SystemTimeSupport.cpp",
    "WarmPlatformConfig.h",
  ]

  if (chip_config_network_layer_ble) {
    sources += [
      "BLEAppSvc.cpp",
      "BLEAppSvc.h",
    ]
  }

  #lwip ip6 hook
  sources += [
    "route_hook/asr_route_hook.c",
    "route_hook/asr_route_hook.h",
    "route_hook/asr_route_table.c",
    "route_hook/asr_route_table.h",
  ]

  deps = [
    "${chip_root}/src/lib/dnssd:platform_header",
    "${chip_root}/src/setup_payload",
  ]

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

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