# Copyright (c) 2020-2026 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.

assert(current_toolchain != "",
       "Build settings cannot be evaluated without a toolchain." +
           " Do not import this file from default_args / args.gni.")

import("//build_overrides/chip.gni")
import("${chip_root}/src/ble/ble.gni")
import("${chip_root}/src/system/system.gni")

declare_args() {
  # Device platform layer: cc13x4_26x4, cc32xx, darwin, efr32, esp32, external, freertos, linux, nrfconnect, nxp, qpg, tizen, cyw30739, bl602, zephyr, beken, 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 if (current_os == "nuttx") {
    chip_device_platform = "nuttx"
  } else {
    chip_device_platform = "none"
  }
}

declare_args() {
  # DEPRECATED: Use 'chip_enable_thread' instead.
  chip_enable_openthread = "DEPRECATED"

  # Enable openthread support.
  chip_enable_thread =
      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" || chip_device_platform == "realtek_bee"
}

declare_args() {
  chip_openthread_ftd = chip_enable_thread

  # 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_system_config_use_openthread_inet_endpoints) ||
      chip_device_platform == "esp32" || 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 == "beken" ||
      chip_device_platform == "mt793x" || chip_device_platform == "asr" ||
      (chip_device_platform == "darwin" && current_os == "mac")

  # Enable ethernet support
  chip_enable_ethernet = false

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

  # Enable NFC-based Onboarding Payload support
  chip_enable_nfc_onboarding_payload = false

  # Enable NFC-based Commissioning
  chip_enable_nfc_based_commissioning = false

  # Enable OTA requestor support
  chip_enable_ota_requestor = false

  # Select DNS-SD implementation
  if ((chip_device_platform == "linux" &&
       !chip_system_config_use_openthread_inet_endpoints) ||
      chip_device_platform == "esp32" || chip_device_platform == "psoc6" ||
      chip_device_platform == "ameba" || chip_device_platform == "webos" ||
      chip_device_platform == "cc32xx" || chip_device_platform == "beken" ||
      chip_device_platform == "mt793x" || chip_device_platform == "asr" ||
      chip_device_platform == "nuttx") {
    chip_mdns = "minimal"
  } else if (chip_device_platform == "darwin" ||
             chip_device_platform == "cc13x4_26x4" || current_os == "android" ||
             chip_device_platform == "fake" ||
             chip_device_platform == "realtek_bee" ||
             (chip_device_platform == "linux" &&
              chip_system_config_use_openthread_inet_endpoints) ||
             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_device_platform == "nuttx" ||
      chip_device_platform == "qpg") {
    chip_persist_subscriptions = true
  } else {
    chip_persist_subscriptions = false
  }
}

declare_args() {
  # Enable Joint Fabric features
  chip_device_config_enable_joint_fabric = false

  # Include wifi-paf to commission the device or not
  # This is a feature of Wi-Fi spec that it can be enabled if wifi is enabled
  # and the supplicant can support.
  chip_device_config_enable_wifipaf =
      chip_enable_wifi && chip_device_platform == "linux"

  chip_device_config_enable_thread_meshcop =
      chip_device_platform == "linux" &&
      chip_system_config_use_openthread_inet_endpoints

  # The interval in milliseconds between two Thread discovery attempts in Thread Rendezvous.
  chip_device_config_thread_discovery_interval_ms = 0
}

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_thread) {
  chip_mdns = "platform"
} else if (chip_device_platform == "nxp" &&
           (chip_enable_wifi || chip_enable_ethernet)) {
  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 = "ti/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 == "realtek_bee") {
  _chip_device_layer = "realtek/freertos"
} else if (chip_device_platform == "realtek_zephyr") {
  _chip_device_layer = "realtek/zephyr"
} 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 == "telink") {
  _chip_device_layer = "telink"
} 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 == "bflb") {
  _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 == "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 == "asr") {
  _chip_device_layer = "ASR"
} else if (chip_device_platform == "nuttx") {
  _chip_device_layer = "NuttX"
} else if (chip_device_platform == "stm32") {
  _chip_device_layer = "stm32"
}

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")

declare_args() {
  # Overridable for custom platforms ("external" or "none") as well as
  # individually overridable
  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>"

    if (chip_enable_nfc_based_commissioning) {
      chip_nfc_platform_config_include =
          "<platform/" + _chip_device_layer + "/NfcConfig.h>"
    }
  } else {
    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_nfc_platform_config_include = ""
  }

  # always overridable, default to nothing
  chip_system_layer_impl_config_file = ""
  chip_external_platform_include_dir = ""
}

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 == "realtek_bee" ||
        chip_device_platform == "realtek_zephyr" ||
        chip_device_platform == "nrfconnect" || chip_device_platform == "nxp" ||
        chip_device_platform == "qpg" || chip_device_platform == "telink" ||
        chip_device_platform == "psoc6" || chip_device_platform == "android" ||
        chip_device_platform == "ameba" || chip_device_platform == "cyw30739" ||
        chip_device_platform == "webos" || chip_device_platform == "zephyr" ||
        chip_device_platform == "beken" || chip_device_platform == "bl602" ||
        chip_device_platform == "bflb" || chip_device_platform == "bl702" ||
        chip_device_platform == "bl702l" || chip_device_platform == "mt793x" ||
        chip_device_platform == "SiWx917" || chip_device_platform == "asr" ||
        chip_device_platform == "stm32" || chip_device_platform == "nuttx",
    "Please select a valid value for chip_device_platform")
