# 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")
import("//build/config/mips.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 = ""

  # 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_expat = true
  rtc_build_icu = true
  rtc_build_json = true
  rtc_build_libjpeg = true
  rtc_build_libvpx = true
  rtc_build_libyuv = true
  rtc_build_openmax_dl = true
  rtc_build_opus = true
  rtc_build_ssl = true
  rtc_build_vp9 = true

  # Disable by default.
  rtc_have_dbus_glib = false

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

  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 (current_cpu == "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 && (current_cpu != "arm" || arm_version >= 7)) {
    rtc_use_openmax_dl = true
  } else {
    rtc_use_openmax_dl = false
  }

  # Determines whether NEON code will be built.
  rtc_build_with_neon =
      (current_cpu == "arm" && (arm_use_neon || arm_optionally_use_neon)) ||
      current_cpu == "arm64"

  # Enable this to use HW H.264 encoder/decoder on iOS PeerConnections.
  # Enabling this may break interop with Android clients that support H264.
  rtc_use_objc_h264 = false
}

# Make it possible to provide custom locations for some libraries (move these
# up into declare_args should we need to actually use them for the GN build).
rtc_libvpx_dir = "//third_party/libvpx"
rtc_libyuv_dir = "//third_party/libyuv"
rtc_opus_dir = "//third_party/opus"
