# 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/app/icd/icd.gni")
import("${chip_root}/src/lib/lib.gni")
import("${chip_root}/src/platform/device.gni")
import("${efr32_sdk_build_root}/efr32_sdk.gni")
import("${efr32_sdk_build_root}/silabs_board.gni")

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_transition = true

  #default WiFi SSID
  chip_default_wifi_ssid = ""

  #default Wifi Password
  chip_default_wifi_psk = ""

  # Enable TestEventTrigger in GeneralDiagnostics cluster
  sl_enable_test_event_trigger = false

  # The EnableKey in hex string format used by TestEventTrigger command in
  # GeneralDiagnostics cluster. The length of the string should be 16 bytes.
  sl_test_event_trigger_enable_key = "00112233445566778899AABBCCDDEEFF"
}

silabs_common_plat_dir = "${chip_root}/examples/platform/silabs"

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

# Sanity check
assert(!(chip_enable_wifi && chip_enable_openthread))
assert(!(use_rs9116 && chip_enable_openthread))
assert(!(use_SiWx917 && chip_enable_openthread))
assert(!(use_wf200 && chip_enable_openthread))

if (chip_enable_wifi) {
  assert(use_rs9116 || use_wf200 || use_SiWx917)
  import("${chip_root}/src/platform/silabs/wifi_args.gni")

  if (use_rs9116) {
    import("rs911x/rs911x.gni")
  } else if (use_SiWx917) {
    import("rs911x/rs9117.gni")
  }
  if (use_wf200) {
    import("wf200/wf200.gni")
  }
}

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",
  ]
}

config("test-event-trigger-config") {
  defines = [ "SL_MATTER_TEST_EVENT_TRIGGER_ENABLED" ]

  if (is_debug) {
    defines += [ "SL_MATTER_TEST_EVENT_TRIGGER_ENABLE_KEY=\"${sl_test_event_trigger_enable_key}\"" ]
  }
}

source_set("test-event-trigger") {
  sources = [
    "${silabs_common_plat_dir}/SilabsTestEventTriggerDelegate.cpp",
    "${silabs_common_plat_dir}/SilabsTestEventTriggerDelegate.h",
  ]

  public_configs = [ ":test-event-trigger-config" ]

  public_deps = [
    ":silabs-factory-data-provider",
    "${chip_root}/src/app:test-event-trigger",
    "${chip_root}/src/lib/core",
    "${chip_root}/src/lib/support",
  ]
}

source_set("openthread_core_config_efr32_chip_examples") {
  if (chip_enable_openthread) {
    sources = [ "project_include/OpenThreadConfig.h" ]

    public_deps = [ "${efr32_sdk_build_root}:efr32_sdk" ]

    if (use_silabs_thread_lib) {
      public_deps += [ "${efr32_sdk_build_root}:openthread_core_config_efr32" ]
    } else {
      public_deps += [ "${chip_root}/third_party/openthread/platforms/efr32:openthread_core_config_efr32" ]
    }

    public_configs = [ ":chip_examples_project_config" ]
  }
}

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

    sources = [ "${silabs_common_plat_dir}/matter_shell.cpp" ]
    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}" ]
}

source_set("efr32-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/lib/support",
    "${chip_root}/src/platform:platform_base",
    "${chip_root}/src/setup_payload",
  ]

  if (sl_enable_test_event_trigger) {
    public_configs = [ ":test-event-trigger-config" ]
  }
}

config("efr32-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 (chip_enable_multi_ota_requestor) {
    defines += [ "CHIP_DEVICE_CONFIG_ENABLE_MULTI_OTA_REQUESTOR=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_transition) {
    # TODO: Change this macro once WF200 support is provided
    defines += [ "WIFI_ENABLE_SECURITY_WPA3_TRANSITION=1" ]
  }
}

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

  # DIC
  if (enable_dic) {
    public_deps +=
        [ "${silabs_common_plat_dir}/DIC/matter_abs_interface:silabs-dic" ]
  }

  # AWS SDK OTA
  if (aws_sdk_ota) {
    public_deps += [
      "${silabs_common_plat_dir}/DIC/matter_abs_interface:silabs-aws-sdk-ota",
    ]
  }

  include_dirs = [ "." ]

  sources = [
    "${silabs_common_plat_dir}/BaseApplication.cpp",
    "${silabs_common_plat_dir}/LEDWidget.cpp",
    "${silabs_common_plat_dir}/MatterConfig.cpp",
    "${silabs_common_plat_dir}/SoftwareFaultReports.cpp",
    "${silabs_common_plat_dir}/heap_4_silabs.c",
    "${silabs_common_plat_dir}/silabs_utils.cpp",
    "${silabs_common_plat_dir}/syscalls_stubs.cpp",
  ]

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

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

  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" ]
  }

  # OpenThread Settings
  if (chip_enable_openthread) {
    deps += [
      "${chip_root}/third_party/openthread:openthread",
      "${chip_root}/third_party/openthread:openthread-platform",
    ]
  }

  if (chip_enable_wifi) {
    if (use_rs9116) {
      sources += rs911x_src_plat

      # All the stuff from wiseconnect
      sources += rs911x_src_sapi
      include_dirs += rs911x_inc_plat

      #add compilation flags for rs991x build. This will be addressed directly in wiseconnect sdk in the next version release of that sdk
      cflags = rs911x_cflags
    } else if (use_SiWx917) {
      sources += rs911x_src_plat

      # All the stuff from wiseconnect
      sources += rs9117_src_sapi
      include_dirs += rs9117_inc_plat

      #add compilation flags for rs991x build. This will be addressed directly in wiseconnect sdk in the next version release of that sdk
    } else if (use_wf200) {
      sources += wf200_plat_src
      include_dirs += wf200_plat_incs
    }

    public_configs += [ ":silabs-wifi-config" ]
  }

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

  # Attestation Credentials
  public_deps += [ ":efr32-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/app/server",
    "${chip_root}/src/lib",
    "${chip_root}/src/setup_payload",
  ]

  if (sl_enable_test_event_trigger) {
    public_deps += [ ":test-event-trigger" ]
  }

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