BUILD.gn (15027B)
1 # Copyright (c) 2014 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 9 import("../../webrtc.gni") 10 11 if (is_android) { 12 import("//chromium/build/config/android/config.gni") 13 import("//chromium/build/config/android/rules.gni") 14 } 15 16 config("audio_device_warnings_config") { 17 if (is_win && is_clang) { 18 cflags = [ 19 # Disable warnings failing when compiling with Clang on Windows. 20 # https://bugs.chromium.org/p/webrtc/issues/detail?id=5366 21 "-Wno-microsoft-goto", 22 ] 23 } 24 } 25 26 rtc_source_set("audio_device_default") { 27 visibility = [ "*" ] 28 sources = [ "include/audio_device_default.h" ] 29 deps = [ "../../api/audio:audio_device" ] 30 } 31 32 rtc_source_set("audio_device") { 33 if (!build_with_mozilla) { # See Bug 1820869. 34 visibility = [ "*" ] 35 public_deps += [ # no-presubmit-check TODO(webrtc:8603) 36 ":audio_device_api", 37 38 # Deprecated. 39 # TODO(webrtc:7452): Remove this public dep. audio_device_impl should 40 # be depended on directly if needed. 41 ":audio_device_impl", 42 ] 43 } 44 } 45 46 rtc_source_set("audio_device_api") { 47 visibility = [ "*" ] 48 sources = [ 49 "include/audio_device.h", 50 "include/audio_device_defines.h", 51 ] 52 deps = [ "../../api/audio:audio_device" ] 53 } 54 55 rtc_library("audio_device_buffer") { 56 if (!build_with_mozilla) { # See Bug 1820869. 57 sources = [ 58 "audio_device_buffer.cc", 59 "audio_device_buffer.h", 60 "fine_audio_buffer.cc", 61 "fine_audio_buffer.h", 62 ] 63 deps = [ 64 "../../api:array_view", 65 "../../api:sequence_checker", 66 "../../api/audio:audio_device", 67 "../../api/environment", 68 "../../api/task_queue", 69 "../../api/units:time_delta", 70 "../../common_audio:common_audio_c", 71 "../../rtc_base:buffer", 72 "../../rtc_base:checks", 73 "../../rtc_base:event_tracer", 74 "../../rtc_base:logging", 75 "../../rtc_base:macromagic", 76 "../../rtc_base:safe_conversions", 77 "../../rtc_base:timestamp_aligner", 78 "../../rtc_base:timeutils", 79 "../../rtc_base/synchronization:mutex", 80 "../../rtc_base/system:no_unique_address", 81 "../../system_wrappers", 82 "../../system_wrappers:metrics", 83 ] 84 } 85 } 86 87 rtc_library("audio_device_generic") { 88 sources = [ 89 "audio_device_generic.cc", 90 "audio_device_generic.h", 91 ] 92 deps = [ 93 ":audio_device_buffer", 94 "../../api/audio:audio_device", 95 "../../rtc_base:logging", 96 ] 97 } 98 99 rtc_library("audio_device_name") { 100 sources = [ 101 "audio_device_name.cc", 102 "audio_device_name.h", 103 ] 104 deps = [ "//third_party/abseil-cpp/absl/strings:string_view" ] 105 } 106 107 rtc_library("windows_core_audio_utility") { 108 if (is_win && !build_with_chromium) { 109 sources = [ 110 "win/core_audio_utility_win.cc", 111 "win/core_audio_utility_win.h", 112 ] 113 114 deps = [ 115 ":audio_device_name", 116 "../../api/audio:audio_device", 117 "../../api/units:time_delta", 118 "../../rtc_base:checks", 119 "../../rtc_base:logging", 120 "../../rtc_base:platform_thread_types", 121 "../../rtc_base:stringutils", 122 "../../rtc_base/win:windows_version", 123 "//third_party/abseil-cpp/absl/strings", 124 ] 125 126 libs = [ "oleaut32.lib" ] 127 } 128 } 129 130 # An ADM with a dedicated factory method which does not depend on the 131 # audio_device_impl target. The goal is to use this new structure and 132 # gradually phase out the old design. 133 # TODO(henrika): currently only supported on Windows. 134 rtc_library("audio_device_module_from_input_and_output") { 135 visibility = [ "*" ] 136 if (is_win && !build_with_chromium) { 137 sources = [ 138 "include/audio_device_factory.cc", 139 "include/audio_device_factory.h", 140 ] 141 sources += [ 142 "win/audio_device_module_win.cc", 143 "win/audio_device_module_win.h", 144 "win/core_audio_base_win.cc", 145 "win/core_audio_base_win.h", 146 "win/core_audio_input_win.cc", 147 "win/core_audio_input_win.h", 148 "win/core_audio_output_win.cc", 149 "win/core_audio_output_win.h", 150 ] 151 152 deps = [ 153 ":audio_device_buffer", 154 ":audio_device_name", 155 ":windows_core_audio_utility", 156 "../../api:array_view", 157 "../../api:make_ref_counted", 158 "../../api:scoped_refptr", 159 "../../api:sequence_checker", 160 "../../api/audio:audio_device", 161 "../../api/environment", 162 "../../api/task_queue", 163 "../../api/units:time_delta", 164 "../../rtc_base:checks", 165 "../../rtc_base:logging", 166 "../../rtc_base:platform_thread", 167 "../../rtc_base:safe_conversions", 168 "../../rtc_base:stringutils", 169 "../../rtc_base:timeutils", 170 "../../rtc_base:zero_memory", 171 "../../rtc_base/win:scoped_com_initializer", 172 "../../rtc_base/win:windows_version", 173 "//third_party/abseil-cpp/absl/strings", 174 ] 175 } 176 } 177 178 if (!build_with_chromium) { 179 rtc_library("test_audio_device_module") { 180 visibility = [ "*" ] 181 sources = [ 182 "include/test_audio_device.cc", 183 "include/test_audio_device.h", 184 "test_audio_device_impl.cc", 185 "test_audio_device_impl.h", 186 ] 187 188 deps = [ 189 ":audio_device_buffer", 190 ":audio_device_default", 191 ":audio_device_generic", 192 ":audio_device_impl", 193 "../../api:array_view", 194 "../../api:make_ref_counted", 195 "../../api:scoped_refptr", 196 "../../api/audio:audio_device", 197 "../../api/environment", 198 "../../api/task_queue", 199 "../../api/units:time_delta", 200 "../../common_audio", 201 "../../rtc_base:buffer", 202 "../../rtc_base:checks", 203 "../../rtc_base:logging", 204 "../../rtc_base:macromagic", 205 "../../rtc_base:platform_thread", 206 "../../rtc_base:random", 207 "../../rtc_base:rtc_event", 208 "../../rtc_base:safe_conversions", 209 "../../rtc_base:timeutils", 210 "../../rtc_base/synchronization:mutex", 211 "../../rtc_base/system:file_wrapper", 212 "../../rtc_base/task_utils:repeating_task", 213 "//third_party/abseil-cpp/absl/strings:string_view", 214 ] 215 } 216 } 217 218 rtc_library("audio_device_dummy") { 219 visibility = [ "*" ] 220 sources = [ 221 "dummy/audio_device_dummy.cc", 222 "dummy/audio_device_dummy.h", 223 ] 224 deps = [ 225 ":audio_device_buffer", 226 ":audio_device_generic", 227 "../../api/audio:audio_device", 228 ] 229 } 230 231 if (!build_with_chromium) { 232 rtc_library("file_audio_device") { 233 visibility = [ "*" ] 234 sources = [ 235 "dummy/file_audio_device.cc", 236 "dummy/file_audio_device.h", 237 "dummy/file_audio_device_factory.cc", 238 "dummy/file_audio_device_factory.h", 239 ] 240 defines = [] 241 if (rtc_use_dummy_audio_file_devices) { 242 defines += [ "WEBRTC_DUMMY_FILE_DEVICES" ] 243 } 244 deps = [ 245 ":audio_device_buffer", 246 ":audio_device_generic", 247 "../../api/audio:audio_device", 248 "../../rtc_base:checks", 249 "../../rtc_base:logging", 250 "../../rtc_base:platform_thread", 251 "../../rtc_base:stringutils", 252 "../../rtc_base:threading", 253 "../../rtc_base:timeutils", 254 "../../rtc_base/synchronization:mutex", 255 "../../rtc_base/system:file_wrapper", 256 "//third_party/abseil-cpp/absl/strings:string_view", 257 ] 258 } 259 } 260 261 # Contains default implementations of webrtc::AudioDeviceModule for Windows, 262 # Linux, Mac, iOS and Android. 263 rtc_library("audio_device_impl") { 264 if (!build_with_mozilla) { # See Bug 1820869. 265 visibility = [ "*" ] 266 deps = [ 267 ":audio_device_buffer", 268 ":audio_device_default", 269 ":audio_device_dummy", 270 ":audio_device_generic", 271 "../../api:array_view", 272 "../../api:make_ref_counted", 273 "../../api:ref_count", 274 "../../api:refcountedbase", 275 "../../api:scoped_refptr", 276 "../../api:sequence_checker", 277 "../../api/audio:audio_device", 278 "../../api/environment", 279 "../../api/task_queue", 280 "../../api/units:time_delta", 281 "../../common_audio", 282 "../../common_audio:common_audio_c", 283 "../../rtc_base:buffer", 284 "../../rtc_base:checks", 285 "../../rtc_base:logging", 286 "../../rtc_base:macromagic", 287 "../../rtc_base:platform_thread", 288 "../../rtc_base:random", 289 "../../rtc_base:rtc_event", 290 "../../rtc_base:safe_conversions", 291 "../../rtc_base:stringutils", 292 "../../rtc_base:threading", 293 "../../rtc_base:timeutils", 294 "../../rtc_base/synchronization:mutex", 295 "../../rtc_base/system:arch", 296 "../../rtc_base/system:file_wrapper", 297 "../../rtc_base/task_utils:repeating_task", 298 "../../system_wrappers:metrics", 299 "../utility", 300 "//third_party/abseil-cpp/absl/base:core_headers", 301 "//third_party/abseil-cpp/absl/base:nullability", 302 "//third_party/abseil-cpp/absl/strings:string_view", 303 ] 304 if (rtc_include_internal_audio_device && is_ios) { 305 deps += [ "../../sdk:audio_device" ] 306 } 307 308 sources = [ "include/fake_audio_device.h" ] 309 310 if (build_with_mozilla) { 311 sources -= [ 312 "include/test_audio_device.cc", 313 "include/test_audio_device.h", 314 ] 315 } 316 317 defines = [] 318 cflags = [] 319 if (rtc_audio_device_plays_sinus_tone) { 320 defines += [ "AUDIO_DEVICE_PLAYS_SINUS_TONE" ] 321 } 322 if (rtc_enable_android_aaudio) { 323 defines += [ "WEBRTC_AUDIO_DEVICE_INCLUDE_ANDROID_AAUDIO" ] 324 } 325 if (rtc_include_internal_audio_device) { 326 sources += [ 327 "audio_device_data_observer.cc", 328 "audio_device_impl.cc", 329 "audio_device_impl.h", 330 "include/audio_device_data_observer.h", 331 ] 332 if (is_android) { 333 if (build_with_mozilla) { 334 include_dirs += [ 335 "/config/external/nspr", 336 "/nsprpub/lib/ds", 337 "/nsprpub/pr/include", 338 ] 339 } 340 } 341 if (rtc_use_dummy_audio_file_devices) { 342 defines += [ "WEBRTC_DUMMY_FILE_DEVICES" ] 343 } else { 344 if (is_linux || is_chromeos) { 345 sources += [ 346 "linux/alsasymboltable_linux.cc", 347 "linux/alsasymboltable_linux.h", 348 "linux/audio_device_alsa_linux.cc", 349 "linux/audio_device_alsa_linux.h", 350 "linux/audio_mixer_manager_alsa_linux.cc", 351 "linux/audio_mixer_manager_alsa_linux.h", 352 "linux/latebindingsymboltable_linux.cc", 353 "linux/latebindingsymboltable_linux.h", 354 ] 355 defines += [ "WEBRTC_ENABLE_LINUX_ALSA" ] 356 libs = [ "dl" ] 357 if (rtc_use_x11) { 358 libs += [ "X11" ] 359 defines += [ "WEBRTC_USE_X11" ] 360 } 361 if (rtc_include_pulse_audio) { 362 defines += [ "WEBRTC_ENABLE_LINUX_PULSE" ] 363 } 364 sources += [ 365 "linux/audio_device_pulse_linux.cc", 366 "linux/audio_device_pulse_linux.h", 367 "linux/audio_mixer_manager_pulse_linux.cc", 368 "linux/audio_mixer_manager_pulse_linux.h", 369 "linux/pulseaudiosymboltable_linux.cc", 370 "linux/pulseaudiosymboltable_linux.h", 371 ] 372 } 373 if (is_mac) { 374 sources += [ 375 "mac/audio_device_mac.cc", 376 "mac/audio_device_mac.h", 377 "mac/audio_mixer_manager_mac.cc", 378 "mac/audio_mixer_manager_mac.h", 379 ] 380 deps += [ 381 ":audio_device_impl_frameworks", 382 "../third_party/portaudio:mac_portaudio", 383 ] 384 } 385 if (is_win) { 386 sources += [ 387 "win/audio_device_core_win.cc", 388 "win/audio_device_core_win.h", 389 ] 390 libs = [ 391 # Required for the built-in WASAPI AEC. 392 "dmoguids.lib", 393 "wmcodecdspuuid.lib", 394 "amstrmid.lib", 395 "msdmo.lib", 396 "oleaut32.lib", 397 ] 398 deps += [ 399 "../../rtc_base:win32", 400 "../../rtc_base/win:scoped_com_initializer", 401 ] 402 } 403 configs += [ ":audio_device_warnings_config" ] 404 } 405 } else { 406 defines = [ "WEBRTC_DUMMY_AUDIO_BUILD" ] 407 } 408 409 if (!build_with_chromium) { 410 deps += [ ":file_audio_device" ] 411 412 # TODO(titovartem): remove after downstream is fixed 413 sources += [ "dummy/file_audio_device_factory.h" ] 414 } 415 } 416 } 417 418 if (is_mac) { 419 rtc_source_set("audio_device_impl_frameworks") { 420 visibility = [ ":*" ] 421 frameworks = [ 422 # Needed for CoreGraphics: 423 "ApplicationServices.framework", 424 425 "AudioToolbox.framework", 426 "CoreAudio.framework", 427 428 # Needed for CGEventSourceKeyState in audio_device_mac.cc: 429 "CoreGraphics.framework", 430 ] 431 } 432 } 433 434 if (!build_with_mozilla) { # See Bug 1820869. 435 rtc_source_set("mock_audio_device") { 436 visibility = [ "*" ] 437 testonly = true 438 sources = [ 439 "include/mock_audio_device.h", 440 "include/mock_audio_transport.h", 441 "mock_audio_device_buffer.h", 442 ] 443 deps = [ 444 ":audio_device", 445 ":audio_device_buffer", 446 ":audio_device_impl", 447 "../../api:make_ref_counted", 448 "../../api:scoped_refptr", 449 "../../api/audio:audio_device", 450 "../../test:test_support", 451 ] 452 } 453 } 454 455 # See Bug 1820869 for !build_with_mozilla. 456 if (rtc_include_tests && !build_with_chromium && !build_with_mozilla) { 457 rtc_library("audio_device_unittests") { 458 testonly = true 459 460 sources = [ 461 "fine_audio_buffer_unittest.cc", 462 "include/test_audio_device_unittest.cc", 463 "test_audio_device_impl_test.cc", 464 ] 465 deps = [ 466 ":audio_device", 467 ":audio_device_buffer", 468 ":audio_device_generic", 469 ":audio_device_impl", 470 ":mock_audio_device", 471 ":test_audio_device_module", 472 "../../api:array_view", 473 "../../api:scoped_refptr", 474 "../../api:sequence_checker", 475 "../../api/audio:audio_device", 476 "../../api/audio:create_audio_device_module", 477 "../../api/environment", 478 "../../api/environment:environment_factory", 479 "../../api/task_queue", 480 "../../api/task_queue:default_task_queue_factory", 481 "../../api/units:time_delta", 482 "../../api/units:timestamp", 483 "../../common_audio", 484 "../../rtc_base:buffer", 485 "../../rtc_base:checks", 486 "../../rtc_base:logging", 487 "../../rtc_base:macromagic", 488 "../../rtc_base:race_checker", 489 "../../rtc_base:rtc_event", 490 "../../rtc_base:safe_conversions", 491 "../../rtc_base:task_queue_for_test", 492 "../../rtc_base:timeutils", 493 "../../rtc_base/synchronization:mutex", 494 "../../system_wrappers", 495 "../../test:create_test_environment", 496 "../../test:fileutils", 497 "../../test:test_support", 498 "../../test/time_controller", 499 ] 500 if (is_linux || is_chromeos || is_mac || is_win) { 501 sources += [ "audio_device_unittest.cc" ] 502 } 503 if (is_win) { 504 sources += [ "win/core_audio_utility_win_unittest.cc" ] 505 deps += [ 506 ":audio_device_module_from_input_and_output", 507 ":windows_core_audio_utility", 508 "../../rtc_base/win:scoped_com_initializer", 509 "../../rtc_base/win:windows_version", 510 ] 511 } 512 if (is_android) { 513 deps += [ 514 "../../sdk/android:internal_jni", 515 "../../sdk/android:libjingle_peerconnection_java", 516 "../../sdk/android:native_api_jni", 517 "../utility", 518 ] 519 } 520 if (!rtc_include_internal_audio_device) { 521 defines = [ "WEBRTC_DUMMY_AUDIO_BUILD" ] 522 } 523 } 524 }