# Copyright (c) 2016 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.

# Some non-Chromium builds don't support building java targets.
enable_java_templates = true

# Enables assertions on safety checks in libc++.
enable_safe_libcxx = true

# Don't set this variable to true when building standalone WebRTC, it is
# only needed to support both WebRTC standalone and Chromium builds.
build_with_chromium = false

# Use our own suppressions files.
asan_suppressions_file = "//build/sanitizers/asan_suppressions.cc"
lsan_suppressions_file = "//tools_webrtc/sanitizers/lsan_suppressions_webrtc.cc"
tsan_suppressions_file = "//tools_webrtc/sanitizers/tsan_suppressions_webrtc.cc"
msan_ignorelist_path =
    rebase_path("//tools_webrtc/sanitizers/msan_suppressions.txt",
                root_build_dir)
ubsan_ignorelist_path =
    rebase_path("//tools_webrtc/sanitizers/ubsan_suppressions.txt",
                root_build_dir)
ubsan_vptr_ignorelist_path =
    rebase_path("//tools_webrtc/sanitizers/ubsan_vptr_suppressions.txt",
                root_build_dir)

# For Chromium, Android 32-bit non-component, non-clang builds hit a 4GiB size
# limit, making them requiring symbol_level=2. WebRTC doesn't hit that problem
# so we just ignore that assert. See https://crbug.com/648948 for more info.
ignore_elf32_limitations = true

perfetto_build_with_embedder = true
enable_perfetto_trace_processor = true

# Enables creating tflite and xnnpack targets without a dependency on //base.
# TODO(crbug/445631332): The override is a temporary fix due to the
# `build_with_internal_optimization` variable not being visible in the WebRTC
# build context. A proper solution is to set a default in the .gn file.
build_with_internal_optimization_guide = true

# Use bundled hermetic Xcode installation maintainted by Chromium,
# except for local iOS builds where it's unsupported.
# Allow for mac cross compile on linux machines.
if (host_os == "mac" || host_os == "linux") {
  _result = exec_script("//build/mac/should_use_hermetic_xcode.py",
                        [ target_os ],
                        "value")
  assert(_result != 2,
         "Do not allow building targets with the default " +
             "hermetic toolchain if the minimum OS version is not met.")
  use_system_xcode = _result == 0
}

declare_args() {
  # Limits the defined //third_party/android_deps targets to only "buildCompile"
  # and "buildCompileNoDeps" targets. This is useful for third-party
  # repositories which do not use JUnit tests. For instance,
  # limit_android_deps == true removes "gn gen" requirement for
  # //third_party/robolectric .
  limit_android_deps = false

  # If true, it assumes that //third_party/abseil-cpp is an available
  # dependency for googletest.
  gtest_enable_absl_printers = true
}

vpython_spec_files = [
  "//vpython.toml",
  "//vpython.toml.uv.lock",
]
