# 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_cxx17 = !is_android

# 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/msan/suppressions.txt", root_build_dir)
ubsan_ignorelist_path =
    rebase_path("//tools_webrtc/ubsan/suppressions.txt", root_build_dir)
ubsan_vptr_ignorelist_path =
    rebase_path("//tools_webrtc/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

# 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() {
  # WebRTC doesn't depend on //base from production code but only for testing
  # purposes. In any case, it doesn't depend on //third_party/perfetto which
  # is used for base tracing, so this feature is disabled.
  enable_base_tracing = false

  # TODO(b/336718643): Remove use_perfetto_client_library_flag.
  use_perfetto_client_library = false
  use_perfetto_trace_processor = false

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