# 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", ] if (is_android && !build_with_chromium) { public_deps += [ ":libjingle_peerconnection_java", ":libjingle_peerconnection_so", ] } } rtc_source_set("call_api") { sources = [ "call/audio_receive_stream.h", "call/audio_send_stream.cc", "call/audio_send_stream.h", "call/audio_sink.h", "call/audio_state.h", "call/flexfec_receive_stream.h", ] deps = [ # TODO(kjellander): Add remaining dependencies when webrtc:4243 is done. ":audio_mixer_api", "..: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 (!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 = [ ":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 (!build_with_chromium && 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" } } # Classes that don't require jni can be used in Chromium. if (is_android) { 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/EglRenderer.java", "android/java/src/org/webrtc/FileVideoCapturer.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/ScreenCapturerAndroid.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/VideoFileRenderer.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", "android/java/src/org/webrtc/YuvConverter.java", ] deps = [ "../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", ] } # GYP version: webrtc/api/api.gyp:audio_mixer_api rtc_source_set("audio_mixer_api") { sources = [ "audio/audio_mixer.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" ] } } 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", "sctputils_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 (!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 += [ ":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/EglRendererTest.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", "//base:base_java", ] shared_libraries = [ ":libjingle_peerconnection_so" ] } android_resources("libjingle_peerconnection_android_unittest_resources") { resource_dirs = [ "androidtests/res" ] custom_package = "org.webrtc" } } }