# Copyright (c) 2020 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/efr32_sdk.gni")
import("${chip_root}/examples/common/pigweed/pigweed_rpcs.gni")
import("${chip_root}/src/lib/lib.gni")
import("${chip_root}/src/platform/device.gni")
import("${chip_root}/third_party/silabs/silabs_board.gni")
import("${efr32_sdk_build_root}/SiWx917_sdk.gni")
silabs_common_plat_dir = "${chip_root}/examples/platform/silabs"
wifi_sdk_dir = "${chip_root}/src/platform/silabs/SiWx917/wifi"

declare_args() {
  enable_heap_monitoring = false

  # OTA timeout in seconds
  ota_periodic_query_timeout_sec = 86400

  # Wifi related stuff - they are overridden by gn -args="use_wf200=true"
  sl_wfx_config_softap = false
  sl_wfx_config_scan = true

  # Argument to force enable WPA3 security on rs91x
  rs91x_wpa3_only = false

  # use commissionable data for SiWx917
  siwx917_commissionable_data = false

  #default WiFi SSID
  chip_default_wifi_ssid = ""

  #default Wifi Password
  chip_default_wifi_psk = ""
}

import("${silabs_common_plat_dir}/SiWx917/args.gni")

# Sanity check
assert(chip_enable_wifi)
import("${chip_root}/src/platform/silabs/SiWx917/args.gni")
wisemcu_sdk_root = "${chip_root}/third_party/silabs/wisemcu-wifi-bt-sdk"
silabs_common_plat_dir = "${chip_root}/examples/platform/silabs"

config("chip_examples_project_config") {
  include_dirs = [ "project_include" ]

  # Link options that provide a replacement for dynamic memory operations in standard
  # library with the FreeRTOS malloc in platform code.
  ldflags = [
    # memory allocation -- these must be re-entrant and do locking
    "-Wl,--wrap=malloc",
    "-Wl,--wrap=free",
    "-Wl,--wrap=realloc",
    "-Wl,--wrap=calloc",
    "-Wl,--wrap=MemoryAlloc",

    # Wrap these in case internal newlib call them (e.g. strdup will)
    # directly call _malloc_r)
    "-Wl,--wrap=_malloc_r",
    "-Wl,--wrap=_realloc_r",
    "-Wl,--wrap=_free_r",
    "-Wl,--wrap=_calloc_r",
  ]
}

if (enable_dic) {
  config("efr32_dic_config") {
    include_dirs = [
      "${chip_root}/third_party/silabs/mqtt/stack",
      "${chip_root}/third_party/silabs/mqtt/mqtt_transport_interface/include",
      "${chip_root}/examples/platform/silabs/DIC/matter_abs_interface/include",
    ]
  }

  source_set("efr32-dic") {
    sources = [
      "${chip_root}/examples/platform/silabs/DIC/matter_abs_interface/src/dic.c",
      "${chip_root}/third_party/silabs/mqtt/mqtt_transport_interface/src/MQTT_transport.c",
      "${chip_root}/third_party/silabs/mqtt/mqtt_transport_interface/src/altcp.c",
      "${chip_root}/third_party/silabs/mqtt/mqtt_transport_interface/src/altcp_alloc.c",
      "${chip_root}/third_party/silabs/mqtt/mqtt_transport_interface/src/altcp_tcp.c",
      "${chip_root}/third_party/silabs/mqtt/mqtt_transport_interface/src/altcp_tls_mbedtls.c",
      "${chip_root}/third_party/silabs/mqtt/mqtt_transport_interface/src/altcp_tls_mbedtls_mem.c",
    ]
    public_deps = [
      "${chip_root}/src/inet",
      "${chip_root}/src/lwip",
    ]
    public_configs = [ ":efr32_dic_config" ]
  }
}

source_set("siwx917-matter-shell") {
  if (chip_build_libshell) {
    defines = [ "ENABLE_CHIP_SHELL" ]

    sources = [
      "${silabs_common_plat_dir}/matter_shell.cpp",
      "${wisemcu_sdk_root}/platforms/si91x/drivers/cmsis_driver/UDMA.c",
      "${wisemcu_sdk_root}/platforms/si91x/drivers/cmsis_driver/USART.c",
    ]
    include_dirs = [
      ".",
      "${silabs_common_plat_dir}",
    ]

    public_deps = [
      "${chip_root}/examples/shell/shell_common:shell_common",
      "${chip_root}/src/lib/shell:shell",
      "${chip_root}/src/lib/shell:shell_core",
    ]
  }
}

config("attestation-credentials-config") {
  include_dirs = [ "${chip_root}" ]

  defines = [
    # Set to 1 to enable SI917 attestation credentials
    "SILABS_ATTESTATION_CREDENTIALS",
  ]
}

source_set("siwx917-attestation-credentials") {
  sources = [
    "${silabs_common_plat_dir}/SilabsDeviceAttestationCreds.cpp",
    "${silabs_common_plat_dir}/SilabsDeviceAttestationCreds.h",
  ]

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

  public_configs = [ ":attestation-credentials-config" ]
}

source_set("silabs-factory-data-provider") {
  sources = [
    "${silabs_common_plat_dir}/SilabsDeviceDataProvider.cpp",
    "${silabs_common_plat_dir}/SilabsDeviceDataProvider.h",
  ]

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

  public_configs = [ ":siwx917-common-config" ]
}

config("siwx917-common-config") {
  defines = [ "OTA_PERIODIC_TIMEOUT=${ota_periodic_query_timeout_sec}" ]

  if (!disable_lcd) {
    include_dirs = [ "${silabs_common_plat_dir}/display" ]

    defines += [ "DISPLAY_ENABLED" ]
  }

  if (show_qr_code) {
    defines += [ "QR_CODE_ENABLED" ]
  }

  if (chip_enable_ota_requestor) {
    defines += [ "SILABS_OTA_ENABLED" ]
  }

  if (enable_heap_monitoring) {
    defines += [ "HEAP_MONITORING" ]
  }

  if (siwx917_commissionable_data) {
    defines += [ "SIWX917_USE_COMISSIONABLE_DATA=1" ]
  }

  ldflags = [ "-Wl,--no-warn-rwx-segment" ]
}

config("silabs-wifi-config") {
  defines = []
  include_dirs = []

  if (chip_default_wifi_ssid != "") {
    defines += [
      "SL_ONNETWORK_PAIRING=1",
      "SL_WIFI_SSID=\"${chip_default_wifi_ssid}\"",
    ]
  }
  if (chip_default_wifi_psk != "") {
    assert(chip_default_wifi_ssid != "",
           "ssid can't be null if psk is provided")
    defines += [ "SL_WIFI_PSK=\"${chip_default_wifi_psk}\"" ]
  }

  if (sl_wfx_config_softap) {
    defines += [ "SL_WFX_CONFIG_SOFTAP" ]
  }

  if (sl_wfx_config_scan) {
    defines += [ "SL_WFX_CONFIG_SCAN" ]
  }

  if (chip_enable_wifi_ipv4) {
    defines += [ "CHIP_DEVICE_CONFIG_ENABLE_IPV4" ]
  }

  if (rs91x_wpa3_only) {
    defines += [ "WIFI_ENABLE_SECURITY_WPA3=1" ]
  }
}

source_set("siwx917-common") {
  deps = []
  public_deps = []
  public_configs = [
    ":siwx917-common-config",
    "${efr32_sdk_build_root}:silabs_config",
  ]

  include_dirs = [
    ".",
    "SiWx917/",
    "${wifi_sdk_dir}",
  ]

  sources = [
    "${silabs_common_plat_dir}/LEDWidget.cpp",
    "${silabs_common_plat_dir}/heap_4_silabs.c",
    "${silabs_common_plat_dir}/silabs_utils.cpp",
    "${silabs_common_plat_dir}/syscalls_stubs.cpp",
    "${wifi_sdk_dir}/dhcp_client.cpp",
    "${wifi_sdk_dir}/ethernetif.cpp",
    "${wifi_sdk_dir}/lwip_netif.cpp",
    "${wifi_sdk_dir}/wfx_notify.cpp",
    "SiWx917/rsi_if.c",
    "SiWx917/wfx_rsi_host.c",
    "init_ccpPlatform.cpp",
    "matter_config.cpp",
  ]

  if (use_base_app) {
    sources += [ "BaseApplication.cpp" ]
  }

  if (chip_enable_pw_rpc || chip_build_libshell) {
    sources += [ "uart.cpp" ]
  }

  if (chip_enable_ota_requestor) {
    # TODO: OTA For CCP Platform
  }

  if (!disable_lcd) {
    sources += [
      "${silabs_common_plat_dir}/display/demo-ui.c",
      "${silabs_common_plat_dir}/display/lcd.cpp",
    ]

    include_dirs += [ "${silabs_common_plat_dir}/display" ]
    public_deps += [ "${chip_root}/examples/common/QRCode" ]
  }

  if (enable_heap_monitoring) {
    sources += [ "${silabs_common_plat_dir}/MemMonitoring.cpp" ]
  }

  if (chip_enable_wifi) {
    public_configs += [ ":silabs-wifi-config" ]
  }

  if (chip_build_libshell) {
    deps += [ ":siwx917-matter-shell" ]
  }

  # Attestation Credentials
  if (chip_build_platform_attestation_credentials_provider) {
    deps += [ ":siwx917-attestation-credentials" ]
  }

  # Factory Data Provider
  if (use_efr32_factory_data_provider) {
    public_deps += [ ":silabs-factory-data-provider" ]
  }

  public_deps += [
    "${chip_root}/examples/providers:device_info_provider",
    "${chip_root}/src/lib",
    "${chip_root}/src/setup_payload",
  ]

  if (app_data_model != "") {
    public_deps += [ app_data_model ]
  }
}
