# Copyright (c) 2015 The WebRTC project authors. All Rights Reserved.
#
# Use of this source code is governed by a BSD-style license
# that can be found in the LICENSE file in the root of the source
# tree. An additional intellectual property rights grant can be found
# in the file PATENTS.  All contributing project authors may
# be found in the AUTHORS file in the root of the source tree.

import("//build/dotfile_settings.gni")

# The location of the build configuration file.
buildconfig = "//build/config/BUILDCONFIG.gn"

# The python interpreter to use by default. On Windows, this will look
# for vpython3.exe and vpython3.bat.
script_executable = "vpython3"

# The secondary source root is a parallel directory tree where
# GN build files are placed when they can not be placed directly
# in the source tree, e.g. for third party source trees.
secondary_source = "//build/secondary/"

# These are the targets to skip header checking by default. The files in targets
# matching these patterns (see "gn help label_pattern" for format) will not have
# their includes checked for proper dependencies when you run either
# "gn check" or "gn gen --check".
no_check_targets = [
  "//third_party/icu/*",

  # TODO: crbug/326607005 - GTEST_HAS_ABSL is broken
  "//third_party/googletest:gmock",
  "//third_party/googletest:gtest",
]

# These are the list of GN files that run exec_script. This whitelist exists
# to force additional review for new uses of exec_script, which is strongly
# discouraged except for gypi_to_gn calls.
exec_script_whitelist = build_dotfile_settings.exec_script_whitelist +
                        [ "//build_overrides/build.gni" ]

export_compile_commands = [ "*" ]

default_args = {
  # Webrtc does not support component builds because we are not using the
  # template "component" but we rely directly on "rtc_static_library" and
  # "rtc_shared_library". This means that we cannot use the chromium default
  # value for this argument.
  # This also means that the user can override this value using --args or
  # the args.gn file but this setting will be ignored because we don't support
  # component builds.
  is_component_build = false

  mac_sdk_min = "10.12"

  ios_deployment_target = "14.0"

  # The SDK API level, in contrast, is set by build/android/AndroidManifest.xml.
  android32_ndk_api_level = 21
  android64_ndk_api_level = 21

  # WebRTC does not provide the gflags dependency. Because libyuv uses it only
  # for unittests, it can be disabled (see third_party/libyuv/BUILD.gn)
  libyuv_use_gflags = false

  enable_libaom = true

  gtest_enable_absl_printers = true

  # Differently from Chromium, WebRTC still support SDK 21.
  default_min_sdk_version = 21

  # Prevent jsoncpp to pass -Wno-deprecated-declarations to users
  jsoncpp_no_deprecated_declarations = false

  # Fixes the abi-revision issue.
  # TODO(https://bugs.webrtc.org/14437):  Remove this section if general
  # Chromium fix resolves the problem.
  fuchsia_sdk_readelf_exec =
      "//third_party/llvm-build/Release+Asserts/bin/llvm-readelf"

  # WebRTC doesn't use jni_zero's multiplexing. Since this causes an error
  # let's temporarily disable it.
  enable_jni_multiplexing = false
}
