# 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.
  rtc_include_opus = true

  # Used to specify an external Jsoncpp include path when not compiling the
  # library that comes with WebRTC (i.e. rtc_build_json == 0).
  rtc_jsoncpp_root = "//third_party/jsoncpp/source/include"

  # Used to specify an external OpenSSL include path when not compiling the
  # library that comes with WebRTC (i.e. rtc_build_ssl == 0).
  rtc_ssl_root = ""

  # 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.
  rtc_enable_video = true

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

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

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

  # Disable these to not build components which can be externally provided.
  rtc_build_json = true
  rtc_build_libjpeg = true
  rtc_build_libyuv = true
  rtc_build_libvpx = true
  rtc_build_ssl = true

  # Disable by default.
  rtc_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

  rtc_enable_android_opensl = false

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

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

    # Exclude internal ADM since Chromium uses its own IO handling.
    rtc_include_internal_audio_device = 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

    rtc_include_pulse_audio = true
    rtc_include_internal_audio_device = true
  }

  if (build_with_libjingle) {
    rtc_include_tests = false
    rtc_restrict_logging = true
  } else {
    rtc_include_tests = true
    rtc_restrict_logging = false
  }

  if (is_ios) {
    rtc_build_libjpeg = false
    rtc_enable_protobuf = false
  }

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

  # TODO(ljubomir): Unset rtc_use_openmax_dl for mips64el once mips64el gets
  # supported in GN (since openmax_dl is not supported for mips64el).
  if (!is_ios && (cpu_arch != "arm" || arm_version >= 7)) {
    rtc_use_openmax_dl = true
  } else {
    rtc_use_openmax_dl = false
  }

  # 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).
  rtc_build_armv7_neon = (cpu_arch == "arm" && arm_version >= 7)
}
