• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 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("../webrtc.gni")
10
11if (is_android) {
12  import("//build/config/android/config.gni")
13  import("//build/config/android/rules.gni")
14} else if (is_mac) {
15  import("//build/config/mac/rules.gni")
16} else if (is_ios) {
17  import("//build/config/ios/rules.gni")
18}
19
20group("examples") {
21  # This target shall build all targets in examples.
22  testonly = true
23  deps = []
24
25  if (is_android) {
26    deps += [
27      ":AppRTCMobile",
28      ":AppRTCMobile_test_apk",
29      ":libwebrtc_unity",
30      "androidvoip",
31    ]
32
33    # TODO(sakal): We include some code from the tests. Remove this dependency
34    # and remove this if-clause.
35    if (rtc_include_tests) {
36      deps += [ "androidnativeapi" ]
37    }
38  }
39
40  if (!build_with_chromium) {
41    deps += [ ":stun_prober" ]
42  }
43
44  if (is_ios || (is_mac && target_cpu != "x86")) {
45    deps += [ ":AppRTCMobile" ]
46  }
47
48  if (is_linux || is_win) {
49    deps += [
50      ":peerconnection_server",
51      ":stunserver",
52      ":turnserver",
53    ]
54    if (current_os != "winuwp") {
55      deps += [ ":peerconnection_client" ]
56    }
57  }
58
59  if (is_android || is_win) {
60    deps += [ ":webrtc_unity_plugin" ]
61  }
62}
63
64rtc_library("read_auth_file") {
65  testonly = true
66  sources = [
67    "turnserver/read_auth_file.cc",
68    "turnserver/read_auth_file.h",
69  ]
70  deps = [ "../rtc_base" ]
71}
72
73if (rtc_include_tests) {
74  rtc_test("examples_unittests") {
75    testonly = true
76    sources = [ "turnserver/read_auth_file_unittest.cc" ]
77    deps = [
78      ":read_auth_file",
79      "../test:test_main",
80      "//test:test_support",
81      "//testing/gtest",
82    ]
83  }
84}
85
86if (is_android) {
87  rtc_android_apk("AppRTCMobile") {
88    testonly = true
89    apk_name = "AppRTCMobile"
90    android_manifest = "androidapp/AndroidManifest.xml"
91    min_sdk_version = 21
92    target_sdk_version = 29
93
94    deps = [
95      ":AppRTCMobile_javalib",
96      ":AppRTCMobile_resources",
97      "../rtc_base:base_java",
98    ]
99
100    shared_libraries = [ "../sdk/android:libjingle_peerconnection_so" ]
101  }
102
103  rtc_android_library("AppRTCMobile_javalib") {
104    testonly = true
105    android_manifest = "androidapp/AndroidManifest.xml"
106
107    sources = [
108      "androidapp/src/org/appspot/apprtc/AppRTCAudioManager.java",
109      "androidapp/src/org/appspot/apprtc/AppRTCBluetoothManager.java",
110      "androidapp/src/org/appspot/apprtc/AppRTCClient.java",
111      "androidapp/src/org/appspot/apprtc/AppRTCProximitySensor.java",
112      "androidapp/src/org/appspot/apprtc/CallActivity.java",
113      "androidapp/src/org/appspot/apprtc/CallFragment.java",
114      "androidapp/src/org/appspot/apprtc/CaptureQualityController.java",
115      "androidapp/src/org/appspot/apprtc/ConnectActivity.java",
116      "androidapp/src/org/appspot/apprtc/CpuMonitor.java",
117      "androidapp/src/org/appspot/apprtc/DirectRTCClient.java",
118      "androidapp/src/org/appspot/apprtc/HudFragment.java",
119      "androidapp/src/org/appspot/apprtc/PeerConnectionClient.java",
120      "androidapp/src/org/appspot/apprtc/RecordedAudioToFileController.java",
121      "androidapp/src/org/appspot/apprtc/RoomParametersFetcher.java",
122      "androidapp/src/org/appspot/apprtc/RtcEventLog.java",
123      "androidapp/src/org/appspot/apprtc/SettingsActivity.java",
124      "androidapp/src/org/appspot/apprtc/SettingsFragment.java",
125      "androidapp/src/org/appspot/apprtc/TCPChannelClient.java",
126      "androidapp/src/org/appspot/apprtc/UnhandledExceptionHandler.java",
127      "androidapp/src/org/appspot/apprtc/WebSocketChannelClient.java",
128      "androidapp/src/org/appspot/apprtc/WebSocketRTCClient.java",
129      "androidapp/src/org/appspot/apprtc/util/AppRTCUtils.java",
130      "androidapp/src/org/appspot/apprtc/util/AsyncHttpURLConnection.java",
131    ]
132
133    deps = [
134      ":AppRTCMobile_resources",
135      "../rtc_base:base_java",
136      "../sdk/android:audio_api_java",
137      "../sdk/android:base_java",
138      "../sdk/android:camera_java",
139      "../sdk/android:default_video_codec_factory_java",
140      "../sdk/android:filevideo_java",
141      "../sdk/android:hwcodecs_java",
142      "../sdk/android:java_audio_device_module_java",
143      "../sdk/android:libjingle_peerconnection_java",
144      "../sdk/android:libjingle_peerconnection_metrics_default_java",
145      "../sdk/android:peerconnection_java",
146      "../sdk/android:screencapturer_java",
147      "../sdk/android:surfaceviewrenderer_java",
148      "../sdk/android:swcodecs_java",
149      "../sdk/android:video_api_java",
150      "../sdk/android:video_java",
151      "androidapp/third_party/autobanh:autobanh_java",
152      "//third_party/android_deps:com_android_support_support_annotations_java",
153    ]
154  }
155
156  android_resources("AppRTCMobile_resources") {
157    testonly = true
158    sources = [
159      "androidapp/res/drawable-hdpi/disconnect.png",
160      "androidapp/res/drawable-hdpi/ic_action_full_screen.png",
161      "androidapp/res/drawable-hdpi/ic_action_return_from_full_screen.png",
162      "androidapp/res/drawable-hdpi/ic_launcher.png",
163      "androidapp/res/drawable-hdpi/ic_loopback_call.png",
164      "androidapp/res/drawable-ldpi/disconnect.png",
165      "androidapp/res/drawable-ldpi/ic_action_full_screen.png",
166      "androidapp/res/drawable-ldpi/ic_action_return_from_full_screen.png",
167      "androidapp/res/drawable-ldpi/ic_launcher.png",
168      "androidapp/res/drawable-ldpi/ic_loopback_call.png",
169      "androidapp/res/drawable-mdpi/disconnect.png",
170      "androidapp/res/drawable-mdpi/ic_action_full_screen.png",
171      "androidapp/res/drawable-mdpi/ic_action_return_from_full_screen.png",
172      "androidapp/res/drawable-mdpi/ic_launcher.png",
173      "androidapp/res/drawable-mdpi/ic_loopback_call.png",
174      "androidapp/res/drawable-xhdpi/disconnect.png",
175      "androidapp/res/drawable-xhdpi/ic_action_full_screen.png",
176      "androidapp/res/drawable-xhdpi/ic_action_return_from_full_screen.png",
177      "androidapp/res/drawable-xhdpi/ic_launcher.png",
178      "androidapp/res/drawable-xhdpi/ic_loopback_call.png",
179      "androidapp/res/layout/activity_call.xml",
180      "androidapp/res/layout/activity_connect.xml",
181      "androidapp/res/layout/fragment_call.xml",
182      "androidapp/res/layout/fragment_hud.xml",
183      "androidapp/res/menu/connect_menu.xml",
184      "androidapp/res/values-v17/styles.xml",
185      "androidapp/res/values-v21/styles.xml",
186      "androidapp/res/values/arrays.xml",
187      "androidapp/res/values/strings.xml",
188      "androidapp/res/xml/preferences.xml",
189    ]
190    custom_package = "org.appspot.apprtc"
191
192    # Needed for Bazel converter.
193    resource_dirs = [ "androidapp/res" ]
194    assert(resource_dirs != [])  # Mark as used.
195  }
196
197  rtc_instrumentation_test_apk("AppRTCMobile_test_apk") {
198    apk_name = "AppRTCMobileTest"
199    android_manifest = "androidtests/AndroidManifest.xml"
200    min_sdk_version = 21
201    target_sdk_version = 21
202
203    sources = [
204      "androidtests/src/org/appspot/apprtc/test/PeerConnectionClientTest.java",
205    ]
206
207    apk_under_test = ":AppRTCMobile"
208
209    deps = [
210      ":AppRTCMobile_javalib",
211      "../sdk/android:base_java",
212      "../sdk/android:camera_java",
213      "../sdk/android:libjingle_peerconnection_java",
214      "../sdk/android:peerconnection_java",
215      "../sdk/android:video_api_java",
216      "../sdk/android:video_java",
217      "//third_party/android_support_test_runner:runner_java",
218      "//third_party/junit",
219    ]
220  }
221}
222
223if (is_ios || (is_mac && target_cpu != "x86")) {
224  config("apprtc_common_config") {
225    include_dirs = [ "objc/AppRTCMobile/common" ]
226  }
227
228  rtc_library("apprtc_common") {
229    testonly = true
230    sources = [
231      "objc/AppRTCMobile/common/ARDUtilities.h",
232      "objc/AppRTCMobile/common/ARDUtilities.m",
233    ]
234    public_configs = [ ":apprtc_common_config" ]
235
236    if (is_ios) {
237      # iOS must use WebRTC.framework which is dynamically linked.
238      deps = [ "../sdk:framework_objc+link" ]
239    } else {
240      deps = [ "../sdk:mac_framework_objc+link" ]
241    }
242  }
243
244  config("apprtc_signaling_config") {
245    include_dirs = [ "objc/AppRTCMobile" ]
246    cflags_objc = [
247      # TODO(bugs.webrtc.org/10837): Remove this when usage of
248      # archivedDataWithRootObject will be removed.
249      "-Wno-unguarded-availability",
250    ]
251  }
252
253  rtc_library("apprtc_signaling") {
254    testonly = true
255    sources = [
256      "objc/AppRTCMobile/ARDAppClient+Internal.h",
257      "objc/AppRTCMobile/ARDAppClient.h",
258      "objc/AppRTCMobile/ARDAppClient.m",
259      "objc/AppRTCMobile/ARDAppEngineClient.h",
260      "objc/AppRTCMobile/ARDAppEngineClient.m",
261      "objc/AppRTCMobile/ARDBitrateTracker.h",
262      "objc/AppRTCMobile/ARDBitrateTracker.m",
263      "objc/AppRTCMobile/ARDCaptureController.h",
264      "objc/AppRTCMobile/ARDCaptureController.m",
265      "objc/AppRTCMobile/ARDExternalSampleCapturer.h",
266      "objc/AppRTCMobile/ARDExternalSampleCapturer.m",
267      "objc/AppRTCMobile/ARDJoinResponse+Internal.h",
268      "objc/AppRTCMobile/ARDJoinResponse.h",
269      "objc/AppRTCMobile/ARDJoinResponse.m",
270      "objc/AppRTCMobile/ARDMessageResponse+Internal.h",
271      "objc/AppRTCMobile/ARDMessageResponse.h",
272      "objc/AppRTCMobile/ARDMessageResponse.m",
273      "objc/AppRTCMobile/ARDRoomServerClient.h",
274      "objc/AppRTCMobile/ARDSettingsModel+Private.h",
275      "objc/AppRTCMobile/ARDSettingsModel.h",
276      "objc/AppRTCMobile/ARDSettingsModel.m",
277      "objc/AppRTCMobile/ARDSettingsStore.h",
278      "objc/AppRTCMobile/ARDSettingsStore.m",
279      "objc/AppRTCMobile/ARDSignalingChannel.h",
280      "objc/AppRTCMobile/ARDSignalingMessage.h",
281      "objc/AppRTCMobile/ARDSignalingMessage.m",
282      "objc/AppRTCMobile/ARDStatsBuilder.h",
283      "objc/AppRTCMobile/ARDStatsBuilder.m",
284      "objc/AppRTCMobile/ARDTURNClient+Internal.h",
285      "objc/AppRTCMobile/ARDTURNClient.h",
286      "objc/AppRTCMobile/ARDTURNClient.m",
287      "objc/AppRTCMobile/ARDWebSocketChannel.h",
288      "objc/AppRTCMobile/ARDWebSocketChannel.m",
289      "objc/AppRTCMobile/RTCIceCandidate+JSON.h",
290      "objc/AppRTCMobile/RTCIceCandidate+JSON.m",
291      "objc/AppRTCMobile/RTCIceServer+JSON.h",
292      "objc/AppRTCMobile/RTCIceServer+JSON.m",
293      "objc/AppRTCMobile/RTCSessionDescription+JSON.h",
294      "objc/AppRTCMobile/RTCSessionDescription+JSON.m",
295    ]
296    public_configs = [ ":apprtc_signaling_config" ]
297    deps = [
298      ":apprtc_common",
299      ":socketrocket",
300    ]
301
302    if (is_ios) {
303      # iOS must use WebRTC.framework which is dynamically linked.
304      deps += [
305        "../sdk:framework_objc+link",
306        "../sdk:ios_framework_bundle",
307      ]
308    } else {
309      deps += [ "../sdk:mac_framework_objc+link" ]
310    }
311    frameworks = [
312      "CoreMedia.framework",
313      "QuartzCore.framework",
314    ]
315  }
316
317  if (is_ios) {
318    rtc_library("AppRTCMobile_lib") {
319      # iOS must use WebRTC.framework which is dynamically linked.
320      testonly = true
321      sources = [
322        "objc/AppRTCMobile/ios/ARDAppDelegate.h",
323        "objc/AppRTCMobile/ios/ARDAppDelegate.m",
324        "objc/AppRTCMobile/ios/ARDFileCaptureController.h",
325        "objc/AppRTCMobile/ios/ARDFileCaptureController.m",
326        "objc/AppRTCMobile/ios/ARDMainView.h",
327        "objc/AppRTCMobile/ios/ARDMainView.m",
328        "objc/AppRTCMobile/ios/ARDMainViewController.h",
329        "objc/AppRTCMobile/ios/ARDMainViewController.m",
330        "objc/AppRTCMobile/ios/ARDSettingsViewController.h",
331        "objc/AppRTCMobile/ios/ARDSettingsViewController.m",
332        "objc/AppRTCMobile/ios/ARDStatsView.h",
333        "objc/AppRTCMobile/ios/ARDStatsView.m",
334        "objc/AppRTCMobile/ios/ARDVideoCallView.h",
335        "objc/AppRTCMobile/ios/ARDVideoCallView.m",
336        "objc/AppRTCMobile/ios/ARDVideoCallViewController.h",
337        "objc/AppRTCMobile/ios/ARDVideoCallViewController.m",
338        "objc/AppRTCMobile/ios/RTCVideoCodecInfo+HumanReadable.h",
339        "objc/AppRTCMobile/ios/RTCVideoCodecInfo+HumanReadable.m",
340        "objc/AppRTCMobile/ios/UIImage+ARDUtilities.h",
341        "objc/AppRTCMobile/ios/UIImage+ARDUtilities.m",
342      ]
343
344      configs += [ "..:common_objc" ]
345
346      deps = [
347        ":apprtc_common",
348        ":apprtc_signaling",
349        "../sdk:framework_objc+link",
350        "../sdk:ios_framework_bundle",
351      ]
352
353      frameworks = [ "AVFoundation.framework" ]
354    }
355
356    ios_app_bundle("AppRTCMobile") {
357      testonly = true
358      sources = [ "objc/AppRTCMobile/ios/main.m" ]
359
360      info_plist = "objc/AppRTCMobile/ios/Info.plist"
361
362      configs += [ "..:common_config" ]
363      public_configs = [ "..:common_inherited_config" ]
364
365      deps = [
366        ":AppRTCMobile_ios_bundle_data",
367        ":AppRTCMobile_lib",
368        "../sdk:framework_objc",
369        "../sdk:ios_framework_bundle",
370      ]
371
372      if (rtc_apprtcmobile_broadcast_extension) {
373        deps += [
374          ":AppRTCMobileBroadcastSetupUI_extension_bundle",
375          ":AppRTCMobileBroadcastUpload_extension_bundle",
376        ]
377      }
378
379      if (target_cpu == "x86") {
380        deps += [ "//testing/iossim" ]
381      }
382    }
383
384    if (rtc_apprtcmobile_broadcast_extension) {
385      bundle_data("AppRTCMobileBroadcastUpload_extension_bundle") {
386        testonly = true
387        public_deps = [  # no-presubmit-check TODO(webrtc:8603)
388          ":AppRTCMobileBroadcastUpload",  # prevent code format
389        ]
390        sources = [ "$root_out_dir/AppRTCMobileBroadcastUpload.appex" ]
391        outputs = [ "{{bundle_contents_dir}}/Plugins/{{source_file_part}}" ]
392      }
393
394      bundle_data("AppRTCMobileBroadcastSetupUI_extension_bundle") {
395        testonly = true
396        public_deps = [  # no-presubmit-check TODO(webrtc:8603)
397          ":AppRTCMobileBroadcastSetupUI",  # prevent code format
398        ]
399        sources = [ "$root_out_dir/AppRTCMobileBroadcastSetupUI.appex" ]
400        outputs = [ "{{bundle_contents_dir}}/Plugins/{{source_file_part}}" ]
401      }
402
403      rtc_library("AppRTCMobileBroadcastUpload_lib") {
404        testonly = true
405        sources = [
406          "objc/AppRTCMobile/ios/broadcast_extension/ARDBroadcastSampleHandler.h",
407          "objc/AppRTCMobile/ios/broadcast_extension/ARDBroadcastSampleHandler.m",
408        ]
409
410        deps = [
411          ":apprtc_signaling",
412          "../sdk:framework_objc+link",
413          "../sdk:ios_framework_bundle",
414        ]
415
416        frameworks = [ "ReplayKit.framework" ]
417      }
418
419      ios_appex_bundle("AppRTCMobileBroadcastUpload") {
420        testonly = true
421        configs += [ "..:common_config" ]
422        public_configs = [ "..:common_inherited_config" ]
423
424        info_plist = "objc/AppRTCMobile/ios/broadcast_extension/BroadcastUploadInfo.plist"
425
426        deps = [
427          ":AppRTCMobileBroadcastUpload_lib",
428          "../sdk:framework_objc",
429        ]
430      }
431
432      ios_appex_bundle("AppRTCMobileBroadcastSetupUI") {
433        sources = [
434          "objc/AppRTCMobile/ios/broadcast_extension/ARDBroadcastSetupViewController.h",
435          "objc/AppRTCMobile/ios/broadcast_extension/ARDBroadcastSetupViewController.m",
436        ]
437
438        info_plist = "objc/AppRTCMobile/ios/broadcast_extension/BroadcastSetupUIInfo.plist"
439
440        frameworks = [ "ReplayKit.framework" ]
441
442        deps = [ ":AppRTCMobile_ios_bundle_data" ]
443      }
444    }
445
446    bundle_data("AppRTCMobile_ios_bundle_data") {
447      sources = [
448        "objc/AppRTCMobile/ios/resources/Roboto-Regular.ttf",
449
450        # Sample video taken from https://media.xiph.org/video/derf/
451        "objc/AppRTCMobile/ios/resources/foreman.mp4",
452        "objc/AppRTCMobile/ios/resources/iPhone5@2x.png",
453        "objc/AppRTCMobile/ios/resources/iPhone6@2x.png",
454        "objc/AppRTCMobile/ios/resources/iPhone6p@3x.png",
455        "objc/AppRTCMobile/ios/resources/ic_call_end_black_24dp.png",
456        "objc/AppRTCMobile/ios/resources/ic_call_end_black_24dp@2x.png",
457        "objc/AppRTCMobile/ios/resources/ic_clear_black_24dp.png",
458        "objc/AppRTCMobile/ios/resources/ic_clear_black_24dp@2x.png",
459        "objc/AppRTCMobile/ios/resources/ic_settings_black_24dp.png",
460        "objc/AppRTCMobile/ios/resources/ic_settings_black_24dp@2x.png",
461        "objc/AppRTCMobile/ios/resources/ic_surround_sound_black_24dp.png",
462        "objc/AppRTCMobile/ios/resources/ic_surround_sound_black_24dp@2x.png",
463        "objc/AppRTCMobile/ios/resources/ic_switch_video_black_24dp.png",
464        "objc/AppRTCMobile/ios/resources/ic_switch_video_black_24dp@2x.png",
465        "objc/AppRTCMobile/ios/resources/mozart.mp3",
466        "objc/Icon-120.png",
467        "objc/Icon-180.png",
468        "objc/Icon.png",
469      ]
470      outputs = [ "{{bundle_resources_dir}}/{{source_file_part}}" ]
471    }
472
473    rtc_library("ObjCNativeAPIDemo_lib") {
474      testonly = true
475      sources = [
476        "objcnativeapi/objc/NADAppDelegate.h",
477        "objcnativeapi/objc/NADAppDelegate.m",
478        "objcnativeapi/objc/NADViewController.h",
479        "objcnativeapi/objc/NADViewController.mm",
480        "objcnativeapi/objc/objc_call_client.h",
481        "objcnativeapi/objc/objc_call_client.mm",
482      ]
483
484      deps = [
485        "../api:libjingle_peerconnection_api",
486        "../api:scoped_refptr",
487        "../api/audio_codecs:builtin_audio_decoder_factory",
488        "../api/audio_codecs:builtin_audio_encoder_factory",
489        "../api/rtc_event_log:rtc_event_log_factory",
490        "../api/task_queue:default_task_queue_factory",
491        "../media:rtc_audio_video",
492        "../modules/audio_processing",
493        "../modules/audio_processing:api",
494        "../pc:libjingle_peerconnection",
495        "../rtc_base",
496        "../rtc_base/synchronization:mutex",
497        "../sdk:base_objc",
498        "../sdk:default_codec_factory_objc",
499        "../sdk:helpers_objc",
500        "../sdk:native_api",
501        "../sdk:ui_objc",
502        "../sdk:videocapture_objc",
503        "../sdk:videotoolbox_objc",
504      ]
505
506      if (current_cpu == "arm64") {
507        deps += [ "../sdk:metal_objc" ]
508      }
509    }
510
511    ios_app_bundle("ObjCNativeAPIDemo") {
512      testonly = true
513      sources = [ "objcnativeapi/objc/main.m" ]
514
515      info_plist = "objcnativeapi/Info.plist"
516
517      configs += [ "..:common_config" ]
518      public_configs = [ "..:common_inherited_config" ]
519
520      deps = [ ":ObjCNativeAPIDemo_lib" ]
521
522      if (target_cpu == "x86") {
523        deps += [ "//testing/iossim" ]
524      }
525    }
526  }
527
528  if (is_mac) {
529    rtc_library("AppRTCMobile_lib") {
530      testonly = true
531      sources = [
532        "objc/AppRTCMobile/mac/APPRTCAppDelegate.h",
533        "objc/AppRTCMobile/mac/APPRTCAppDelegate.m",
534        "objc/AppRTCMobile/mac/APPRTCViewController.h",
535        "objc/AppRTCMobile/mac/APPRTCViewController.m",
536      ]
537      configs += [ "..:common_objc" ]
538      deps = [
539        ":apprtc_common",
540        ":apprtc_signaling",
541        "../sdk:mac_framework_objc+link",
542      ]
543    }
544
545    mac_app_bundle("AppRTCMobile") {
546      testonly = true
547      output_name = "AppRTCMobile"
548
549      sources = [ "objc/AppRTCMobile/mac/main.m" ]
550
551      public_configs = [ "..:common_inherited_config" ]
552
553      info_plist = "objc/AppRTCMobile/mac/Info.plist"
554
555      frameworks = [ "AppKit.framework" ]
556
557      ldflags = [
558        "-rpath",
559        "@executable_path/../Frameworks",
560      ]
561
562      deps = [
563        ":AppRTCMobile_lib",
564        "../sdk:mac_framework_bundle",
565        "../sdk:mac_framework_objc+link",
566      ]
567    }
568  }
569
570  config("socketrocket_include_config") {
571    include_dirs = [ "objc/AppRTCMobile/third_party/SocketRocket" ]
572  }
573
574  config("socketrocket_warning_config") {
575    # GN orders flags on a target before flags from configs. The default config
576    # adds these flags so to cancel them out they need to come from a config and
577    # cannot be on the target directly.
578    cflags = [
579      "-Wno-deprecated-declarations",
580      "-Wno-nonnull",
581      "-Wno-semicolon-before-method-body",
582      "-Wno-unused-variable",
583    ]
584
585    cflags_objc = [
586      # Enabled for cflags_objc in build/config/compiler/BUILD.gn.
587      "-Wno-objc-missing-property-synthesis",
588    ]
589  }
590
591  rtc_library("socketrocket") {
592    testonly = true
593    sources = [
594      "objc/AppRTCMobile/third_party/SocketRocket/SRWebSocket.h",
595      "objc/AppRTCMobile/third_party/SocketRocket/SRWebSocket.m",
596    ]
597    configs += [ ":socketrocket_warning_config" ]
598    public_configs = [ ":socketrocket_include_config" ]
599
600    libs = [ "icucore" ]
601    frameworks = [
602      "CFNetwork.framework",
603      "Security.framework",
604    ]
605  }
606
607  if (rtc_include_tests) {
608    # TODO(kthelgason): compile xctests on mac when chromium supports it.
609    if (is_ios) {
610      rtc_library("apprtcmobile_test_sources") {
611        # iOS must use WebRTC.framework which is dynamically linked.
612        testonly = true
613        include_dirs = [
614          "objc/AppRTCMobile",
615          "objc/AppRTCMobile/ios",
616        ]
617        sources = [
618          "objc/AppRTCMobile/tests/ARDAppClient_xctest.mm",
619          "objc/AppRTCMobile/tests/ARDFileCaptureController_xctest.mm",
620          "objc/AppRTCMobile/tests/ARDSettingsModel_xctest.mm",
621        ]
622        deps = [
623          ":AppRTCMobile_lib",
624          ":apprtc_signaling",
625          "../rtc_base",
626          "../sdk:framework_objc+link",
627          "../sdk:ios_framework_bundle",
628          "//build/config/ios:xctest",
629          "//third_party/ocmock",
630        ]
631      }
632
633      rtc_ios_xctest_test("apprtcmobile_tests") {
634        info_plist = "objc/AppRTCMobile/ios/Info.plist"
635        sources = [ "objc/AppRTCMobile/tests/main.mm" ]
636        deps = [
637          ":AppRTCMobile_lib",
638          ":apprtcmobile_test_sources",
639          "../sdk:framework_objc",
640          "//test:test_support",
641        ]
642        ldflags = [ "-all_load" ]
643      }
644    }
645  }
646}
647
648if (is_linux || is_win) {
649  rtc_executable("peerconnection_client") {
650    testonly = true
651    sources = [
652      "peerconnection/client/conductor.cc",
653      "peerconnection/client/conductor.h",
654      "peerconnection/client/defaults.cc",
655      "peerconnection/client/defaults.h",
656      "peerconnection/client/peer_connection_client.cc",
657      "peerconnection/client/peer_connection_client.h",
658    ]
659
660    deps = [
661      "../api:audio_options_api",
662      "../api:create_peerconnection_factory",
663      "../api:libjingle_peerconnection_api",
664      "../api:media_stream_interface",
665      "../api:scoped_refptr",
666      "../api/audio:audio_mixer_api",
667      "../api/audio_codecs:audio_codecs_api",
668      "../api/video:video_frame_i420",
669      "../api/video:video_rtp_headers",
670      "../api/video_codecs:video_codecs_api",
671      "../media:rtc_media_base",
672      "../p2p:rtc_p2p",
673      "../rtc_base:checks",
674      "../rtc_base/third_party/sigslot",
675      "../system_wrappers:field_trial",
676      "../test:field_trial",
677      "../test:platform_video_capturer",
678      "../test:rtp_test_utils",
679      "//third_party/abseil-cpp/absl/memory",
680      "//third_party/abseil-cpp/absl/types:optional",
681    ]
682    if (is_win) {
683      sources += [
684        "peerconnection/client/flag_defs.h",
685        "peerconnection/client/main.cc",
686        "peerconnection/client/main_wnd.cc",
687        "peerconnection/client/main_wnd.h",
688      ]
689      configs += [ "//build/config/win:windowed" ]
690      deps += [ "../media:rtc_media_base" ]
691    }
692    if (is_linux) {
693      sources += [
694        "peerconnection/client/linux/main.cc",
695        "peerconnection/client/linux/main_wnd.cc",
696        "peerconnection/client/linux/main_wnd.h",
697      ]
698      cflags = [ "-Wno-deprecated-declarations" ]
699      libs = [
700        "X11",
701        "Xcomposite",
702        "Xext",
703        "Xrender",
704      ]
705      deps += [ "//build/config/linux/gtk" ]
706    }
707
708    deps += [
709      "../api:libjingle_peerconnection_api",
710      "../api/audio_codecs:builtin_audio_decoder_factory",
711      "../api/audio_codecs:builtin_audio_encoder_factory",
712      "../api/video:video_frame",
713      "../api/video:video_rtp_headers",
714      "../api/video_codecs:builtin_video_decoder_factory",
715      "../api/video_codecs:builtin_video_encoder_factory",
716      "../media:rtc_audio_video",
717      "../modules/audio_device",
718      "../modules/audio_processing",
719      "../modules/audio_processing:api",
720      "../modules/video_capture:video_capture_module",
721      "../pc:libjingle_peerconnection",
722      "../pc:peerconnection",
723      "../rtc_base",
724      "../rtc_base:rtc_base_approved",
725      "../rtc_base:rtc_json",
726      "../test:video_test_common",
727      "//third_party/abseil-cpp/absl/flags:flag",
728      "//third_party/abseil-cpp/absl/flags:parse",
729      "//third_party/libyuv",
730    ]
731  }
732
733  rtc_executable("peerconnection_server") {
734    testonly = true
735    sources = [
736      "peerconnection/server/data_socket.cc",
737      "peerconnection/server/data_socket.h",
738      "peerconnection/server/main.cc",
739      "peerconnection/server/peer_channel.cc",
740      "peerconnection/server/peer_channel.h",
741      "peerconnection/server/utils.cc",
742      "peerconnection/server/utils.h",
743    ]
744    deps = [
745      "../rtc_base:rtc_base_approved",
746      "../system_wrappers:field_trial",
747      "../test:field_trial",
748      "//third_party/abseil-cpp/absl/flags:flag",
749      "//third_party/abseil-cpp/absl/flags:parse",
750      "//third_party/abseil-cpp/absl/flags:usage",
751    ]
752  }
753  rtc_executable("turnserver") {
754    testonly = true
755    sources = [ "turnserver/turnserver_main.cc" ]
756    deps = [
757      ":read_auth_file",
758      "../p2p:p2p_server_utils",
759      "../p2p:rtc_p2p",
760      "../pc:rtc_pc",
761      "../rtc_base",
762      "../rtc_base:rtc_base_approved",
763    ]
764  }
765  rtc_executable("stunserver") {
766    testonly = true
767    sources = [ "stunserver/stunserver_main.cc" ]
768    deps = [
769      "../p2p:p2p_server_utils",
770      "../p2p:rtc_p2p",
771      "../pc:rtc_pc",
772      "../rtc_base",
773      "../rtc_base:rtc_base_approved",
774    ]
775  }
776}
777
778if (is_win || is_android) {
779  rtc_shared_library("webrtc_unity_plugin") {
780    testonly = true
781    sources = [
782      "unityplugin/simple_peer_connection.cc",
783      "unityplugin/simple_peer_connection.h",
784      "unityplugin/unity_plugin_apis.cc",
785      "unityplugin/unity_plugin_apis.h",
786      "unityplugin/video_observer.cc",
787      "unityplugin/video_observer.h",
788    ]
789
790    if (is_android) {
791      sources += [
792        "unityplugin/class_reference_holder.cc",
793        "unityplugin/class_reference_holder.h",
794        "unityplugin/jni_onload.cc",
795      ]
796      suppressed_configs += [ "//build/config/android:hide_all_but_jni_onload" ]
797    }
798
799    if (is_win) {
800      configs += [ "//build/config/win:windowed" ]
801    }
802    deps = [
803      "../api:create_peerconnection_factory",
804      "../api:libjingle_peerconnection_api",
805      "../api:media_stream_interface",
806      "../api/audio_codecs:builtin_audio_decoder_factory",
807      "../api/audio_codecs:builtin_audio_encoder_factory",
808      "../api/video:video_frame",
809      "../api/video:video_rtp_headers",
810      "../media:rtc_audio_video",
811      "../media:rtc_internal_video_codecs",
812      "../media:rtc_media",
813      "../media:rtc_media_base",
814      "../modules/audio_device",
815      "../modules/audio_processing",
816      "../modules/audio_processing:api",
817      "../modules/video_capture:video_capture_module",
818      "../pc:libjingle_peerconnection",
819      "../pc:peerconnection",
820      "../rtc_base",
821      "../test:platform_video_capturer",
822      "../test:video_test_common",
823      "//third_party/abseil-cpp/absl/memory",
824    ]
825    if (is_android) {
826      deps += [
827        "../modules/utility",
828        "../sdk/android:libjingle_peerconnection_jni",
829      ]
830    }
831  }
832}
833
834if (is_android) {
835  rtc_android_library("webrtc_unity_java") {
836    sources = [ "unityplugin/java/src/org/webrtc/UnityUtility.java" ]
837    deps = [
838      "../rtc_base:base_java",
839      "../sdk/android:camera_java",
840      "../sdk/android:libjingle_peerconnection_java",
841      "../sdk/android:peerconnection_java",
842      "../sdk/android:video_api_java",
843      "../sdk/android:video_java",
844      "//third_party/android_deps:com_android_support_support_annotations_java",
845    ]
846  }
847
848  dist_jar("libwebrtc_unity") {
849    _target_dir_name = get_label_info(":$target_name", "dir")
850    output = "${root_out_dir}/lib.java${_target_dir_name}/${target_name}.jar"
851    direct_deps_only = false
852    use_interface_jars = false
853    use_unprocessed_jars = false
854    requires_android = true
855    deps = [
856      ":webrtc_unity_java",
857      "../rtc_base:base_java",
858      "../sdk/android:libjingle_peerconnection_java",
859      "../sdk/android:libjingle_peerconnection_metrics_default_java",
860      "//third_party/android_deps:com_android_support_support_annotations_java",
861    ]
862  }
863
864  junit_binary("android_examples_junit_tests") {
865    sources = [
866      "androidjunit/src/org/appspot/apprtc/BluetoothManagerTest.java",
867      "androidjunit/src/org/appspot/apprtc/DirectRTCClientTest.java",
868      "androidjunit/src/org/appspot/apprtc/TCPChannelClientTest.java",
869    ]
870
871    deps = [
872      ":AppRTCMobile_javalib",
873      "../sdk/android:peerconnection_java",
874      "//base:base_java_test_support",
875      "//third_party/google-truth:google_truth_java",
876    ]
877
878    additional_jar_files = [ [
879          "../sdk/android/tests/resources/robolectric.properties",
880          "robolectric.properties",
881        ] ]
882  }
883}
884
885if (!build_with_chromium) {
886  # Doesn't build within Chrome on Win.
887  rtc_executable("stun_prober") {
888    testonly = true
889    sources = [ "stunprober/main.cc" ]
890    deps = [
891      "../p2p:libstunprober",
892      "../p2p:rtc_p2p",
893      "../rtc_base",
894      "../rtc_base:checks",
895      "../rtc_base:rtc_base_approved",
896      "//third_party/abseil-cpp/absl/flags:flag",
897      "//third_party/abseil-cpp/absl/flags:parse",
898    ]
899  }
900}
901