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