# 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.

declare_args() {
  # Enable logging. Shorthand for chip_error_logging, etc.
  chip_logging = true
}

declare_args() {
  # Configure target tyle: unix, embedded.
  chip_target_style = ""

  # Enable error logging.
  chip_error_logging = chip_logging

  # Enable progress logging.
  chip_progress_logging = chip_logging

  # Enable detail logging.
  chip_detail_logging = chip_logging

  # Enable automation logging.
  chip_automation_logging = chip_logging

  # Configure the maximum size for logged messages
  if (current_os == "linux" || current_os == "mac" || current_os == "ios") {
    # Allow base64 encoding of 1 MTU (4 * (1280 / 3) + padding
    chip_log_message_max_size = 1708
  } else {
    chip_log_message_max_size = 256
  }

  # Enable pigweed tokenizer logging.
  chip_pw_tokenizer_logging = false

  # Configure chip logging to output through pigweed logging.
  chip_use_pw_logging = false

  # Configure chip logging to output through external logging implementation.
  # External code will need to provide implementation for CHIP log output
  # function (LogV), which is defined in "src/platform/logging/LogV.h".
  chip_use_external_logging = false

  # Enable short error strings.
  chip_config_short_error_str = false

  # Enable argument parser.
  chip_config_enable_arg_parser = true

  # Memory management style: malloc, simple, platform.
  chip_config_memory_management = "malloc"

  # Memory management debug option: enable additional checks.
  chip_config_memory_debug_checks = false

  # Memory management debug option: use dmalloc
  chip_config_memory_debug_dmalloc = false

  # When enabled trace messages using tansport trace hook.
  chip_enable_transport_trace = current_os == "linux" || current_os == "mac"

  # When this is enabled trace messages will be sent to pw_trace.
  chip_enable_transport_pw_trace = false

  # Enables using dynamic memory for minmdns tracking of operational
  # responders.
  #
  # When not set, CHIP_CONFIG_MAX_FABRICS is used for static allocation
  # of tracking information for operational advertisement.
  chip_config_minmdns_dynamic_operational_responder_list =
      current_os == "linux" || current_os == "android" || current_os == "mac" ||
      current_os == "ios"

  # When using minmdns, set the number of parallel resolves
  chip_config_minmdns_max_parallel_resolves = 2
}

if (chip_target_style == "") {
  if (current_os != "freertos" && current_os != "zephyr" &&
      current_os != "mbed" && current_os != "cmsis-rtos") {
    chip_target_style = "unix"
  } else {
    chip_target_style = "embedded"
  }
}

assert(chip_target_style == "unix" || chip_target_style == "embedded",
       "Please select a valid target style: unix, embedded")

assert(
    chip_config_memory_management == "malloc" ||
        chip_config_memory_management == "simple" ||
        chip_config_memory_management == "platform",
    "Please select a valid memory management style: malloc, simple, platform")
