| # Copyright (c) 2016 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("../webrtc.gni") | 
 | if (is_android) { | 
 |   import("//build/config/android/config.gni") | 
 |   import("//build/config/android/rules.gni") | 
 | } | 
 |  | 
 | group("pc") { | 
 |   public_deps = [ | 
 |     ":rtc_pc", | 
 |   ] | 
 | } | 
 |  | 
 | config("rtc_pc_config") { | 
 |   defines = [] | 
 |   if (rtc_enable_sctp) { | 
 |     defines += [ "HAVE_SCTP" ] | 
 |   } | 
 | } | 
 |  | 
 | rtc_static_library("rtc_pc_base") { | 
 |   defines = [] | 
 |   sources = [ | 
 |     "audiomonitor.cc", | 
 |     "audiomonitor.h", | 
 |     "bundlefilter.cc", | 
 |     "bundlefilter.h", | 
 |     "channel.cc", | 
 |     "channel.h", | 
 |     "channelmanager.cc", | 
 |     "channelmanager.h", | 
 |     "currentspeakermonitor.cc", | 
 |     "currentspeakermonitor.h", | 
 |     "externalhmac.cc", | 
 |     "externalhmac.h", | 
 |     "mediamonitor.cc", | 
 |     "mediamonitor.h", | 
 |     "mediasession.cc", | 
 |     "mediasession.h", | 
 |     "rtcpmuxfilter.cc", | 
 |     "rtcpmuxfilter.h", | 
 |     "rtptransport.cc", | 
 |     "rtptransport.h", | 
 |     "srtpfilter.cc", | 
 |     "srtpfilter.h", | 
 |     "voicechannel.h", | 
 |   ] | 
 |  | 
 |   deps = [ | 
 |     "..:webrtc_common", | 
 |     "../api:call_api", | 
 |     "../api:libjingle_peerconnection_api", | 
 |     "../api:ortc_api", | 
 |     "../base:rtc_base", | 
 |     "../base:rtc_task_queue", | 
 |     "../media:rtc_data", | 
 |     "../media:rtc_h264_profile_id", | 
 |     "../media:rtc_media_base", | 
 |     "../p2p:rtc_p2p", | 
 |   ] | 
 |  | 
 |   if (rtc_build_libsrtp) { | 
 |     deps += [ "//third_party/libsrtp" ] | 
 |   } | 
 |  | 
 |   public_configs = [ ":rtc_pc_config" ] | 
 |  | 
 |   if (!build_with_chromium && is_clang) { | 
 |     # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163). | 
 |     suppressed_configs += [ "//build/config/clang:find_bad_constructs" ] | 
 |   } | 
 | } | 
 |  | 
 | rtc_source_set("rtc_pc") { | 
 |   public_deps = [ | 
 |     ":rtc_pc_base", | 
 |   ] | 
 |  | 
 |   deps = [ | 
 |     "../media:rtc_audio_video", | 
 |   ] | 
 | } | 
 |  | 
 | 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("peerconnection") { | 
 |   cflags = [] | 
 |   sources = [ | 
 |     "audiotrack.cc", | 
 |     "audiotrack.h", | 
 |     "datachannel.cc", | 
 |     "datachannel.h", | 
 |     "dtmfsender.cc", | 
 |     "dtmfsender.h", | 
 |     "iceserverparsing.cc", | 
 |     "iceserverparsing.h", | 
 |     "jsepicecandidate.cc", | 
 |     "jsepsessiondescription.cc", | 
 |     "localaudiosource.cc", | 
 |     "localaudiosource.h", | 
 |     "mediastream.cc", | 
 |     "mediastream.h", | 
 |     "mediastreamobserver.cc", | 
 |     "mediastreamobserver.h", | 
 |     "mediastreamtrack.h", | 
 |     "peerconnection.cc", | 
 |     "peerconnection.h", | 
 |     "peerconnectionfactory.cc", | 
 |     "peerconnectionfactory.h", | 
 |     "remoteaudiosource.cc", | 
 |     "remoteaudiosource.h", | 
 |     "rtcstatscollector.cc", | 
 |     "rtcstatscollector.h", | 
 |     "rtpreceiver.cc", | 
 |     "rtpreceiver.h", | 
 |     "rtpsender.cc", | 
 |     "rtpsender.h", | 
 |     "sctputils.cc", | 
 |     "sctputils.h", | 
 |     "statscollector.cc", | 
 |     "statscollector.h", | 
 |     "streamcollection.h", | 
 |     "trackmediainfomap.cc", | 
 |     "trackmediainfomap.h", | 
 |     "videocapturertracksource.cc", | 
 |     "videocapturertracksource.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 (!build_with_chromium && is_clang) { | 
 |     # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163). | 
 |     suppressed_configs += [ "//build/config/clang:find_bad_constructs" ] | 
 |   } | 
 |  | 
 |   deps = [ | 
 |     ":rtc_pc_base", | 
 |     "..:webrtc_common", | 
 |     "../api:call_api", | 
 |     "../api:rtc_stats_api", | 
 |     "../api/video_codecs:video_codecs_api", | 
 |     "../base:rtc_base", | 
 |     "../base:rtc_base_approved", | 
 |     "../call:call_interfaces", | 
 |     "../logging:rtc_event_log_api", | 
 |     "../media:rtc_data", | 
 |     "../media:rtc_media_base", | 
 |     "../p2p:rtc_p2p", | 
 |     "../stats", | 
 |     "../system_wrappers:system_wrappers", | 
 |   ] | 
 |  | 
 |   public_deps = [ | 
 |     "../api:libjingle_peerconnection_api", | 
 |   ] | 
 | } | 
 |  | 
 | # This target implements CreatePeerConnectionFactory methods that will create a | 
 | # PeerConnection will full functionality (audio, video and data). Applications | 
 | # that wish to reduce their binary size by ommitting functionality they don't | 
 | # need should use CreateModularCreatePeerConnectionFactory instead, using the | 
 | # "peerconnection" build target and other targets specific to their | 
 | # requrements. See comment in peerconnectionfactoryinterface.h. | 
 | rtc_source_set("create_pc_factory") { | 
 |   sources = [ | 
 |     "createpeerconnectionfactory.cc", | 
 |   ] | 
 |  | 
 |   deps = [ | 
 |     "../api:audio_mixer_api", | 
 |     "../api:libjingle_peerconnection_api", | 
 |     "../api/audio_codecs:audio_codecs_api", | 
 |     "../api/audio_codecs:builtin_audio_decoder_factory", | 
 |     "../api/audio_codecs:builtin_audio_encoder_factory", | 
 |     "../base:rtc_base", | 
 |     "../base:rtc_base_approved", | 
 |     "../call", | 
 |     "../call:call_interfaces", | 
 |     "../logging:rtc_event_log_api", | 
 |     "../media:rtc_audio_video", | 
 |     "../modules/audio_device:audio_device", | 
 |   ] | 
 |  | 
 |   configs += [ ":libjingle_peerconnection_warnings_config" ] | 
 |  | 
 |   if (!build_with_chromium && is_clang) { | 
 |     # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163). | 
 |     suppressed_configs += [ "//build/config/clang:find_bad_constructs" ] | 
 |   } | 
 | } | 
 |  | 
 | rtc_source_set("libjingle_peerconnection") { | 
 |   public_deps = [ | 
 |     ":create_pc_factory", | 
 |     ":peerconnection", | 
 |     "../api:libjingle_peerconnection_api", | 
 |   ] | 
 |  | 
 |   if (rtc_use_quic) { | 
 |     sources += [ | 
 |       "quicdatachannel.cc", | 
 |       "quicdatachannel.h", | 
 |       "quicdatatransport.cc", | 
 |       "quicdatatransport.h", | 
 |     ] | 
 |     deps += [ "//third_party/libquic" ] | 
 |     public_deps = [ | 
 |       "//third_party/libquic", | 
 |     ] | 
 |   } | 
 | } | 
 |  | 
 | if (rtc_include_tests) { | 
 |   config("rtc_pc_unittests_config") { | 
 |     # GN orders flags on a target before flags from configs. The default config | 
 |     # adds -Wall, and this flag have to be after -Wall -- so they need to | 
 |     # come from a config and can't be on the target directly. | 
 |     if (!is_win && !is_clang) { | 
 |       cflags = [ "-Wno-maybe-uninitialized" ]  # Only exists for GCC. | 
 |     } | 
 |   } | 
 |  | 
 |   rtc_test("rtc_pc_unittests") { | 
 |     testonly = true | 
 |  | 
 |     sources = [ | 
 |       "bundlefilter_unittest.cc", | 
 |       "channel_unittest.cc", | 
 |       "channelmanager_unittest.cc", | 
 |       "currentspeakermonitor_unittest.cc", | 
 |       "mediasession_unittest.cc", | 
 |       "rtcpmuxfilter_unittest.cc", | 
 |       "rtptransport_unittest.cc", | 
 |       "srtpfilter_unittest.cc", | 
 |     ] | 
 |  | 
 |     include_dirs = [ "//third_party/libsrtp/srtp" ] | 
 |  | 
 |     configs += [ ":rtc_pc_unittests_config" ] | 
 |  | 
 |     if (!build_with_chromium && is_clang) { | 
 |       # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163). | 
 |       suppressed_configs += [ "//build/config/clang:find_bad_constructs" ] | 
 |     } | 
 |  | 
 |     if (is_win) { | 
 |       libs = [ "strmiids.lib" ] | 
 |     } | 
 |  | 
 |     deps = [ | 
 |       ":libjingle_peerconnection", | 
 |       ":rtc_pc", | 
 |       "../base:rtc_base", | 
 |       "../base:rtc_base_approved", | 
 |       "../base:rtc_base_tests_main", | 
 |       "../base:rtc_base_tests_utils", | 
 |       "../logging:rtc_event_log_api", | 
 |       "../media:rtc_media_base", | 
 |       "../media:rtc_media_tests_utils", | 
 |       "../p2p:p2p_test_utils", | 
 |       "../p2p:rtc_p2p", | 
 |       "../system_wrappers:metrics_default", | 
 |     ] | 
 |  | 
 |     if (rtc_build_libsrtp) { | 
 |       deps += [ "//third_party/libsrtp" ] | 
 |     } | 
 |  | 
 |     if (is_android) { | 
 |       deps += [ "//testing/android/native_test:native_test_support" ] | 
 |     } | 
 |   } | 
 |  | 
 |   rtc_source_set("pc_test_utils") { | 
 |     testonly = true | 
 |     sources = [ | 
 |       "test/fakeaudiocapturemodule.cc", | 
 |       "test/fakeaudiocapturemodule.h", | 
 |       "test/fakedatachannelprovider.h", | 
 |       "test/fakeperiodicvideocapturer.h", | 
 |       "test/fakertccertificategenerator.h", | 
 |       "test/fakevideotrackrenderer.h", | 
 |       "test/fakevideotracksource.h", | 
 |       "test/mock_datachannel.h", | 
 |       "test/mock_peerconnection.h", | 
 |       "test/mock_webrtcsession.h", | 
 |       "test/mockpeerconnectionobservers.h", | 
 |       "test/peerconnectiontestwrapper.cc", | 
 |       "test/peerconnectiontestwrapper.h", | 
 |       "test/rtcstatsobtainer.h", | 
 |       "test/testsdpstrings.h", | 
 |     ] | 
 |  | 
 |     deps = [ | 
 |       ":libjingle_peerconnection", | 
 |       "..:webrtc_common", | 
 |       "../api:libjingle_peerconnection_test_api", | 
 |       "../api:rtc_stats_api", | 
 |       "../base:rtc_base", | 
 |       "../base:rtc_base_approved", | 
 |       "../base:rtc_base_tests_utils", | 
 |       "../call:call_interfaces", | 
 |       "../logging:rtc_event_log_api", | 
 |       "../media:rtc_media", | 
 |       "../media:rtc_media_tests_utils", | 
 |       "../modules/audio_device:audio_device", | 
 |       "../p2p:p2p_test_utils", | 
 |       "../test:test_support", | 
 |       "//testing/gmock", | 
 |     ] | 
 |  | 
 |     if (!build_with_chromium && is_clang) { | 
 |       # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163). | 
 |       suppressed_configs += [ "//build/config/clang:find_bad_constructs" ] | 
 |     } | 
 |   } | 
 |  | 
 |   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" ] | 
 |     } | 
 |   } | 
 |  | 
 |   rtc_test("peerconnection_unittests") { | 
 |     check_includes = false  # TODO(kjellander): Remove (bugs.webrtc.org/6828) | 
 |     testonly = true | 
 |     sources = [ | 
 |       "datachannel_unittest.cc", | 
 |       "dtmfsender_unittest.cc", | 
 |       "iceserverparsing_unittest.cc", | 
 |       "jsepsessiondescription_unittest.cc", | 
 |       "localaudiosource_unittest.cc", | 
 |       "mediaconstraintsinterface_unittest.cc", | 
 |       "mediastream_unittest.cc", | 
 |       "peerconnection_integrationtest.cc", | 
 |       "peerconnectionendtoend_unittest.cc", | 
 |       "peerconnectionfactory_unittest.cc", | 
 |       "peerconnectioninterface_unittest.cc", | 
 |       "proxy_unittest.cc", | 
 |       "rtcstats_integrationtest.cc", | 
 |       "rtcstatscollector_unittest.cc", | 
 |       "rtpsenderreceiver_unittest.cc", | 
 |       "sctputils_unittest.cc", | 
 |       "statscollector_unittest.cc", | 
 |       "test/fakeaudiocapturemodule_unittest.cc", | 
 |       "test/testsdpstrings.h", | 
 |       "trackmediainfomap_unittest.cc", | 
 |       "videocapturertracksource_unittest.cc", | 
 |       "videotrack_unittest.cc", | 
 |       "webrtcsdp_unittest.cc", | 
 |       "webrtcsession_unittest.cc", | 
 |     ] | 
 |  | 
 |     if (rtc_enable_sctp) { | 
 |       defines = [ "HAVE_SCTP" ] | 
 |     } | 
 |  | 
 |     configs += [ ":peerconnection_unittests_config" ] | 
 |  | 
 |     if (!build_with_chromium && 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 += [ | 
 |         "//testing/android/native_test:native_test_support", | 
 |         "//webrtc/sdk/android:libjingle_peerconnection_java", | 
 |         "//webrtc/sdk/android:libjingle_peerconnection_jni", | 
 |       ] | 
 |     } | 
 |  | 
 |     deps += [ | 
 |       ":libjingle_peerconnection", | 
 |       ":pc_test_utils", | 
 |       "..:webrtc_common", | 
 |       "../api:fakemetricsobserver", | 
 |       "../base:rtc_base_tests_main", | 
 |       "../base:rtc_base_tests_utils", | 
 |       "../media:rtc_media_tests_utils", | 
 |       "../pc:rtc_pc", | 
 |       "../system_wrappers:metrics_default", | 
 |       "../test:audio_codec_mocks", | 
 |       "//testing/gmock", | 
 |     ] | 
 |  | 
 |     if (is_android) { | 
 |       deps += [ "//testing/android/native_test:native_test_support" ] | 
 |  | 
 |       shard_timeout = 900 | 
 |     } | 
 |   } | 
 | } |