# Copyright (c) 2015 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/webrtc.gni")
if (is_android) {
  import("//build/config/android/config.gni")
  import("//build/config/android/rules.gni")
}

group("api") {
  public_deps = [
    ":libjingle_peerconnection",
  ]
}

rtc_source_set("call_api") {
  sources = [
    "call/audio_receive_stream.h",
    "call/audio_send_stream.h",
    "call/audio_sink.h",
    "call/audio_state.h",
  ]

  deps = [
    # TODO(kjellander): Add remaining dependencies when webrtc:4243 is done.
    "..:webrtc_common",
    "../base:rtc_base_approved",
    "../modules/audio_coding:audio_encoder_interface",
  ]
}

config("libjingle_peerconnection_warnings_config") {
  # GN orders flags on a target before flags from configs. The default config
  # adds these flags so to cancel them out they need to come from a config and
  # cannot be on the target directly.
  if (!is_win && !is_clang) {
    cflags = [ "-Wno-maybe-uninitialized" ]  # Only exists for GCC.
  }
}

rtc_static_library("libjingle_peerconnection") {
  cflags = []
  sources = [
    "audiotrack.cc",
    "audiotrack.h",
    "datachannel.cc",
    "datachannel.h",
    "datachannelinterface.h",
    "dtmfsender.cc",
    "dtmfsender.h",
    "dtmfsenderinterface.h",
    "jsep.h",
    "jsepicecandidate.cc",
    "jsepicecandidate.h",
    "jsepsessiondescription.cc",
    "jsepsessiondescription.h",
    "localaudiosource.cc",
    "localaudiosource.h",
    "mediaconstraintsinterface.cc",
    "mediaconstraintsinterface.h",
    "mediacontroller.cc",
    "mediacontroller.h",
    "mediastream.cc",
    "mediastream.h",
    "mediastreaminterface.h",
    "mediastreamobserver.cc",
    "mediastreamobserver.h",
    "mediastreamproxy.h",
    "mediastreamtrack.h",
    "mediastreamtrackproxy.h",
    "notifier.h",
    "peerconnection.cc",
    "peerconnection.h",
    "peerconnectionfactory.cc",
    "peerconnectionfactory.h",
    "peerconnectionfactoryproxy.h",
    "peerconnectioninterface.h",
    "peerconnectionproxy.h",
    "proxy.h",
    "remoteaudiosource.cc",
    "remoteaudiosource.h",
    "rtcstatscollector.cc",
    "rtcstatscollector.h",
    "rtpparameters.h",
    "rtpreceiver.cc",
    "rtpreceiver.h",
    "rtpreceiverinterface.h",
    "rtpsender.cc",
    "rtpsender.h",
    "rtpsenderinterface.h",
    "sctputils.cc",
    "sctputils.h",
    "statscollector.cc",
    "statscollector.h",
    "statstypes.cc",
    "statstypes.h",
    "streamcollection.h",
    "videocapturertracksource.cc",
    "videocapturertracksource.h",
    "videosourceproxy.h",
    "videotrack.cc",
    "videotrack.h",
    "videotracksource.cc",
    "videotracksource.h",
    "webrtcsdp.cc",
    "webrtcsdp.h",
    "webrtcsession.cc",
    "webrtcsession.h",
    "webrtcsessiondescriptionfactory.cc",
    "webrtcsessiondescriptionfactory.h",
  ]

  configs += [ ":libjingle_peerconnection_warnings_config" ]

  if (is_clang) {
    # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
    suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
  }

  deps = [
    ":call_api",
    ":rtc_stats_api",
    "../call",
    "../media",
    "../pc",
    "../stats",
  ]

  if (rtc_use_quic) {
    sources += [
      "quicdatachannel.cc",
      "quicdatachannel.h",
      "quicdatatransport.cc",
      "quicdatatransport.h",
    ]
    deps += [ "//third_party/libquic" ]
    public_deps = [
      "//third_party/libquic",
    ]
  }
}

# Exclude the targets below from the Chromium build since they cannot be built
# due to incompability with Chromium's logging implementation.
if (is_android && !build_with_chromium) {
  config("libjingle_peerconnection_jni_warnings_config") {
    # The warnings below are enabled by default. Since GN orders compiler flags
    # for a target before flags from configs, the only way to disable such
    # warnings is by having them in a separate config, loaded from the target.
    if (!is_win) {
      cflags = [
        "-Wno-sign-compare",
        "-Wno-unused-variable",
      ]
    }
  }

  rtc_static_library("libjingle_peerconnection_jni") {
    sources = [
      "android/jni/androidmediacodeccommon.h",
      "android/jni/androidmediadecoder_jni.cc",
      "android/jni/androidmediadecoder_jni.h",
      "android/jni/androidmediaencoder_jni.cc",
      "android/jni/androidmediaencoder_jni.h",
      "android/jni/androidmetrics_jni.cc",
      "android/jni/androidnetworkmonitor_jni.cc",
      "android/jni/androidnetworkmonitor_jni.h",
      "android/jni/androidvideotracksource_jni.cc",
      "android/jni/classreferenceholder.cc",
      "android/jni/classreferenceholder.h",
      "android/jni/jni_helpers.cc",
      "android/jni/jni_helpers.h",
      "android/jni/native_handle_impl.cc",
      "android/jni/native_handle_impl.h",
      "android/jni/peerconnection_jni.cc",
      "android/jni/surfacetexturehelper_jni.cc",
      "android/jni/surfacetexturehelper_jni.h",
      "androidvideotracksource.cc",
      "androidvideotracksource.h",
    ]

    configs += [ ":libjingle_peerconnection_jni_warnings_config" ]

    if (is_clang) {
      # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
      suppressed_configs += [
        "//build/config/clang:extra_warnings",
        "//build/config/clang:find_bad_constructs",
      ]
    }

    # TODO(jschuh): Bug 1348: fix this warning.
    configs += [ "//build/config/compiler:no_size_t_to_int_warning" ]

    if (is_win) {
      cflags += [
        "/wd4245",  # conversion from "int" to "size_t", signed/unsigned mismatch.
        "/wd4389",  # signed/unsigned mismatch.
      ]
    }

    deps = [
      ":libjingle_peerconnection",
      "../system_wrappers:field_trial_default",
      "../system_wrappers:metrics_default",
    ]

    if (rtc_build_libyuv) {
      deps += [ "$rtc_libyuv_dir" ]
      public_deps = [
        "$rtc_libyuv_dir",
      ]
    } else {
      # Need to add a directory normally exported by libyuv.
      include_dirs = [ "$rtc_libyuv_dir/include" ]
    }
  }

  rtc_shared_library("libjingle_peerconnection_so") {
    sources = [
      "android/jni/jni_onload.cc",
    ]

    suppressed_configs += [ "//build/config/android:hide_native_jni_exports" ]

    deps = [
      ":libjingle_peerconnection",
      ":libjingle_peerconnection_jni",
    ]
    output_extension = "so"
  }

  android_library("libjingle_peerconnection_java") {
    java_files = [
      "../modules/audio_device/android/java/src/org/webrtc/voiceengine/BuildInfo.java",
      "../modules/audio_device/android/java/src/org/webrtc/voiceengine/WebRtcAudioEffects.java",
      "../modules/audio_device/android/java/src/org/webrtc/voiceengine/WebRtcAudioManager.java",
      "../modules/audio_device/android/java/src/org/webrtc/voiceengine/WebRtcAudioRecord.java",
      "../modules/audio_device/android/java/src/org/webrtc/voiceengine/WebRtcAudioTrack.java",
      "../modules/audio_device/android/java/src/org/webrtc/voiceengine/WebRtcAudioUtils.java",
      "android/java/src/org/webrtc/AudioSource.java",
      "android/java/src/org/webrtc/AudioTrack.java",
      "android/java/src/org/webrtc/CallSessionFileRotatingLogSink.java",
      "android/java/src/org/webrtc/Camera1Capturer.java",
      "android/java/src/org/webrtc/Camera1Enumerator.java",
      "android/java/src/org/webrtc/Camera1Session.java",
      "android/java/src/org/webrtc/Camera2Capturer.java",
      "android/java/src/org/webrtc/Camera2Enumerator.java",
      "android/java/src/org/webrtc/Camera2Session.java",
      "android/java/src/org/webrtc/CameraCapturer.java",
      "android/java/src/org/webrtc/CameraEnumerationAndroid.java",
      "android/java/src/org/webrtc/CameraEnumerator.java",
      "android/java/src/org/webrtc/CameraSession.java",
      "android/java/src/org/webrtc/CameraVideoCapturer.java",
      "android/java/src/org/webrtc/DataChannel.java",
      "android/java/src/org/webrtc/EglBase.java",
      "android/java/src/org/webrtc/EglBase10.java",
      "android/java/src/org/webrtc/EglBase14.java",
      "android/java/src/org/webrtc/GlRectDrawer.java",
      "android/java/src/org/webrtc/GlShader.java",
      "android/java/src/org/webrtc/GlTextureFrameBuffer.java",
      "android/java/src/org/webrtc/GlUtil.java",
      "android/java/src/org/webrtc/IceCandidate.java",
      "android/java/src/org/webrtc/MediaCodecVideoDecoder.java",
      "android/java/src/org/webrtc/MediaCodecVideoEncoder.java",
      "android/java/src/org/webrtc/MediaConstraints.java",
      "android/java/src/org/webrtc/MediaSource.java",
      "android/java/src/org/webrtc/MediaStream.java",
      "android/java/src/org/webrtc/MediaStreamTrack.java",
      "android/java/src/org/webrtc/Metrics.java",
      "android/java/src/org/webrtc/NetworkMonitor.java",
      "android/java/src/org/webrtc/NetworkMonitorAutoDetect.java",
      "android/java/src/org/webrtc/PeerConnection.java",
      "android/java/src/org/webrtc/PeerConnectionFactory.java",
      "android/java/src/org/webrtc/RendererCommon.java",
      "android/java/src/org/webrtc/RtpParameters.java",
      "android/java/src/org/webrtc/RtpReceiver.java",
      "android/java/src/org/webrtc/RtpSender.java",
      "android/java/src/org/webrtc/SdpObserver.java",
      "android/java/src/org/webrtc/SessionDescription.java",
      "android/java/src/org/webrtc/StatsObserver.java",
      "android/java/src/org/webrtc/StatsReport.java",
      "android/java/src/org/webrtc/SurfaceTextureHelper.java",
      "android/java/src/org/webrtc/SurfaceViewRenderer.java",
      "android/java/src/org/webrtc/VideoCapturer.java",
      "android/java/src/org/webrtc/VideoCapturerAndroid.java",
      "android/java/src/org/webrtc/VideoRenderer.java",
      "android/java/src/org/webrtc/VideoRendererGui.java",
      "android/java/src/org/webrtc/VideoSource.java",
      "android/java/src/org/webrtc/VideoTrack.java",
    ]

    deps = [
      "//webrtc/base:base_java",
    ]
  }
}

# GYP version: webrtc/api/api.gyp:rtc_stats_api
rtc_source_set("rtc_stats_api") {
  cflags = []
  sources = [
    "stats/rtcstats.h",
    "stats/rtcstats_objects.h",
    "stats/rtcstatsreport.h",
  ]

  deps = [
    "../base:rtc_base_approved",
  ]
}

if (rtc_include_tests) {
  config("peerconnection_unittests_config") {
    # The warnings below are enabled by default. Since GN orders compiler flags
    # for a target before flags from configs, the only way to disable such
    # warnings is by having them in a separate config, loaded from the target.
    # TODO(kjellander): Make the code compile without disabling these flags.
    # See https://bugs.webrtc.org/3307.
    if (is_clang && is_win) {
      cflags = [
        # See https://bugs.chromium.org/p/webrtc/issues/detail?id=6267
        # for -Wno-sign-compare
        "-Wno-sign-compare",
        "-Wno-unused-function",
      ]
    }

    if (!is_win) {
      cflags = [ "-Wno-sign-compare" ]
      cflags_cc = [ "-Wno-overloaded-virtual" ]
    }
  }

  rtc_test("peerconnection_unittests") {
    testonly = true
    sources = [
      "datachannel_unittest.cc",
      "dtmfsender_unittest.cc",
      "fakemetricsobserver.cc",
      "fakemetricsobserver.h",
      "jsepsessiondescription_unittest.cc",
      "localaudiosource_unittest.cc",
      "mediaconstraintsinterface_unittest.cc",
      "mediastream_unittest.cc",
      "peerconnection_unittest.cc",
      "peerconnectionendtoend_unittest.cc",
      "peerconnectionfactory_unittest.cc",
      "peerconnectioninterface_unittest.cc",
      "proxy_unittest.cc",
      "rtcstatscollector_unittest.cc",
      "rtpsenderreceiver_unittest.cc",
      "statscollector_unittest.cc",
      "test/fakeaudiocapturemodule.cc",
      "test/fakeaudiocapturemodule.h",
      "test/fakeaudiocapturemodule_unittest.cc",
      "test/fakeconstraints.h",
      "test/fakedatachannelprovider.h",
      "test/fakeperiodicvideocapturer.h",
      "test/fakertccertificategenerator.h",
      "test/fakevideotrackrenderer.h",
      "test/mock_datachannel.h",
      "test/mock_peerconnection.h",
      "test/mock_webrtcsession.h",
      "test/mockpeerconnectionobservers.h",
      "test/peerconnectiontestwrapper.cc",
      "test/peerconnectiontestwrapper.h",
      "test/testsdpstrings.h",
      "videocapturertracksource_unittest.cc",
      "videotrack_unittest.cc",
      "webrtcsdp_unittest.cc",
      "webrtcsession_unittest.cc",
    ]

    defines = [ "HAVE_SCTP" ]

    configs += [ ":peerconnection_unittests_config" ]

    if (is_clang) {
      # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
      suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
    }

    # TODO(jschuh): Bug 1348: fix this warning.
    configs += [ "//build/config/compiler:no_size_t_to_int_warning" ]

    if (is_win) {
      cflags = [
        "/wd4245",  # conversion from int to size_t, signed/unsigned mismatch.
        "/wd4389",  # signed/unsigned mismatch.
      ]
    }

    if (rtc_use_quic) {
      public_deps = [
        "//third_party/libquic",
      ]
      sources += [
        "quicdatachannel_unittest.cc",
        "quicdatatransport_unittest.cc",
      ]
    }

    deps = []
    if (is_android) {
      sources += [
        "test/androidtestinitializer.cc",
        "test/androidtestinitializer.h",
      ]
      deps += [
        ":libjingle_peerconnection_java",
        ":libjingle_peerconnection_jni",
        "//testing/android/native_test:native_test_support",
      ]
    }

    deps += [
      ":libjingle_peerconnection",
      "..:webrtc_common",
      "../base:rtc_base_tests_utils",
      "../media:rtc_unittest_main",
      "../pc:rtc_pc",
      "../system_wrappers:metrics_default",
      "//testing/gmock",
    ]

    if (is_android) {
      deps += [ "//testing/android/native_test:native_test_support" ]

      shard_timeout = 900
    }
  }

  if (is_android) {
    instrumentation_test_apk("libjingle_peerconnection_android_unittest") {
      apk_name = "libjingle_peerconnection_android_unittest"
      android_manifest = "androidtests/AndroidManifest.xml"

      java_files = [
        "androidtests/src/org/webrtc/Camera1CapturerUsingByteBufferTest.java",
        "androidtests/src/org/webrtc/Camera1CapturerUsingTextureTest.java",
        "androidtests/src/org/webrtc/Camera2CapturerTest.java",
        "androidtests/src/org/webrtc/CameraVideoCapturerTestFixtures.java",
        "androidtests/src/org/webrtc/GlRectDrawerTest.java",
        "androidtests/src/org/webrtc/MediaCodecVideoEncoderTest.java",
        "androidtests/src/org/webrtc/NetworkMonitorTest.java",
        "androidtests/src/org/webrtc/PeerConnectionTest.java",
        "androidtests/src/org/webrtc/RendererCommonTest.java",
        "androidtests/src/org/webrtc/SurfaceTextureHelperTest.java",
        "androidtests/src/org/webrtc/SurfaceViewRendererOnMeasureTest.java",
      ]

      deps = [
        ":libjingle_peerconnection_android_unittest_resources",
        ":libjingle_peerconnection_java",
        "//base:base_java",
        "//webrtc/base:base_java",
      ]

      shared_libraries = [ ":libjingle_peerconnection_so" ]
    }

    android_resources("libjingle_peerconnection_android_unittest_resources") {
      resource_dirs = [ "androidtests/res" ]
      custom_package = "org.webrtc"
    }
  }
}
