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