# 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) {
  # TODO(phosek): consider using "debug" in debug mode to improve performance.
  default_optimize = "none"
} else {
  # TODO(phosek): consider using "size" in release mode to reduce size.
  default_optimize = "speed"
}

declare_args() {
  # How many symbols to include in the build. This affects the performance of
  # the build since the symbols are large and dealing with them is slow.
  #   2 means regular build with symbols.
  #   1 means minimal symbols, usually enough for backtraces only. Symbols with
  # internal linkage (static functions or those in anonymous namespaces) may not
  # appear when using this level.
  #   0 means no symbols.
  symbol_level = 2
}

# NOTE: Keep in sync with //zircon/public/gn/config/levels.gni
# TODO: Unify the default value between the two builds.
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")
