# Copyright (c) 2014 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/config/arm.gni")

declare_args() {
  # Assume Chromium build for now, since that's the priority case for getting GN
  # up and running with WebRTC.
  build_with_chromium = true
  build_with_libjingle = true

  # Disable this to avoid building the Opus audio codec.
  include_opus = true

  # Adds video support to dependencies shared by voice and video engine.
  # This should normally be enabled; the intended use is to disable only
  # when building voice engine exclusively.
  enable_video = true

  # Selects fixed-point code where possible.
  prefer_fixed_point = false

  # Enable data logging. Produces text files with data logged within engines
  # which can be easily parsed for offline processing.
  enable_data_logging = false

  # Enables the use of protocol buffers for debug recordings.
  enable_protobuf = true

  # Disable these to not build components which can be externally provided.
  build_json = true
  build_libjpeg = true
  build_libyuv = true
  build_libvpx = true
  build_ssl = true

  # Disable by default.
  have_dbus_glib = false

  # Enable to use the Mozilla internal settings.
  build_with_mozilla = false

  # Define MIPS architecture variant, MIPS DSP variant and MIPS FPU
  # This may be subject to change in accordance to Chromium's MIPS flags
  mips_arch_variant = "mips32r1"
  mips_dsp_rev = 0
  mips_fpu = true

  enable_android_opensl = true

  # Link-Time Optimizations.
  # Executes code generation at link-time instead of compile-time.
  # https://gcc.gnu.org/wiki/LinkTimeOptimization
  use_lto = false

  if (build_with_chromium) {
    # Exclude pulse audio on Chromium since its prerequisites don't require
    # pulse audio.
    include_pulse_audio = false

    # Exclude internal ADM since Chromium uses its own IO handling.
    include_internal_audio_device = false

    # Exclude internal VCM in Chromium build.
    include_internal_video_capture = false

    # Exclude internal video render module in Chromium build.
    include_internal_video_render = false
  } else {
    # Settings for the standalone (not-in-Chromium) build.

    # TODO(andrew): For now, disable the Chrome plugins, which causes a
    # flood of chromium-style warnings. Investigate enabling them:
    # http://code.google.com/p/webrtc/issues/detail?id=163
    clang_use_chrome_plugins = false

    include_pulse_audio = true
    include_internal_audio_device = true
    include_internal_video_capture = true
    include_internal_video_render = true
  }

  if (build_with_libjingle) {
    include_tests = false
    restrict_webrtc_logging = true
  } else {
    include_tests = true
    restrict_webrtc_logging = false
  }

  if (is_ios) {
    build_libjpeg = false
    enable_protobuf = false
  }

  if (cpu_arch == "arm") {
    prefer_fixed_point = true
  }

  # WebRTC builds ARM v7 Neon instruction set optimized code for both iOS and
  # Android, which is why we currently cannot use the variables in
  # //build/config/arm.gni (since it disables Neon for Android).
  build_armv7_neon = (cpu_arch == "arm" && arm_version == 7)
}
