# 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: cc13x2_26x2, 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 == "cc13x2_26x2" ||
      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 == "cc13x2_26x2" ||
             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"
}

_chip_device_layer = "none"
if (chip_device_platform == "cc13x2_26x2") {
  _chip_device_layer = "cc13xx_26xx/cc13x2_26x2"
} else 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 == "cc13x2_26x2" ||
        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")
