# Copyright 2018 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

if (is_debug) {
  default_optimize = "debug"
} else {
  # TODO(phosek): consider using "size" in release mode to reduce size.
  default_optimize = "speed"
}

# NOTE: Keep in sync with //build/config/zircon/levels.gni
# TODO: Unify the default value between the two files.
declare_args() {
  # * `none`: really unoptimized, usually only build-tested and not run
  # * `debug`: "optimized for debugging", light enough to avoid confusion
  # * `default`: default optimization level
  # * `size`:  optimized for space rather than purely for speed
  # * `speed`: optimized purely for speed
  # * `sanitizer`: optimized for sanitizers (ASan, etc.)
  # * `profile`: optimized for coverage/profile data collection
  optimize = default_optimize
}

_optimize_valid = [
  "none",
  "debug",
  "default",
  "size",
  "speed",
  "sanitizer",
  "profile",
]

assert(_optimize_valid + [ optimize ] - [ optimize ] != _optimize_valid,
       "`optimize=\"...\"` must be one of $_optimize_valid")

declare_args() {
  # Controls whether to use the ML inliner in Clang to reduce size. Note that
  # the option only takes effect when `optimize` is set to `"size"`.
  clang_ml_inliner = false
}

if (clang_ml_inliner) {
  assert(optimize == "size", "clang_ml_inliner requires `optimize = \"size\"`")
}

# NOTE: Keep in sync with //build/config/zircon/levels.gni
declare_args() {
  # * `none` means no debugging information
  # * `backtrace` means sufficient debugging information to symbolize backtraces
  # * `debug` means debugging information suited for debugging
  debuginfo = "debug"
}

_debuginfo_valid = [
  "none",
  "backtrace",
  "debug",
]

assert(_debuginfo_valid + [ debuginfo ] - [ debuginfo ] != _debuginfo_valid,
       "`debuginfo=\"...\"` must be one of $_debuginfo_valid")
