# Copyright (c) 2020-2021 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/nlassert.gni")
import("//build_overrides/nlfaultinjection.gni")

import("${build_root}/config/compiler/compiler.gni")
import("${chip_root}/build/chip/buildconfig_header.gni")
import("${chip_root}/build/chip/tests.gni")
import("${chip_root}/src/platform/device.gni")
import("system.gni")

if (chip_system_config_use_lwip) {
  import("//build_overrides/lwip.gni")
}

declare_args() {
  # Extra header to include in CHIPConfig.h for project.
  # TODO - This should probably be in src/core but src/system also uses it.
  chip_project_config_include = "<CHIPProjectConfig.h>"

  # Extra header to include in SystemConfig.h for project.
  chip_system_project_config_include = "<SystemProjectConfig.h>"

  # Extra include dirs for project configs.
  chip_project_config_include_dirs = []

  # enable clang thread safety analysis in SystemMutex.h,
  # specifically attributes such as capability, guarded_by, acquire, ...
  #
  # see https://clang.llvm.org/docs/ThreadSafetyAnalysis.html
  chip_enable_thread_safety_checks = is_clang
}

if (chip_project_config_include_dirs == [] &&
    chip_project_config_include == "<CHIPProjectConfig.h>" &&
    chip_system_project_config_include == "<SystemProjectConfig.h>") {
  chip_project_config_include_dirs += [ "${chip_root}/config/standalone" ]
}

if (chip_device_platform == "cc13x2_26x2") {
  import("//build_overrides/ti_simplelink_sdk.gni")
} else if (chip_device_platform == "efr32") {
  import("//build_overrides/efr32_sdk.gni")
} else if (chip_device_platform == "qpg") {
  import("//build_overrides/qpg_sdk.gni")
  import("${qpg_sdk_build_root}/qpg_sdk.gni")
} else if (chip_device_platform == "k32w0") {
  import("//build_overrides/k32w0_sdk.gni")
} else if (chip_device_platform == "nxp") {
  import("//build_overrides/nxp_sdk.gni")
} else if (chip_device_platform == "psoc6") {
  import("//build_overrides/psoc6.gni")
} else if (chip_device_platform == "cyw30739") {
  import("//build_overrides/cyw30739_sdk.gni")
} else if (chip_device_platform == "mt793x") {
  import("//build_overrides/mt793x_sdk.gni")
} else if (chip_device_platform == "stm32") {
  import("//build_overrides/stm32_sdk.gni")
} else if (chip_device_platform == "bl702") {
  import("//build_overrides/bouffalolab_iot_sdk.gni")
} else if (chip_device_platform == "bl702l") {
  import("//build_overrides/bouffalolab_iot_sdk.gni")
}

buildconfig_header("system_buildconfig") {
  header = "SystemBuildConfig.h"
  header_dir = "system"

  config_device_layer = chip_device_platform != "none"
  chip_system_config_posix_locking = chip_system_config_locking == "posix"
  chip_system_config_freertos_locking = chip_system_config_locking == "freertos"
  chip_system_config_mbed_locking = chip_system_config_locking == "mbed"
  chip_system_config_cmsis_rtos_locking =
      chip_system_config_locking == "cmsis-rtos"
  chip_system_config_zephyr_locking = chip_system_config_locking == "zephyr"
  chip_system_config_no_locking = chip_system_config_locking == "none"
  have_clock_gettime = chip_system_config_clock == "clock_gettime"
  have_clock_settime = have_clock_gettime
  have_gettimeofday = chip_system_config_clock == "gettimeofday"

  defines = [
    "CONFIG_DEVICE_LAYER=${config_device_layer}",
    "CHIP_SYSTEM_CONFIG_TEST=${chip_build_tests}",
    "CHIP_WITH_NLFAULTINJECTION=${chip_with_nlfaultinjection}",
    "CHIP_SYSTEM_CONFIG_USE_DISPATCH=${chip_system_config_use_dispatch}",
    "CHIP_SYSTEM_CONFIG_USE_LIBEV=${chip_system_config_use_libev}",
    "CHIP_SYSTEM_CONFIG_USE_LWIP=${chip_system_config_use_lwip}",
    "CHIP_SYSTEM_CONFIG_USE_OPEN_THREAD_ENDPOINT=${chip_system_config_use_open_thread_inet_endpoints}",
    "CHIP_SYSTEM_CONFIG_USE_SOCKETS=${chip_system_config_use_sockets}",
    "CHIP_SYSTEM_CONFIG_USE_NETWORK_FRAMEWORK=false",
    "CHIP_SYSTEM_CONFIG_POSIX_LOCKING=${chip_system_config_posix_locking}",
    "CHIP_SYSTEM_CONFIG_FREERTOS_LOCKING=${chip_system_config_freertos_locking}",
    "CHIP_SYSTEM_CONFIG_MBED_LOCKING=${chip_system_config_mbed_locking}",
    "CHIP_SYSTEM_CONFIG_CMSIS_RTOS_LOCKING=${chip_system_config_cmsis_rtos_locking}",
    "CHIP_SYSTEM_CONFIG_ZEPHYR_LOCKING=${chip_system_config_zephyr_locking}",
    "CHIP_SYSTEM_CONFIG_NO_LOCKING=${chip_system_config_no_locking}",
    "CHIP_SYSTEM_CONFIG_PROVIDE_STATISTICS=${chip_system_config_provide_statistics}",
    "HAVE_CLOCK_GETTIME=${have_clock_gettime}",
    "HAVE_CLOCK_SETTIME=${have_clock_settime}",
    "HAVE_GETTIMEOFDAY=${have_gettimeofday}",
    "HAVE_SYS_TIME_H=true",
    "HAVE_NETINET_ICMP6_H=true",
    "HAVE_ICMP6_FILTER=true",
    "CONFIG_HAVE_VCBPRINTF=false",
    "HAVE_SYS_SOCKET_H=${chip_system_config_use_sockets}",
  ]

  if (chip_project_config_include != "") {
    defines += [ "CHIP_PROJECT_CONFIG_INCLUDE=${chip_project_config_include}" ]
  }
  if (chip_platform_config_include != "") {
    defines +=
        [ "CHIP_PLATFORM_CONFIG_INCLUDE=${chip_platform_config_include}" ]
  }
  if (chip_system_project_config_include != "") {
    defines += [
      "SYSTEM_PROJECT_CONFIG_INCLUDE=${chip_system_project_config_include}",
    ]
  }
  if (chip_system_platform_config_include != "") {
    defines += [
      "SYSTEM_PLATFORM_CONFIG_INCLUDE=${chip_system_platform_config_include}",
    ]
  }
  if (chip_enable_thread_safety_checks) {
    defines += [ "SYSTEM_ENABLE_CLANG_THREAD_SAFETY_ANALYSIS=1" ]
  }

  if (chip_system_layer_impl_config_file != "") {
    defines += [ "CHIP_SYSTEM_LAYER_IMPL_CONFIG_FILE=${chip_system_layer_impl_config_file}" ]
  } else {
    defines += [ "CHIP_SYSTEM_LAYER_IMPL_CONFIG_FILE=<system/SystemLayerImpl${chip_system_config_event_loop}.h>" ]
  }

  if (chip_system_config_use_sockets && current_os != "zephyr") {
    defines += [
      "CHIP_SYSTEM_CONFIG_MULTICAST_HOMING=${chip_system_config_use_sockets} ",
    ]
  } else {
    defines += [ "CHIP_SYSTEM_CONFIG_MULTICAST_HOMING=0 " ]
  }
}

config("system_config") {
  include_dirs = chip_project_config_include_dirs
}

source_set("system_config_header") {
  sources = [ "SystemConfig.h" ]

  public_configs = [
    ":system_config",
    "${chip_root}/src:includes",
  ]

  deps = [
    ":system_buildconfig",
    "${chip_root}/src/platform:platform_buildconfig",
  ]

  public_deps = []

  if (target_cpu != "esp32") {
    if (chip_system_config_use_lwip) {
      public_deps += [ "${lwip_root}:lwip" ]
    } else {
      if (chip_device_platform == "efr32") {
        public_deps += [ "${efr32_sdk_build_root}:efr32_sdk" ]
      }
      if (chip_device_platform == "qpg") {
        public_deps += [ "${qpg_sdk_build_root}:qpg_sdk" ]
      }
      if (chip_device_platform == "k32w0") {
        public_deps += [ "${k32w0_sdk_build_root}:k32w0_sdk" ]
      }
      if (chip_device_platform == "nxp") {
        public_deps += [ "${nxp_sdk_build_root}:nxp_sdk" ]
      }
      if (chip_device_platform == "cyw30739") {
        public_deps += [ "${cyw30739_sdk_build_root}:cyw30739_sdk" ]
      }
      if (chip_device_platform == "stm32") {
        public_deps += [ "${stm32_sdk_build_root}:stm32_sdk" ]
      }
      if (chip_device_platform == "bl702") {
        public_deps += [ "${bouffalolab_iot_sdk_build_root}/bl702:bl_iot_sdk" ]
      }
      if (chip_device_platform == "bl702l") {
        public_deps += [ "${bouffalolab_iot_sdk_build_root}/bl702l:bl_iot_sdk" ]
      }

      # Add platform here as needed.
    }
  }

  if (chip_device_platform == "mt793x") {
    public_deps += [ "${mt793x_sdk_build_root}:mt793x_sdk" ]
  }
}

static_library("system") {
  output_name = "libSystemLayer"

  sources = [
    "PlatformEventSupport.h",
    "SystemAlignSize.h",
    "SystemClock.cpp",
    "SystemClock.h",
    "SystemError.cpp",
    "SystemError.h",
    "SystemEvent.h",
    "SystemLayer.cpp",
    "SystemLayer.h",
    "SystemLayerImpl.h",
    "SystemMutex.cpp",
    "SystemMutex.h",
    "SystemPacketBuffer.cpp",
    "SystemPacketBuffer.h",
    "SystemPacketBufferInternal.h",
    "SystemStats.cpp",
    "SystemStats.h",
    "SystemTimer.cpp",
    "SystemTimer.h",
    "TLVPacketBufferBackingStore.cpp",
    "TLVPacketBufferBackingStore.h",
    "TimeSource.h",
    "WakeEvent.cpp",
    "WakeEvent.h",
  ]

  if (chip_system_layer_impl_config_file == "") {
    # This includes one of:
    #    - SystemLayerImplFreeRTOS.h
    #    - SystemLayerImplFreeRTOS.cpp
    # or
    #    - SystemLayerImplSelect.h
    #    - SystemLayerImplSelect.cpp
    sources += [
      "SystemLayerImpl${chip_system_config_event_loop}.cpp",
      "SystemLayerImpl${chip_system_config_event_loop}.h",
    ]
  }

  cflags = [ "-Wconversion" ]

  public_deps = [
    ":system_config_header",
    "${chip_root}/src/lib/core:error",
    "${chip_root}/src/lib/support",
    "${chip_root}/src/platform:platform_config_header",
    "${nlassert_root}:nlassert",
  ]

  allow_circular_includes_from = [ "${chip_root}/src/lib/support" ]

  if (chip_system_config_use_sockets) {
    sources += [ "SocketEvents.h" ]
  }

  if (chip_with_nlfaultinjection) {
    sources += [
      "SystemFaultInjection.cpp",
      "SystemFaultInjection.h",
    ]
    public_deps += [ "${nlfaultinjection_root}:nlfaultinjection" ]
  }
}
