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

# TODO(crbug.com/40191347): 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")
