# 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/build.gni")
import("//build_overrides/chip.gni")
import("//build_overrides/efr32_sdk.gni")
import("//build_overrides/pigweed.gni")

import("${build_root}/config/defaults.gni")
import("${efr32_sdk_build_root}/SiWx917_sdk.gni")
import("${efr32_sdk_build_root}/efr32_executable.gni")

import("${chip_root}/examples/common/pigweed/pigweed_rpcs.gni")
import("${chip_root}/src/platform/device.gni")

if (chip_enable_pw_rpc) {
  import("//build_overrides/pigweed.gni")
  import("$dir_pw_build/target_types.gni")
}

assert(current_os == "freertos")

efr32_project_dir = "${chip_root}/examples/light-switch-app/silabs/SiWx917"
examples_plat_dir = "${chip_root}/examples/platform/silabs/SiWx917"
examples_common_plat_dir = "${chip_root}/examples/platform/silabs"

declare_args() {
  # Dump memory usage at link time.
  chip_print_memory_usage = false

  # Monitor & log memory usage at runtime.
  enable_heap_monitoring = false

  # Enable Sleepy end device
  enable_sleepy_device = false

  # OTA timeout in seconds
  OTA_periodic_query_timeout = 86400

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

  # Disable LCD on supported devices
  disable_lcd = true

  # Argument to Disable IPv4 for wifi(rs911)
  chip_enable_wifi_ipv4 = false

  # Argument to force enable WPA3 security
  rs91x_wpa3_only = false

  #default WiFi SSID
  chip_default_wifi_ssid = ""

  #default Wifi Password
  chip_default_wifi_psk = ""
}

declare_args() {
  # Enables LCD Qr Code on supported devices
  show_qr_code = !disable_lcd
}

# qr code cannot be true if lcd is disabled
assert(!(disable_lcd && show_qr_code))

# Sanity check
assert(!(chip_enable_wifi && chip_enable_openthread))
assert(!(use_rs911x && chip_enable_openthread))
assert(!(use_wf200 && chip_enable_openthread))
if (chip_enable_wifi) {
  assert(use_rs911x || use_wf200)
  enable_openthread_cli = false
  import("${chip_root}/src/platform/silabs/SiWx917/wifi_args.gni")
}

# ThunderBoards, Explorer Kit and MGM240L do not support LCD (No LCD)
if (silabs_board == "BRD4166A" || silabs_board == "BRD2601B" ||
    silabs_board == "BRD2703A" || silabs_board == "BRD4319A") {
  show_qr_code = false
  disable_lcd = true
}

defines = []

# WiFi settings
if (chip_enable_wifi) {
  if (chip_default_wifi_ssid != "") {
    defines += [
      "CHIP_ONNETWORK_PAIRING=1",
      "CHIP_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 += [ "CHIP_WIFI_PSK=\"${chip_default_wifi_psk}\"" ]
  }
  wifi_sdk_dir = "${chip_root}/src/platform/silabs/SiWx917/wifi"
  efr32_lwip_defs = [ "LWIP_NETIF_API=1" ]
  if (lwip_ipv4) {
    efr32_lwip_defs += [
      "LWIP_IPV4=1",

      # adds following options to provide
      # them to .cpp source files
      # flags ported from lwipopts file
      # TODO: move lwipopts to one location
      "LWIP_ARP=1",
      "LWIP_ICMP=1",
      "LWIP_IGMP=1",
      "LWIP_DHCP=1",
      "LWIP_DNS=0",
    ]
  } else {
    efr32_lwip_defs += [ "LWIP_IPV4=0" ]
  }
  if (lwip_ipv6) {
    efr32_lwip_defs += [ "LWIP_IPV6=1" ]
  } else {
    efr32_lwip_defs += [ "LWIP_IPV6=0" ]
  }

  wiseconnect_sdk_root = "${chip_root}/third_party/silabs/wisemcu-wifi-bt-sdk"
  import("${examples_plat_dir}/SiWx917/rs911x.gni")
}

efr32_sdk("sdk") {
  sources = [
    "${efr32_project_dir}/include/CHIPProjectConfig.h",
    "${examples_plat_dir}/FreeRTOSConfig.h",
  ]

  include_dirs = [
    "${chip_root}/src/platform/silabs/SiWx917",
    "${efr32_project_dir}/include",
    "${examples_plat_dir}",
    "${chip_root}/src/lib",
    "${examples_common_plat_dir}",
  ]

  defines += [
    "BOARD_ID=${silabs_board}",
    "OTA_PERIODIC_TIMEOUT=${OTA_periodic_query_timeout}",
  ]

  if (chip_enable_pw_rpc) {
    defines += [
      "HAL_VCOM_ENABLE=1",
      "PW_RPC_ENABLED",
    ]
  }

  # WiFi Settings
  if (chip_enable_wifi) {
    if (use_rs911x) {
      defines += rs911x_defs
      include_dirs += rs911x_plat_incs
    } else if (use_wf200) {
      defines += wf200_defs
      include_dirs += wf200_plat_incs
    }

    if (use_rs911x_sockets) {
      include_dirs += [ "${examples_plat_dir}/wifi/rsi-sockets" ]
      defines += rs911x_sock_defs
    } else {
      # Using LWIP instead of the native TCP/IP stack
      defines += efr32_lwip_defs
    }

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

efr32_executable("light_switch_app") {
  output_name = "chip-efr32-light-switch-example.out"
  public_configs = [ "${efr32_sdk_build_root}:silabs_config" ]
  include_dirs = [ "include" ]
  defines = []

  sources = [
    "${examples_common_plat_dir}/heap_4_silabs.c",
    "${examples_plat_dir}/BaseApplication.cpp",
    "${examples_plat_dir}/init_ccpPlatform.cpp",
    "${examples_plat_dir}/matter_config.cpp",
    "${examples_plat_dir}/siwx917_utils.cpp",
    "src/AppTask.cpp",
    "src/ZclCallbacks.cpp",
    "src/binding-handler.cpp",
    "src/main.cpp",
  ]

  if (use_wstk_leds) {
    #sources += [ "${examples_plat_dir}/LEDWidget.cpp" ]
  }

  if (chip_enable_pw_rpc || chip_build_libshell || enable_openthread_cli ||
      use_wf200 || use_rs911x) {
    #sources += [ "${examples_plat_dir}/uart.cpp" ]
  }

  deps = [
    ":sdk",
    "${chip_root}/examples/light-switch-app/light-switch-common",
    "${chip_root}/examples/providers:device_info_provider",
    "${chip_root}/src/lib",
    "${chip_root}/src/setup_payload",
  ]

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

  # Factory Data Provider
  if (use_efr32_factory_data_provider) {
    deps += [ "${examples_plat_dir}:efr32-factory-data-provider" ]
  }

  # WiFi Settings
  if (chip_enable_wifi) {
    if (use_rs911x) {
      sources += rs911x_src_plat

      # All the stuff from wiseconnect
      sources += rs911x_src_sapi

      # Apparently - the rsi library needs this (though we may not use use it)
      sources += rs911x_src_sock
      include_dirs += rs911x_inc_plat

      if (use_rs911x_sockets) {
        #
        # Using native sockets inside RS911x
        #
        include_dirs += rs911x_sock_inc
      } else {
        #
        # We use LWIP - not built-in sockets
        #
        sources += rs911x_src_lwip
      }
    } else if (use_wf200) {
      sources += wf200_plat_src
      include_dirs += wf200_plat_incs
    }

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

    if (rs91x_wpa3_only) {
      # TODO: Change this macro once WF200 support is provided
      defines += [ "WIFI_ENABLE_SECURITY_WPA3=1" ]
    }
  }

  if (!disable_lcd) {
    sources += [
      "${examples_plat_dir}/display/demo-ui.c",
      "${examples_plat_dir}/display/lcd.cpp",
    ]
    include_dirs += [ "${examples_plat_dir}/display" ]
    defines += [
      "DISPLAY_ENABLED",
      "IS_DEMO_SWITCH=1",
    ]
    if (show_qr_code) {
      defines += [ "QR_CODE_ENABLED" ]
      deps += [ "${chip_root}/examples/common/QRCode" ]
    }
  }

  if (chip_enable_pw_rpc) {
    defines += [
      "PW_RPC_ENABLED",
      "PW_RPC_ATTRIBUTE_SERVICE=1",
      "PW_RPC_BUTTON_SERVICE=1",
      "PW_RPC_DESCRIPTOR_SERVICE=1",
      "PW_RPC_DEVICE_SERVICE=1",
      "PW_RPC_LIGHTING_SERVICE=1",
    ]

    sources += [
      "${chip_root}/examples/common/pigweed/RpcService.cpp",
      "${chip_root}/examples/common/pigweed/efr32/PigweedLoggerMutex.cpp",
      "${examples_common_plat_dir}/PigweedLogger.cpp",
      "${examples_common_plat_dir}/Rpc.cpp",
    ]

    deps += [
      "$dir_pw_hdlc:rpc_channel_output",
      "$dir_pw_stream:sys_io_stream",
      "${chip_root}/config/efr32/lib/pw_rpc:pw_rpc",
      "${chip_root}/examples/common/pigweed:attributes_service.nanopb_rpc",
      "${chip_root}/examples/common/pigweed:button_service.nanopb_rpc",
      "${chip_root}/examples/common/pigweed:descriptor_service.nanopb_rpc",
      "${chip_root}/examples/common/pigweed:device_service.nanopb_rpc",
      "${chip_root}/examples/common/pigweed:lighting_service.nanopb_rpc",
      "${examples_plat_dir}/pw_sys_io:pw_sys_io_siwx917",
    ]

    deps += pw_build_LINK_DEPS

    include_dirs += [
      "${chip_root}/examples/common",
      "${chip_root}/examples/common/pigweed/efr32",
    ]
  }

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

  ldscript = "${examples_plat_dir}/ldscripts/${silabs_family}.ld"

  inputs = [ ldscript ]

  ldflags = [ "-T" + rebase_path(ldscript, root_build_dir) ]

  if (chip_print_memory_usage) {
    ldflags += [
      "-Wl,--print-memory-usage",
      "-fstack-usage",
    ]
  }

  # WiFi Settings
  if (chip_enable_wifi) {
    ldflags += [
      "-Wl,--defsym",
      "-Wl,SILABS_WIFI=1",
    ]
  }

  output_dir = root_out_dir
}

group("efr32") {
  deps = [ ":light_switch_app" ]
}

group("default") {
  deps = [ ":efr32" ]
}
