# This file is used by the GN meta build system to find the root of the source
# tree and to set startup options. For documentation on the values set in this
# file, run "gn help dotfile" at the command line.

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

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

# These arguments override the default values for items in a declare_args
# block. "gn args" in turn can override these.
#
# In general the value for a build arg in the declare_args block should be the
# default. In some cases, a DEPS-ed in project will want different defaults for
# being built as part of Chrome vs. being built standalone. In this case, the
# Chrome defaults should go here. There should be no overrides here for
# values declared in the main Chrome repository.
#
# Important note for defining defaults: This file is executed before the
# BUILDCONFIG.gn file. That file sets up the global variables like "is_ios".
# This means that the default_args can not depend on the platform,
# architecture, or other build parameters. If you really need that, the other
# repo should define a flag that toggles on a behavior that implements the
# additional logic required by Chrome to set the variables.
default_args = {
  # TODO(brettw) bug 684096: Chrome on iOS does not build v8, so "gn gen" prints
  # a warning that "Build argument has no effect". When adding a v8 variable, it
  # also needs to be defined to src/ios/BUILD.gn (respectively removed from both
  # location when it is removed).

  v8_extra_library_files = []
  v8_experimental_extra_library_files = []
  v8_enable_gdbjit = false
  v8_imminent_deprecation_warnings = false

  # TODO(jochen): Remove this. http://crbug.com/v8/5830,
  # http://crbug.com/728583.
  v8_check_microtasks_scopes_consistency = false

  # Don't include webrtc's builtin task queue implementation.
  rtc_link_task_queue_impl = false

  # Don't include the iLBC audio codec.
  # TODO(bugs.webrtc.org/8396): Once WebRTC gets rid of its internal
  # deps on codecs, we can remove this.
  rtc_include_ilbc = false

  # Changes some setup for the Crashpad build to set them to build against
  # Chromium's zlib, base, etc.
  crashpad_dependencies = "chromium"

  # Override ANGLE's Vulkan dependencies.
  angle_vulkan_headers_dir = "//third_party/vulkan-deps/vulkan-headers/src"
  angle_vulkan_loader_dir = "//third_party/vulkan-deps/vulkan-loader/src"
  angle_vulkan_tools_dir = "//third_party/vulkan-deps/vulkan-tools/src"
  angle_vulkan_validation_layers_dir =
      "//third_party/vulkan-deps/vulkan-validation-layers/src"
}

# 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 = [
  # //chrome/*, https://crbug.com/949535
  "//chrome/browser/devtools:*",  # 114 errors
  "//chrome/browser/media/router/discovery:*",  # 26 errors
  "//chrome/browser/media/router:*",  # 225 errors
  "//chrome/browser/paint_preview:*",  # 4 errors
  "//chrome/browser/profiling_host:*",  # 13 errors
  "//chrome/browser/resources/chromeos/zip_archiver/cpp:*",  # 2 errors
  "//chrome/browser/safe_browsing/android:*",  # 3 errors
  "//chrome/browser/safe_browsing:*",  # 85 errors
  "//chrome/browser/safety_check/android:*",  # 3 errors
  "//chrome/browser/storage_access_api:*",  # 2 errors
  "//chrome/browser/touch_to_fill/android:*",  # 8 errors
  "//chrome/notification_helper:*",  # 4 errors
  "//chrome/services/removable_storage_writer:*",  # 1 error
  "//chrome/services/util_win:*",  # 1 error
  "//chrome/test:*",  # 2682 errors

  "//clank/third_party/gvr_shim:*",  # 1 error
  "//extensions/browser/api/alarms:*",  # 2 errors
  "//extensions/browser/api/app_current_window_internal:*",  # 3 errors
  "//extensions/browser/api/app_runtime:*",  # 3 errors
  "//extensions/browser/api/app_window:*",  # 5 errors
  "//extensions/browser/api/audio:*",  # 3 errors
  "//extensions/browser/api/automation_internal:*",  # 37 errors
  "//extensions/browser/api/bluetooth_low_energy:*",  # 22 errors
  "//extensions/browser/api/bluetooth_socket:*",  # 12 errors
  "//extensions/browser/api/cast_channel:*",  # 3 errors
  "//extensions/browser/api/declarative:*",  # 20 errors
  "//extensions/browser/api/declarative_content:*",  # 2 errors
  "//extensions/browser/api/declarative_net_request:*",  # 18 errors
  "//extensions/browser/api/declarative_webrequest:*",  # 29 errors
  "//extensions/browser/api/display_source:*",  # 7 errors
  "//extensions/browser/api/dns:*",  # 3 errors
  "//extensions/browser/api/document_scan:*",  # 2 errors
  "//extensions/browser/api/feedback_private:*",  # 2 errors
  "//extensions/browser/api/file_handlers:*",  # 3 errors
  "//extensions/browser/api/file_system:*",  # 1 error
  "//extensions/browser/api/hid:*",  # 12 errors
  "//extensions/browser/api/idle:*",  # 4 errors
  "//extensions/browser/api/management:*",  # 19 errors
  "//extensions/browser/api/messaging:*",  # 1 error
  "//extensions/browser/api/metrics_private:*",  # 3 errors
  "//extensions/browser/api/mime_handler_private:*",  # 1 error
  "//extensions/browser/api/networking_private:*",  # 14 errors
  "//extensions/browser/api/power:*",  # 3 errors
  "//extensions/browser/api/printer_provider:*",  # 7 errors
  "//extensions/browser/api/printer_provider_internal:*",  # 3 errors
  "//extensions/browser/api/runtime:*",  # 6 errors
  "//extensions/browser/api/serial:*",  # 10 errors
  "//extensions/browser/api/socket:*",  # 11 errors
  "//extensions/browser/api/sockets_tcp:*",  # 6 errors
  "//extensions/browser/api/sockets_tcp_server:*",  # 8 errors
  "//extensions/browser/api/sockets_udp:*",  # 9 errors
  "//extensions/browser/api/system_cpu:*",  # 1 error
  "//extensions/browser/api/system_display:*",  # 3 errors
  "//extensions/browser/api/system_info:*",  # 8 errors
  "//extensions/browser/api/system_memory:*",  # 1 error
  "//extensions/browser/api/system_network:*",  # 2 errors
  "//extensions/browser/api/system_storage:*",  # 6 errors
  "//extensions/browser/api/test:*",  # 1 error
  "//extensions/browser/api/usb:*",  # 12 errors
  "//extensions/browser/api/virtual_keyboard_private:*",  # 2 errors
  "//extensions/browser/api/web_request:*",  # 37 errors
  "//extensions/browser/api:*",  # 7 errors
  "//extensions/browser/updater:*",  # 31 errors
  "//extensions/browser:*",  # 20 errors
  "//extensions:*",  # 75 errors
  "//headless:*",  # 167 errors
  "//jingle:*",  # 4 errors
  "//native_client/src/trusted/service_runtime:*",  # 2 errors
  "//ppapi/cpp/private:*",  # 1 error
  "//ppapi/host:*",  # 1 error
  "//ppapi/native_client/src/untrusted/pnacl_irt_shim:*",  # 197 errors
  "//ppapi/proxy:*",  # 31 errors
  "//ppapi/shared_impl:*",  # 3 errors
  "//ppapi/thunk:*",  # 1071 errors
  "//ppapi:*",  # 3 errors
  "//remoting/base/grpc_support:*",  # 14 errors
  "//remoting/base/grpc_test_support:*",  # 1 error
  "//remoting/base:*",  # 6 errors
  "//remoting/client/display:*",  # 55 errors
  "//remoting/client/jni:*",  # 8 errors
  "//remoting/codec:*",  # 32 errors
  "//remoting/host/chromeos:*",  # 10 errors
  "//remoting/host/file_transfer:*",  # 43 errors
  "//remoting/host/input_monitor:*",  # 3 errors
  "//remoting/host/installer/mac:*",  # 1 error
  "//remoting/host/it2me:*",  # 18 errors
  "//remoting/host/mac:*",  # 49 errors
  "//remoting/host/native_messaging:*",  # 3 errors
  "//remoting/host/security_key:*",  # 68 errors
  "//remoting/host/setup:*",  # 9 errors
  "//remoting/host/win:*",  # 43 errors
  "//remoting/host:*",  # 164 errors
  "//remoting/ios/app/settings:*",  # 6 errors
  "//remoting/ios/app:*",  # 9 errors
  "//remoting/ios/audio:*",  # 5 errors
  "//remoting/ios/domain:*",  # 2 errors
  "//remoting/ios/facade:*",  # 8 errors
  "//remoting/ios/persistence:*",  # 10 errors
  "//remoting/ios/session:*",  # 7 errors
  "//remoting/ios:*",  # 2 errors
  "//remoting/protocol:*",  # 142 errors
  "//remoting/signaling:*",  # 30 errors
  "//remoting/test:*",  # 20 errors
  "//remoting:*",  # 27 errors
  "//sandbox/linux:*",  # 13 errors
  "//sandbox/win:*",  # 7 errors

  "//third_party/breakpad:*",  # 34 errors
  "//third_party/ced/*",
  "//third_party/crashpad/crashpad/client:*",  # 1 error
  "//third_party/crashpad/crashpad/compat:*",  # 2 errors
  "//third_party/crashpad/crashpad/snapshot:*",  # 1 error
  "//third_party/crashpad/crashpad/test:*",  # 2 errors
  "//third_party/crashpad/crashpad/util:*",  # 2 errors
  "//third_party/dav1d:*",  # 95 errors
  "//third_party/ffmpeg:*",  # 1 error
  "//third_party/icu/*",
  "//third_party/libvpx:*",  # 164 errors
  "//third_party/libwebp:*",  # 80 errors, https://crbug.com/800762
  "//third_party/openscreen/src/cast/common:*",  # 4 errors
  "//third_party/openscreen/src/cast/receiver:*",  # 1 error
  "//third_party/openscreen/src/cast/streaming:*",  # 66 errors
  "//third_party/openscreen/src/discovery:*",  # 36 errors
  "//third_party/openscreen/src/osp/impl/quic:*",  # 16 errors
  "//third_party/openscreen/src/osp/msgs:*",  # 5 errors
  "//third_party/openscreen/src/osp/public:*",  # 1 error
  "//third_party/openscreen/src/osp:*",  # 13 errors
  "//third_party/openscreen/src/util:*",  # 29 errors
  "//third_party/pdfium/samples:*",  # 1 error
  "//third_party/pdfium/third_party:*",  # 2 errors
  "//third_party/pdfium:*",  # 1 error

  # //v8/*, https://crbug.com/v8/7330
  "//v8/src/inspector:*",  # 20 errors
  "//v8/test/cctest:*",  # 26 errors
  "//v8/test/unittests:*",  # 11 errors
  "//v8/test/wasm-api-tests:*",  # 13 errors
  "//v8/third_party/inspector_protocol:*",  # 2 errors
  "//v8/tools/debug_helper:*",  # 9 errors
  "//v8/tools/v8windbg:*",  # 2 errors
  "//v8:*",  # 1871 errors
]

# 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.
#
# PLEASE READ
#
# You should almost never need to add new exec_script calls. exec_script is
# slow, especially on Windows, and can cause confusing effects. Although
# individually each call isn't slow or necessarily very confusing, at the scale
# of our repo things get out of hand quickly. By strongly pushing back on all
# additions, we keep the build fast and clean. If you think you need to add a
# new call, please consider:
#
# - Do not use a script to check for the existence of a file or directory to
#   enable a different mode. Instead, use GN build args to enable or disable
#   functionality and set options. An example is checking for a file in the
#   src-internal repo to see if the corresponding src-internal feature should
#   be enabled. There are several things that can go wrong with this:
#
#    - It's mysterious what causes some things to happen. Although in many cases
#      such behavior can be conveniently automatic, GN optimizes for explicit
#      and obvious behavior so people can more easily diagnose problems.
#
#    - The user can't enable a mode for one build and not another. With GN build
#      args, the user can choose the exact configuration of multiple builds
#      using one checkout. But implicitly basing flags on the state of the
#      checkout, this functionality is broken.
#
#    - It's easy to get stale files. If for example the user edits the gclient
#      to stop checking out src-internal (or any other optional thing), it's
#      easy to end up with stale files still mysteriously triggering build
#      conditions that are no longer appropriate (yes, this happens in real
#      life).
#
# - Do not use a script to iterate files in a directory (glob):
#
#    - This has the same "stale file" problem as the above discussion. Various
#      operations can leave untracked files in the source tree which can cause
#      surprising effects.
#
#    - It becomes impossible to use "git grep" to find where a certain file is
#      referenced. This operation is very common and people really do get
#      confused when things aren't listed.
#
#    - It's easy to screw up. One common case is a build-time script that packs
#      up a directory. The author notices that the script isn't re-run when the
#      directory is updated, so adds a glob so all the files are listed as
#      inputs. This seems to work great... until a file is deleted. When a
#      file is deleted, all the inputs the glob lists will still be up to date
#      and no command-lines will have been changed. The action will not be
#      re-run and the build will be broken. It is possible to get this correct
#      using glob, and it's possible to mess it up without glob, but globs make
#      this situation much easier to create. if the build always lists the
#      files and passes them to a script, it will always be correct.

exec_script_whitelist =
    build_dotfile_settings.exec_script_whitelist +
    angle_dotfile_settings.exec_script_whitelist +
    [
      # Whitelist entries for //build should go into
      # //build/dotfile_settings.gni instead, so that they can be shared
      # with other repos. The entries in this list should be only for files
      # in the Chromium repo outside of //build.
      "//build_overrides/build.gni",

      "//chrome/android/webapk/shell_apk/prepare_upload_dir/BUILD.gn",

      # TODO(dgn): Layer violation but breaks the build otherwise, see
      # https://crbug.com/474506.
      "//clank/java/BUILD.gn",
      "//clank/native/BUILD.gn",

      "//google_apis/BUILD.gn",
      "//printing/BUILD.gn",

      "//remoting/host/installer/linux/BUILD.gn",
      "//remoting/remoting_version.gni",
      "//remoting/host/installer/win/generate_clsids.gni",

      "//tools/grit/grit_rule.gni",
      "//tools/gritsettings/BUILD.gn",
    ]
