# 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("${chip_root}/src/ble/ble.gni")

declare_args() {
  # Device platform layer: cc13x4_26x4, cc32xx, darwin, efr32, esp32, external, freertos, linux, nrfconnect, nxp, qpg, tizen, cyw30739, bl602, mw320, zephyr, beken, openiotsdk, none.

  chip_device_platform = "auto"
  chip_platform_target = ""

  # Substitute fake platform when building with chip_device_platform=auto.
  chip_fake_platform = false
}

if (chip_device_platform == "auto") {
  if (chip_fake_platform) {
    chip_device_platform = "fake"
  } else if (current_os == "mac" || current_os == "ios") {
    chip_device_platform = "darwin"
  } else if (current_os == "linux") {
    chip_device_platform = "linux"
  } else if (current_os == "tizen") {
    chip_device_platform = "tizen"
  } else if (current_os == "android") {
    chip_device_platform = "android"
  } else if (current_os == "webos") {
    chip_device_platform = "webos"
  } else if (current_os == "zephyr") {
    chip_device_platform = "zephyr"
  } else {
    chip_device_platform = "none"
  }
}

declare_args() {
  # Enable openthread support.
  chip_enable_openthread =
      chip_device_platform == "linux" || chip_device_platform == "qpg" ||
      chip_device_platform == "cc13x4_26x4" ||
      chip_device_platform == "tizen" || chip_device_platform == "stm32" ||
      chip_device_platform == "webos"
}

declare_args() {
  chip_openthread_ftd = chip_enable_openthread

  # Set platform define CHIP_DEVICE_CONFIG_THREAD_BORDER_ROUTER
  # Users should ensure that it sets their thread stack define OPENTHREAD_CONFIG_BORDER_ROUTER_ENABLE
  # or that their setting matches.
  chip_openthread_border_router = false

  # Enable wifi support.
  chip_enable_wifi =
      chip_device_platform == "linux" || chip_device_platform == "esp32" ||
      chip_device_platform == "mbed" || chip_device_platform == "tizen" ||
      chip_device_platform == "android" || chip_device_platform == "ameba" ||
      chip_device_platform == "webos" || chip_device_platform == "cc32xx" ||
      chip_device_platform == "bl602" || chip_device_platform == "mw320" ||
      chip_device_platform == "beken" || chip_device_platform == "mt793x" ||
      chip_device_platform == "asr" ||
      (chip_device_platform == "darwin" && current_os == "mac")

  # Enable ble support.
  if (chip_device_platform == "fake") {
    chip_enable_ble = false
  } else {
    chip_enable_ble = chip_config_network_layer_ble
  }

  # Enable NFC support
  chip_enable_nfc = false

  # Enable OTA requestor support
  chip_enable_ota_requestor = false

  # Select DNS-SD implementation
  if (chip_device_platform == "linux" || chip_device_platform == "esp32" ||
      chip_device_platform == "mbed" || chip_device_platform == "psoc6" ||
      chip_device_platform == "ameba" || chip_device_platform == "webos" ||
      chip_device_platform == "cc32xx" || chip_device_platform == "mw320" ||
      chip_device_platform == "beken" || chip_device_platform == "mt793x" ||
      chip_device_platform == "asr" || chip_device_platform == "openiotsdk") {
    chip_mdns = "minimal"
  } else if (chip_device_platform == "darwin" ||
             chip_device_platform == "cc13x4_26x4" || current_os == "android" ||
             chip_device_platform == "fake" ||
             chip_device_platform == "tizen") {
    chip_mdns = "platform"
  } else {
    chip_mdns = "none"
  }

  # Enable Subscription persistence / resumption for CI and supported platforms
  if (chip_device_platform == "darwin" || chip_device_platform == "linux" ||
      chip_device_platform == "fake" || chip_device_platform == "efr32" ||
      chip_device_platform == "SiWx917") {
    chip_persist_subscriptions = true
  } else {
    chip_persist_subscriptions = false
  }
}

declare_args() {
  # Enable subscription resumption after timeout - separate configuration for power use measurement
  chip_subscription_timeout_resumption = chip_persist_subscriptions
}

if (chip_device_platform == "nxp" && chip_enable_openthread) {
  chip_mdns = "platform"
} else if (chip_device_platform == "nxp" && chip_enable_wifi) {
  chip_mdns = "minimal"
}

declare_args() {
  # Select DNS-SD components to build
  chip_mdns_minimal = chip_mdns == "minimal"
  chip_mdns_platform = chip_mdns == "platform"
}

_chip_device_layer = "none"
if (chip_device_platform == "cc13x4_26x4") {
  _chip_device_layer = "cc13xx_26xx/cc13x4_26x4"
} else if (chip_device_platform == "cc32xx") {
  _chip_device_layer = "cc32xx"
} else if (chip_device_platform == "darwin") {
  _chip_device_layer = "Darwin"
} else if (chip_device_platform == "efr32") {
  _chip_device_layer = "silabs"
} else if (chip_device_platform == "SiWx917") {
  _chip_device_layer = "silabs"
} else if (chip_device_platform == "esp32") {
  _chip_device_layer = "ESP32"
} else if (chip_device_platform == "linux") {
  _chip_device_layer = "Linux"
} else if (chip_device_platform == "tizen") {
  _chip_device_layer = "Tizen"
} else if (chip_device_platform == "nrfconnect") {
  _chip_device_layer = "nrfconnect"
} else if (chip_device_platform == "qpg") {
  _chip_device_layer = "qpg"
} else if (chip_device_platform == "nxp") {
  import("//build_overrides/nxp_sdk.gni")
  import("${nxp_sdk_build_root}/nxp_sdk.gni")
  _chip_device_layer = "nxp/${nxp_platform}"
} else if (chip_device_platform == "nxp_zephyr") {
  _chip_device_layer = "nxp/zephyr"
} else if (chip_device_platform == "telink") {
  _chip_device_layer = "telink"
} else if (chip_device_platform == "mbed") {
  _chip_device_layer = "mbed"
} else if (chip_device_platform == "psoc6") {
  _chip_device_layer = "Infineon/PSOC6"
} else if (chip_device_platform == "android") {
  _chip_device_layer = "android"
} else if (chip_device_platform == "ameba") {
  _chip_device_layer = "Ameba"
} else if (chip_device_platform == "bl602") {
  _chip_device_layer = "bouffalolab/common"
} else if (chip_device_platform == "bl702") {
  _chip_device_layer = "bouffalolab/common"
} else if (chip_device_platform == "bl702l") {
  _chip_device_layer = "bouffalolab/common"
} else if (chip_device_platform == "cyw30739") {
  _chip_device_layer = "Infineon/CYW30739"
} else if (chip_device_platform == "webos") {
  _chip_device_layer = "webos"
} else if (chip_device_platform == "mw320") {
  _chip_device_layer = "nxp/mw320"
} else if (chip_device_platform == "zephyr") {
  _chip_device_layer = "Zephyr"
} else if (chip_device_platform == "beken") {
  _chip_device_layer = "Beken"
} else if (chip_device_platform == "mt793x") {
  _chip_device_layer = "mt793x"
} else if (chip_device_platform == "openiotsdk") {
  _chip_device_layer = "openiotsdk"
} else if (chip_device_platform == "asr") {
  _chip_device_layer = "ASR"
} else if (chip_device_platform == "stm32") {
  _chip_device_layer = "stm32"
}

if (chip_device_platform != "external") {
  chip_ble_platform_config_include = ""
  chip_device_platform_config_include = ""
  chip_platform_config_include = ""
  chip_inet_platform_config_include = ""
  chip_system_platform_config_include = ""
  chip_system_layer_impl_config_file = ""
} else {
  declare_args() {
    chip_ble_platform_config_include = ""
    chip_device_platform_config_include = ""
    chip_platform_config_include = ""
    chip_inet_platform_config_include = ""
    chip_system_platform_config_include = ""
    chip_system_layer_impl_config_file = ""
    chip_external_platform_include_dir = ""
  }
}

declare_args() {
  # If true, disables KVS implementation for the platform.  May not be
  # supported on all platforms.
  chip_disable_platform_kvs = false

  # If true, builds the tv-casting-common static lib
  build_tv_casting_common_a = false
}

assert(!chip_disable_platform_kvs || chip_device_platform == "darwin",
       "Can only disable KVS on some platforms")

if (_chip_device_layer != "none" && chip_device_platform != "external") {
  chip_ble_platform_config_include =
      "<platform/" + _chip_device_layer + "/BlePlatformConfig.h>"
  chip_device_platform_config_include =
      "<platform/" + _chip_device_layer + "/CHIPDevicePlatformConfig.h>"
  chip_platform_config_include =
      "<platform/" + _chip_device_layer + "/CHIPPlatformConfig.h>"
  chip_inet_platform_config_include =
      "<platform/" + _chip_device_layer + "/InetPlatformConfig.h>"
  chip_system_platform_config_include =
      "<platform/" + _chip_device_layer + "/SystemPlatformConfig.h>"
}

declare_args() {
  # Enable jlink/segger_rtt support.
  chip_enable_segger_rtt = chip_device_platform != "qpg"
}

assert(
    (current_os != "freertos" && chip_device_platform == "none") ||
        chip_device_platform == "fake" ||
        chip_device_platform == "cc13x4_26x4" ||
        chip_device_platform == "cc32xx" || chip_device_platform == "darwin" ||
        chip_device_platform == "efr32" || chip_device_platform == "esp32" ||
        chip_device_platform == "external" || chip_device_platform == "linux" ||
        chip_device_platform == "tizen" ||
        chip_device_platform == "nrfconnect" || chip_device_platform == "nxp" ||
        chip_device_platform == "nxp_zephyr" || chip_device_platform == "qpg" ||
        chip_device_platform == "telink" || chip_device_platform == "mbed" ||
        chip_device_platform == "psoc6" || chip_device_platform == "android" ||
        chip_device_platform == "ameba" || chip_device_platform == "cyw30739" ||
        chip_device_platform == "webos" || chip_device_platform == "mw320" ||
        chip_device_platform == "zephyr" || chip_device_platform == "beken" ||
        chip_device_platform == "bl602" || chip_device_platform == "bl702" ||
        chip_device_platform == "bl702l" || chip_device_platform == "mt793x" ||
        chip_device_platform == "SiWx917" ||
        chip_device_platform == "openiotsdk" || chip_device_platform == "asr" ||
        chip_device_platform == "stm32",
    "Please select a valid value for chip_device_platform")
