blob: 5c4d87c677ee08fb48ffce2415f5f77160f8943c [file] [log] [blame]
kjellanderc76dc952016-06-03 03:09:32 -07001# Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
2#
3# Use of this source code is governed by a BSD-style license
4# that can be found in the LICENSE file in the root of the source
5# tree. An additional intellectual property rights grant can be found
6# in the file PATENTS. All contributing project authors may
7# be found in the AUTHORS file in the root of the source tree.
8
9import("../build/webrtc.gni")
ossu7bb87ee2017-01-23 04:56:25 -080010if (is_android) {
11 import("//build/config/android/config.gni")
12 import("//build/config/android/rules.gni")
13}
kjellanderc76dc952016-06-03 03:09:32 -070014
15group("pc") {
kjellander705ecc52016-09-15 00:53:26 -070016 public_deps = [
kjellanderc76dc952016-06-03 03:09:32 -070017 ":rtc_pc",
18 ]
19}
20
21config("rtc_pc_config") {
deadbeef40610e22016-12-22 10:53:38 -080022 defines = [ "HAVE_SRTP" ]
23 if (rtc_enable_sctp) {
24 defines += [ "HAVE_SCTP" ]
25 }
kjellanderc76dc952016-06-03 03:09:32 -070026}
27
kjellanderb62dbbe2016-09-23 00:38:52 -070028rtc_static_library("rtc_pc") {
kjellanderc76dc952016-06-03 03:09:32 -070029 defines = []
30 sources = [
31 "audiomonitor.cc",
32 "audiomonitor.h",
33 "bundlefilter.cc",
34 "bundlefilter.h",
35 "channel.cc",
36 "channel.h",
37 "channelmanager.cc",
38 "channelmanager.h",
39 "currentspeakermonitor.cc",
40 "currentspeakermonitor.h",
41 "mediamonitor.cc",
42 "mediamonitor.h",
43 "mediasession.cc",
44 "mediasession.h",
kjellanderc76dc952016-06-03 03:09:32 -070045 "rtcpmuxfilter.cc",
46 "rtcpmuxfilter.h",
47 "srtpfilter.cc",
48 "srtpfilter.h",
49 "voicechannel.h",
50 ]
51
52 deps = [
kjellandera69d9732016-08-31 07:33:05 -070053 "../api:call_api",
kjellanderc76dc952016-06-03 03:09:32 -070054 "../base:rtc_base",
55 "../media",
56 ]
57
58 if (build_with_chromium) {
59 sources += [
60 "externalhmac.cc",
61 "externalhmac.h",
62 ]
63 }
64 if (rtc_build_libsrtp) {
65 deps += [ "//third_party/libsrtp" ]
66 }
67
ehmaldonadoe9cc6862016-09-05 06:10:18 -070068 public_configs = [ ":rtc_pc_config" ]
kjellanderc76dc952016-06-03 03:09:32 -070069
kjellandere40a7ee2016-10-16 23:56:12 -070070 if (!build_with_chromium && is_clang) {
kjellander142f8c52016-06-13 00:08:24 -070071 # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
ehmaldonado38a21322016-09-02 04:10:34 -070072 suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
kjellanderc76dc952016-06-03 03:09:32 -070073 }
74}
kjellander142f8c52016-06-13 00:08:24 -070075
ossu7bb87ee2017-01-23 04:56:25 -080076config("libjingle_peerconnection_warnings_config") {
77 # GN orders flags on a target before flags from configs. The default config
78 # adds these flags so to cancel them out they need to come from a config and
79 # cannot be on the target directly.
80 if (!is_win && !is_clang) {
81 cflags = [ "-Wno-maybe-uninitialized" ] # Only exists for GCC.
82 }
83}
84
85rtc_static_library("libjingle_peerconnection") {
86 check_includes = false # TODO(kjellander): Remove (bugs.webrtc.org/6828)
87 cflags = []
88 sources = [
89 "audiotrack.cc",
90 "audiotrack.h",
91 "datachannel.cc",
92 "datachannel.h",
93 "dtmfsender.cc",
94 "dtmfsender.h",
95 "jsepicecandidate.cc",
96 "jsepsessiondescription.cc",
97 "localaudiosource.cc",
98 "localaudiosource.h",
99 "mediacontroller.cc",
100 "mediacontroller.h",
101 "mediastream.cc",
102 "mediastream.h",
103 "mediastreamobserver.cc",
104 "mediastreamobserver.h",
105 "mediastreamtrack.h",
106 "ortcfactory.cc",
107 "ortcfactory.h",
108 "peerconnection.cc",
109 "peerconnection.h",
110 "peerconnectionfactory.cc",
111 "peerconnectionfactory.h",
112 "remoteaudiosource.cc",
113 "remoteaudiosource.h",
114 "rtcstatscollector.cc",
115 "rtcstatscollector.h",
116 "rtpreceiver.cc",
117 "rtpreceiver.h",
118 "rtpsender.cc",
119 "rtpsender.h",
120 "sctputils.cc",
121 "sctputils.h",
122 "statscollector.cc",
123 "statscollector.h",
124 "streamcollection.h",
125 "videocapturertracksource.cc",
126 "videocapturertracksource.h",
127 "videotrack.cc",
128 "videotrack.h",
129 "videotracksource.cc",
130 "videotracksource.h",
131 "webrtcsdp.cc",
132 "webrtcsdp.h",
133 "webrtcsession.cc",
134 "webrtcsession.h",
135 "webrtcsessiondescriptionfactory.cc",
136 "webrtcsessiondescriptionfactory.h",
137 ]
138
139 configs += [ ":libjingle_peerconnection_warnings_config" ]
140
141 if (!build_with_chromium && is_clang) {
142 # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
143 suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
144 }
145
146 deps = [
147 ":rtc_pc",
148 "../api:call_api",
149 "../api:libjingle_peerconnection_api",
150 "../api:rtc_stats_api",
151 "../call",
152 "../media",
153 "../stats",
154 ]
155
156 if (rtc_use_quic) {
157 sources += [
158 "quicdatachannel.cc",
159 "quicdatachannel.h",
160 "quicdatatransport.cc",
161 "quicdatatransport.h",
162 ]
163 deps += [ "//third_party/libquic" ]
164 public_deps = [
165 "//third_party/libquic",
166 ]
167 }
168}
169
kjellander142f8c52016-06-13 00:08:24 -0700170if (rtc_include_tests) {
171 config("rtc_pc_unittests_config") {
172 # GN orders flags on a target before flags from configs. The default config
173 # adds -Wall, and this flag have to be after -Wall -- so they need to
174 # come from a config and can't be on the target directly.
175 if (!is_win && !is_clang) {
176 cflags = [ "-Wno-maybe-uninitialized" ] # Only exists for GCC.
177 }
178 }
179
ehmaldonado38a21322016-09-02 04:10:34 -0700180 rtc_test("rtc_pc_unittests") {
kjellander142f8c52016-06-13 00:08:24 -0700181 testonly = true
182
183 sources = [
184 "bundlefilter_unittest.cc",
185 "channel_unittest.cc",
186 "channelmanager_unittest.cc",
187 "currentspeakermonitor_unittest.cc",
188 "mediasession_unittest.cc",
189 "rtcpmuxfilter_unittest.cc",
190 "srtpfilter_unittest.cc",
191 ]
192
193 include_dirs = [ "//third_party/libsrtp/srtp" ]
194
ehmaldonado7a2ce0b2016-09-05 01:35:44 -0700195 configs += [ ":rtc_pc_unittests_config" ]
kjellander142f8c52016-06-13 00:08:24 -0700196
kjellandere40a7ee2016-10-16 23:56:12 -0700197 if (!build_with_chromium && is_clang) {
kjellander142f8c52016-06-13 00:08:24 -0700198 # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
ehmaldonado38a21322016-09-02 04:10:34 -0700199 suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
kjellander142f8c52016-06-13 00:08:24 -0700200 }
201
202 if (is_win) {
203 libs = [ "strmiids.lib" ]
204 }
205
206 deps = [
ossu7bb87ee2017-01-23 04:56:25 -0800207 ":libjingle_peerconnection",
kjellander142f8c52016-06-13 00:08:24 -0700208 ":rtc_pc",
kjellander142f8c52016-06-13 00:08:24 -0700209 "../base:rtc_base_tests_utils",
210 "../media:rtc_unittest_main",
211 "../system_wrappers:metrics_default",
212 ]
213
214 if (rtc_build_libsrtp) {
215 deps += [ "//third_party/libsrtp" ]
216 }
217
218 if (is_android) {
219 deps += [ "//testing/android/native_test:native_test_support" ]
220 }
221 }
ossu7bb87ee2017-01-23 04:56:25 -0800222
223 config("peerconnection_unittests_config") {
224 # The warnings below are enabled by default. Since GN orders compiler flags
225 # for a target before flags from configs, the only way to disable such
226 # warnings is by having them in a separate config, loaded from the target.
227 # TODO(kjellander): Make the code compile without disabling these flags.
228 # See https://bugs.webrtc.org/3307.
229 if (is_clang && is_win) {
230 cflags = [
231 # See https://bugs.chromium.org/p/webrtc/issues/detail?id=6267
232 # for -Wno-sign-compare
233 "-Wno-sign-compare",
234 "-Wno-unused-function",
235 ]
236 }
237
238 if (!is_win) {
239 cflags = [ "-Wno-sign-compare" ]
240 }
241 }
242
243 rtc_test("peerconnection_unittests") {
244 check_includes = false # TODO(kjellander): Remove (bugs.webrtc.org/6828)
245 testonly = true
246 sources = [
247 "datachannel_unittest.cc",
248 "dtmfsender_unittest.cc",
249 "fakemediacontroller.h",
250 "jsepsessiondescription_unittest.cc",
251 "localaudiosource_unittest.cc",
252 "mediaconstraintsinterface_unittest.cc",
253 "mediastream_unittest.cc",
254 "ortcfactory_unittest.cc",
255 "peerconnection_unittest.cc",
256 "peerconnectionendtoend_unittest.cc",
257 "peerconnectionfactory_unittest.cc",
258 "peerconnectioninterface_unittest.cc",
259 "proxy_unittest.cc",
260 "rtcstats_integrationtest.cc",
261 "rtcstatscollector_unittest.cc",
262 "rtpsenderreceiver_unittest.cc",
263 "sctputils_unittest.cc",
264 "statscollector_unittest.cc",
265 "test/fakeaudiocapturemodule.cc",
266 "test/fakeaudiocapturemodule.h",
267 "test/fakeaudiocapturemodule_unittest.cc",
268 "test/fakedatachannelprovider.h",
269 "test/fakeperiodicvideocapturer.h",
270 "test/fakertccertificategenerator.h",
271 "test/fakevideotrackrenderer.h",
272 "test/fakevideotracksource.h",
273 "test/mock_datachannel.h",
274 "test/mock_peerconnection.h",
275 "test/mock_webrtcsession.h",
276 "test/mockpeerconnectionobservers.h",
277 "test/peerconnectiontestwrapper.cc",
278 "test/peerconnectiontestwrapper.h",
279 "test/rtcstatsobtainer.h",
280 "test/testsdpstrings.h",
281 "videocapturertracksource_unittest.cc",
282 "videotrack_unittest.cc",
283 "webrtcsdp_unittest.cc",
284 "webrtcsession_unittest.cc",
285 ]
286
287 if (rtc_enable_sctp) {
288 defines = [ "HAVE_SCTP" ]
289 }
290
291 configs += [ ":peerconnection_unittests_config" ]
292
293 if (!build_with_chromium && is_clang) {
294 # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
295 suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
296 }
297
298 # TODO(jschuh): Bug 1348: fix this warning.
299 configs += [ "//build/config/compiler:no_size_t_to_int_warning" ]
300
301 if (is_win) {
302 cflags = [
303 "/wd4245", # conversion from int to size_t, signed/unsigned mismatch.
304 "/wd4389", # signed/unsigned mismatch.
305 ]
306 }
307
308 if (rtc_use_quic) {
309 public_deps = [
310 "//third_party/libquic",
311 ]
312 sources += [
313 "quicdatachannel_unittest.cc",
314 "quicdatatransport_unittest.cc",
315 ]
316 }
317
318 deps = []
319 if (is_android) {
320 sources += [
321 "test/androidtestinitializer.cc",
322 "test/androidtestinitializer.h",
323 ]
324 deps += [
325 "//testing/android/native_test:native_test_support",
326 "//webrtc/sdk/android:libjingle_peerconnection_java",
327 "//webrtc/sdk/android:libjingle_peerconnection_jni",
328 ]
329 }
330
331 deps += [
332 ":libjingle_peerconnection",
333 "..:webrtc_common",
334 "../api:fakemetricsobserver",
335 "../base:rtc_base_tests_utils",
336 "../media:rtc_unittest_main",
337 "../pc:rtc_pc",
338 "../system_wrappers:metrics_default",
339 "//testing/gmock",
340 ]
341
342 if (is_android) {
343 deps += [ "//testing/android/native_test:native_test_support" ]
344
345 shard_timeout = 900
346 }
347 }
kjellander142f8c52016-06-13 00:08:24 -0700348}