# Copyright 2016 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

if (!use_cobalt_customizations) {
# TODO(crbug.com/1233050): Until the bug is resolved we need to include
# gclient_args for the definition of build_with_chromium and build_overrides
# for client overrides of that flag. The latter should go away.
import("//build/config/gclient_args.gni")
}
import("//build_overrides/build.gni")
declare_args() {
  # Enables DCHECKs to be built-in, but to default to being non-fatal/log-only.
  # DCHECKS can then be set as fatal/non-fatal via the "DcheckIsFatal" feature.
  # See https://bit.ly/dcheck-albatross for details on how this is used.
  dcheck_is_configurable = false
}

declare_args() {
  # Set to false to disable DCHECK in Release builds. This is enabled by default
  # for non-official builds on the below platforms.
  # This default only affects Chromium as indicated by build_with_chromium.
  # Other clients typically set this to false. If another client wants to use
  # the same default value as Chromium, we'd need to add a separate gclient
  # variable to replace build_with_chromium here.
  dcheck_always_on =
      (build_with_chromium && !is_official_build) || dcheck_is_configurable
}

declare_args() {
  # Set to false to disable EXPENSIVE_DCHECK()s or to true to enable them in
  # official builds. These are generally used for really useful DCHECKs that are
  # too expensive to be enabled in user-facing official+DCHECK builds.
  enable_expensive_dchecks =
      is_debug || (dcheck_always_on && !is_official_build)
}

assert(!dcheck_is_configurable || (dcheck_always_on || is_debug),
       "dcheck_is_configurable only makes sense with DCHECKs enabled")
assert(!enable_expensive_dchecks || (dcheck_always_on || is_debug),
       "enable_expensive_dchecks only makes sense with DCHECKs enabled")
