OLD | NEW |
| (Empty) |
1 # Copyright (c) 2012 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 # This file contains common settings for building WebRTC components. | |
10 | |
11 { | |
12 # Nesting is required in order to use variables for setting other variables. | |
13 'variables': { | |
14 'variables': { | |
15 'variables': { | |
16 'variables': { | |
17 # This will already be set to zero by supplement.gypi | |
18 'build_with_chromium%': 1, | |
19 | |
20 # Enable to use the Mozilla internal settings. | |
21 'build_with_mozilla%': 0, | |
22 }, | |
23 'build_with_chromium%': '<(build_with_chromium)', | |
24 'build_with_mozilla%': '<(build_with_mozilla%)', | |
25 'include_opus%': 1, | |
26 | |
27 'conditions': [ | |
28 # Include the iLBC audio codec? | |
29 ['build_with_chromium==1 or build_with_mozilla==1', { | |
30 'include_ilbc%': 0, | |
31 }, { | |
32 'include_ilbc%': 1, | |
33 }], | |
34 | |
35 ['build_with_chromium==1', { | |
36 'webrtc_root%': '<(DEPTH)/third_party/webrtc', | |
37 }, { | |
38 'webrtc_root%': '<(DEPTH)/webrtc', | |
39 }], | |
40 | |
41 # Controls whether we use libevent on posix platforms. | |
42 # TODO(phoglund): should arguably be controlled by platform #ifdefs | |
43 # in the code instead. | |
44 ['OS=="win" or OS=="mac" or OS=="ios"', { | |
45 'build_libevent%': 0, | |
46 'enable_libevent%': 0, | |
47 }, { | |
48 'build_libevent%': 1, | |
49 'enable_libevent%': 1, | |
50 }], | |
51 ], | |
52 }, | |
53 'build_with_chromium%': '<(build_with_chromium)', | |
54 'build_with_mozilla%': '<(build_with_mozilla)', | |
55 'build_libevent%': '<(build_libevent)', | |
56 'enable_libevent%': '<(enable_libevent)', | |
57 'webrtc_root%': '<(webrtc_root)', | |
58 'webrtc_vp8_dir%': '<(webrtc_root)/modules/video_coding/codecs/vp8', | |
59 'webrtc_vp9_dir%': '<(webrtc_root)/modules/video_coding/codecs/vp9', | |
60 'include_ilbc%': '<(include_ilbc)', | |
61 'include_opus%': '<(include_opus)', | |
62 'opus_dir%': '<(DEPTH)/third_party/opus', | |
63 }, | |
64 'build_with_chromium%': '<(build_with_chromium)', | |
65 'build_with_mozilla%': '<(build_with_mozilla)', | |
66 'build_libevent%': '<(build_libevent)', | |
67 'enable_libevent%': '<(enable_libevent)', | |
68 'webrtc_root%': '<(webrtc_root)', | |
69 'test_runner_path': '<(DEPTH)/webrtc/build/android/test_runner.py', | |
70 'webrtc_vp8_dir%': '<(webrtc_vp8_dir)', | |
71 'webrtc_vp9_dir%': '<(webrtc_vp9_dir)', | |
72 'include_ilbc%': '<(include_ilbc)', | |
73 'include_opus%': '<(include_opus)', | |
74 'rtc_relative_path%': 1, | |
75 'external_libraries%': '0', | |
76 'json_root%': '<(DEPTH)/third_party/jsoncpp/source/include/', | |
77 # openssl needs to be defined or gyp will complain. Is is only used when | |
78 # when providing external libraries so just use current directory as a | |
79 # placeholder. | |
80 'ssl_root%': '.', | |
81 | |
82 # The Chromium common.gypi we use treats all gyp files without | |
83 # chromium_code==1 as third party code. This disables many of the | |
84 # preferred warning settings. | |
85 # | |
86 # We can set this here to have WebRTC code treated as Chromium code. Our | |
87 # third party code will still have the reduced warning settings. | |
88 'chromium_code': 1, | |
89 | |
90 # Targets are by default not NaCl untrusted code. Use this variable exclude | |
91 # code that uses libraries that aren't available in the NaCl sandbox. | |
92 'nacl_untrusted_build%': 0, | |
93 | |
94 # Set to 1 to enable code coverage on Linux using the gcov library. | |
95 'coverage%': 0, | |
96 | |
97 # Set to "func", "block", "edge" for coverage generation. | |
98 # At unit test runtime set UBSAN_OPTIONS="coverage=1". | |
99 # It is recommend to set include_examples=0. | |
100 # Use llvm's sancov -html-report for human readable reports. | |
101 # See http://clang.llvm.org/docs/SanitizerCoverage.html . | |
102 'webrtc_sanitize_coverage%': "", | |
103 | |
104 # Remote bitrate estimator logging/plotting. | |
105 'enable_bwe_test_logging%': 0, | |
106 | |
107 # Selects fixed-point code where possible. | |
108 'prefer_fixed_point%': 0, | |
109 | |
110 # Enables the use of protocol buffers for debug recordings. | |
111 'enable_protobuf%': 1, | |
112 | |
113 # Disable the code for the intelligibility enhancer by default. | |
114 'enable_intelligibility_enhancer%': 0, | |
115 | |
116 # Selects whether debug dumps for the audio processing module | |
117 # should be generated. | |
118 'apm_debug_dump%': 0, | |
119 | |
120 # Disable these to not build components which can be externally provided. | |
121 'build_expat%': 1, | |
122 'build_json%': 1, | |
123 'build_libsrtp%': 1, | |
124 'build_libvpx%': 1, | |
125 'libvpx_build_vp9%': 1, | |
126 'build_libyuv%': 1, | |
127 'build_openmax_dl%': 1, | |
128 'build_opus%': 1, | |
129 'build_protobuf%': 1, | |
130 'build_ssl%': 1, | |
131 'build_usrsctp%': 1, | |
132 | |
133 # Disable by default | |
134 'have_dbus_glib%': 0, | |
135 | |
136 # Make it possible to provide custom locations for some libraries. | |
137 'libvpx_dir%': '<(DEPTH)/third_party/libvpx', | |
138 'libyuv_dir%': '<(DEPTH)/third_party/libyuv', | |
139 'opus_dir%': '<(opus_dir)', | |
140 | |
141 # Use Java based audio layer as default for Android. | |
142 # Change this setting to 1 to use Open SL audio instead. | |
143 # TODO(henrika): add support for Open SL ES. | |
144 'enable_android_opensl%': 0, | |
145 | |
146 # Link-Time Optimizations | |
147 # Executes code generation at link-time instead of compile-time | |
148 # https://gcc.gnu.org/wiki/LinkTimeOptimization | |
149 'use_lto%': 0, | |
150 | |
151 # Defer ssl perference to that specified through sslconfig.h instead of | |
152 # choosing openssl or nss directly. In practice, this can be used to | |
153 # enable schannel on windows. | |
154 'use_legacy_ssl_defaults%': 0, | |
155 | |
156 # Determines whether NEON code will be built. | |
157 'build_with_neon%': 0, | |
158 | |
159 # Disable this to skip building source requiring GTK. | |
160 'use_gtk%': 1, | |
161 | |
162 # Enable this to prevent extern symbols from being hidden on iOS builds. | |
163 # The chromium settings we inherit hide symbols by default on Release | |
164 # builds. We want our symbols to be visible when distributing WebRTC via | |
165 # static libraries to avoid linker warnings. | |
166 'ios_override_visibility%': 0, | |
167 | |
168 # Determines whether QUIC code will be built. | |
169 'use_quic%': 0, | |
170 | |
171 # By default, use normal platform audio support or dummy audio, but don't | |
172 # use file-based audio playout and record. | |
173 'use_dummy_audio_file_devices%': 0, | |
174 | |
175 'conditions': [ | |
176 # Enable this to build OpenH264 encoder/FFmpeg decoder. This is supported | |
177 # on all platforms except Android and iOS. Because FFmpeg can be built | |
178 # with/without H.264 support, |ffmpeg_branding| has to separately be set | |
179 # to a value that includes H.264, for example "Chrome". If FFmpeg is built | |
180 # without H.264, compilation succeeds but |H264DecoderImpl| fails to | |
181 # initialize. See also: |rtc_initialize_ffmpeg|. | |
182 # CHECK THE OPENH264, FFMPEG AND H.264 LICENSES/PATENTS BEFORE BUILDING. | |
183 # http://www.openh264.org, https://www.ffmpeg.org/ | |
184 ['proprietary_codecs==1 and OS!="android" and OS!="ios"', { | |
185 'rtc_use_h264%': 1, | |
186 }, { | |
187 'rtc_use_h264%': 0, | |
188 }], | |
189 | |
190 # FFmpeg must be initialized for |H264DecoderImpl| to work. This can be | |
191 # done by WebRTC during |H264DecoderImpl::InitDecode| or externally. | |
192 # FFmpeg must only be initialized once. Projects that initialize FFmpeg | |
193 # externally, such as Chromium, must turn this flag off so that WebRTC | |
194 # does not also initialize. | |
195 ['build_with_chromium==0', { | |
196 'rtc_initialize_ffmpeg%': 1, | |
197 }, { | |
198 'rtc_initialize_ffmpeg%': 0, | |
199 }], | |
200 | |
201 ['build_with_chromium==1', { | |
202 # Build sources requiring GTK. NOTICE: This is not present in Chrome OS | |
203 # build environments, even if available for Chromium builds. | |
204 'use_gtk%': 0, | |
205 # Exclude pulse audio on Chromium since its prerequisites don't require | |
206 # pulse audio. | |
207 'include_pulse_audio%': 0, | |
208 | |
209 # Exclude internal ADM since Chromium uses its own IO handling. | |
210 'include_internal_audio_device%': 0, | |
211 | |
212 # Remove tests for Chromium to avoid slowing down GYP generation. | |
213 'include_tests%': 0, | |
214 'restrict_webrtc_logging%': 1, | |
215 }, { # Settings for the standalone (not-in-Chromium) build. | |
216 'use_gtk%': 1, | |
217 # TODO(andrew): For now, disable the Chrome plugins, which causes a | |
218 # flood of chromium-style warnings. Investigate enabling them: | |
219 # http://code.google.com/p/webrtc/issues/detail?id=163 | |
220 'clang_use_chrome_plugins%': 0, | |
221 | |
222 'include_pulse_audio%': 1, | |
223 'include_internal_audio_device%': 1, | |
224 'include_tests%': 1, | |
225 'restrict_webrtc_logging%': 0, | |
226 }], | |
227 ['target_arch=="arm" or target_arch=="arm64" or target_arch=="mipsel"', { | |
228 'prefer_fixed_point%': 1, | |
229 }], | |
230 ['(target_arch=="arm" and arm_neon==1) or target_arch=="arm64"', { | |
231 'build_with_neon%': 1, | |
232 }], | |
233 ['OS!="ios" and (target_arch!="arm" or arm_version>=7) and target_arch!="m
ips64el"', { | |
234 'rtc_use_openmax_dl%': 1, | |
235 }, { | |
236 'rtc_use_openmax_dl%': 0, | |
237 }], | |
238 ], # conditions | |
239 }, | |
240 'target_defaults': { | |
241 'conditions': [ | |
242 ['restrict_webrtc_logging==1', { | |
243 'defines': ['WEBRTC_RESTRICT_LOGGING',], | |
244 }], | |
245 ['build_with_mozilla==1', { | |
246 'defines': [ | |
247 # Changes settings for Mozilla build. | |
248 'WEBRTC_MOZILLA_BUILD', | |
249 ], | |
250 }], | |
251 ['have_dbus_glib==1', { | |
252 'defines': [ | |
253 'HAVE_DBUS_GLIB', | |
254 ], | |
255 'cflags': [ | |
256 '<!@(pkg-config --cflags dbus-glib-1)', | |
257 ], | |
258 }], | |
259 ['rtc_relative_path==1', { | |
260 'defines': ['EXPAT_RELATIVE_PATH',], | |
261 }], | |
262 ['os_posix==1', { | |
263 'configurations': { | |
264 'Debug_Base': { | |
265 'defines': [ | |
266 # Chromium's build/common.gypi defines _DEBUG for all posix | |
267 # _except_ for ios & mac. The size of data types such as | |
268 # pthread_mutex_t varies between release and debug builds | |
269 # and is controlled via this flag. Since we now share code | |
270 # between base/base.gyp and build/common.gypi (this file), | |
271 # both gyp(i) files, must consistently set this flag uniformly | |
272 # or else we'll run in to hard-to-figure-out problems where | |
273 # one compilation unit uses code from another but expects | |
274 # differently laid out types. | |
275 # For WebRTC, we want it there as well, because ASSERT and | |
276 # friends trigger off of it. | |
277 '_DEBUG', | |
278 ], | |
279 }, | |
280 }, | |
281 }], | |
282 ['build_with_chromium==1', { | |
283 'defines': [ | |
284 # Changes settings for Chromium build. | |
285 # TODO(kjellander): Cleanup unused ones and move defines closer to the | |
286 # source when webrtc:4256 is completed. | |
287 'ENABLE_EXTERNAL_AUTH', | |
288 'FEATURE_ENABLE_SSL', | |
289 'HAVE_OPENSSL_SSL_H', | |
290 'HAVE_SCTP', | |
291 'HAVE_SRTP', | |
292 'HAVE_WEBRTC_VIDEO', | |
293 'HAVE_WEBRTC_VOICE', | |
294 'LOGGING_INSIDE_WEBRTC', | |
295 'NO_MAIN_THREAD_WRAPPING', | |
296 'NO_SOUND_SYSTEM', | |
297 'SSL_USE_OPENSSL', | |
298 'USE_WEBRTC_DEV_BRANCH', | |
299 'WEBRTC_CHROMIUM_BUILD', | |
300 ], | |
301 'include_dirs': [ | |
302 # Include the top-level directory when building in Chrome, so we can | |
303 # use full paths (e.g. headers inside testing/ or third_party/). | |
304 '<(DEPTH)', | |
305 # The overrides must be included before the WebRTC root as that's the | |
306 # mechanism for selecting the override headers in Chromium. | |
307 '../../webrtc_overrides', | |
308 # The WebRTC root is needed to allow includes in the WebRTC code base | |
309 # to be prefixed with webrtc/. | |
310 '../..', | |
311 ], | |
312 }, { | |
313 'includes': [ | |
314 # Rules for excluding e.g. foo_win.cc from the build on non-Windows. | |
315 'filename_rules.gypi', | |
316 ], | |
317 # Include the top-level dir so the WebRTC code can use full paths. | |
318 'include_dirs': [ | |
319 '../..', | |
320 ], | |
321 'conditions': [ | |
322 ['os_posix==1', { | |
323 # Enable more warnings: -Wextra is currently disabled in Chromium. | |
324 'cflags': [ | |
325 '-Wextra', | |
326 # Repeat some flags that get overridden by -Wextra. | |
327 '-Wno-unused-parameter', | |
328 '-Wno-missing-field-initializers', | |
329 '-Wno-strict-overflow', | |
330 ], | |
331 'cflags_cc': [ | |
332 '-Wnon-virtual-dtor', | |
333 # This is enabled for clang; enable for gcc as well. | |
334 '-Woverloaded-virtual', | |
335 ], | |
336 }], | |
337 ['clang==1', { | |
338 'cflags': [ | |
339 '-Wimplicit-fallthrough', | |
340 '-Wthread-safety', | |
341 '-Winconsistent-missing-override', | |
342 ], | |
343 }], | |
344 ], | |
345 }], | |
346 ['target_arch=="arm64"', { | |
347 'defines': [ | |
348 'WEBRTC_ARCH_ARM64', | |
349 'WEBRTC_HAS_NEON', | |
350 ], | |
351 }], | |
352 ['target_arch=="arm"', { | |
353 'defines': [ | |
354 'WEBRTC_ARCH_ARM', | |
355 ], | |
356 'conditions': [ | |
357 ['arm_version>=7', { | |
358 'defines': ['WEBRTC_ARCH_ARM_V7',], | |
359 'conditions': [ | |
360 ['arm_neon==1', { | |
361 'defines': ['WEBRTC_HAS_NEON',], | |
362 }], | |
363 ], | |
364 }], | |
365 ], | |
366 }], | |
367 ['target_arch=="mipsel" and mips_arch_variant!="r6"', { | |
368 'defines': [ | |
369 'MIPS32_LE', | |
370 ], | |
371 'conditions': [ | |
372 ['mips_float_abi=="hard"', { | |
373 'defines': [ | |
374 'MIPS_FPU_LE', | |
375 ], | |
376 }], | |
377 ['mips_arch_variant=="r2"', { | |
378 'defines': [ | |
379 'MIPS32_R2_LE', | |
380 ], | |
381 }], | |
382 ['mips_dsp_rev==1', { | |
383 'defines': [ | |
384 'MIPS_DSP_R1_LE', | |
385 ], | |
386 }], | |
387 ['mips_dsp_rev==2', { | |
388 'defines': [ | |
389 'MIPS_DSP_R1_LE', | |
390 'MIPS_DSP_R2_LE', | |
391 ], | |
392 }], | |
393 ], | |
394 }], | |
395 ['coverage==1 and OS=="linux"', { | |
396 'cflags': [ '-ftest-coverage', | |
397 '-fprofile-arcs' ], | |
398 'ldflags': [ '--coverage' ], | |
399 'link_settings': { 'libraries': [ '-lgcov' ] }, | |
400 }], | |
401 ['webrtc_sanitize_coverage!=""', { | |
402 'cflags': [ '-fsanitize-coverage=<(webrtc_sanitize_coverage)' ], | |
403 'ldflags': [ '-fsanitize-coverage=<(webrtc_sanitize_coverage)' ], | |
404 }], | |
405 ['webrtc_sanitize_coverage!="" and OS=="mac"', { | |
406 'xcode_settings': { | |
407 'OTHER_CFLAGS': [ | |
408 '-fsanitize-coverage=func', | |
409 ], | |
410 }, | |
411 }], | |
412 ['os_posix==1', { | |
413 # For access to standard POSIXish features, use WEBRTC_POSIX instead of | |
414 # a more specific macro. | |
415 'defines': [ | |
416 'WEBRTC_POSIX', | |
417 ], | |
418 }], | |
419 ['OS=="ios"', { | |
420 'defines': [ | |
421 'WEBRTC_MAC', | |
422 'WEBRTC_IOS', | |
423 ], | |
424 }], | |
425 ['OS=="ios" and ios_override_visibility==1', { | |
426 'xcode_settings': { | |
427 'GCC_INLINES_ARE_PRIVATE_EXTERN': 'NO', | |
428 'GCC_SYMBOLS_PRIVATE_EXTERN': 'NO', | |
429 } | |
430 }], | |
431 ['OS=="linux"', { | |
432 'defines': [ | |
433 'WEBRTC_LINUX', | |
434 ], | |
435 }], | |
436 ['OS=="mac"', { | |
437 'defines': [ | |
438 'WEBRTC_MAC', | |
439 ], | |
440 }], | |
441 ['OS=="win"', { | |
442 'defines': [ | |
443 'WEBRTC_WIN', | |
444 ], | |
445 # TODO(andrew): enable all warnings when possible. | |
446 # TODO(phoglund): get rid of 4373 supression when | |
447 # http://code.google.com/p/webrtc/issues/detail?id=261 is solved. | |
448 'msvs_disabled_warnings': [ | |
449 4373, # legacy warning for ignoring const / volatile in signatures. | |
450 4389, # Signed/unsigned mismatch. | |
451 ], | |
452 # Re-enable some warnings that Chromium disables. | |
453 'msvs_disabled_warnings!': [4189,], | |
454 }], | |
455 ['OS=="android"', { | |
456 'defines': [ | |
457 'WEBRTC_LINUX', | |
458 'WEBRTC_ANDROID', | |
459 ], | |
460 'conditions': [ | |
461 ['clang==0', { | |
462 # The Android NDK doesn't provide optimized versions of these | |
463 # functions. Ensure they are disabled for all compilers. | |
464 'cflags': [ | |
465 '-fno-builtin-cos', | |
466 '-fno-builtin-sin', | |
467 '-fno-builtin-cosf', | |
468 '-fno-builtin-sinf', | |
469 ], | |
470 }], | |
471 ], | |
472 }], | |
473 ['chromeos==1', { | |
474 'defines': [ | |
475 'CHROMEOS', | |
476 ], | |
477 }], | |
478 ['os_bsd==1', { | |
479 'defines': [ | |
480 'BSD', | |
481 ], | |
482 }], | |
483 ['OS=="openbsd"', { | |
484 'defines': [ | |
485 'OPENBSD', | |
486 ], | |
487 }], | |
488 ['OS=="freebsd"', { | |
489 'defines': [ | |
490 'FREEBSD', | |
491 ], | |
492 }], | |
493 ['include_internal_audio_device==1', { | |
494 'defines': [ | |
495 'WEBRTC_INCLUDE_INTERNAL_AUDIO_DEVICE', | |
496 ], | |
497 }], | |
498 ['libvpx_build_vp9==0', { | |
499 'defines': [ | |
500 'RTC_DISABLE_VP9', | |
501 ], | |
502 }], | |
503 ], # conditions | |
504 'direct_dependent_settings': { | |
505 'conditions': [ | |
506 ['build_with_mozilla==1', { | |
507 'defines': [ | |
508 # Changes settings for Mozilla build. | |
509 'WEBRTC_MOZILLA_BUILD', | |
510 ], | |
511 }], | |
512 ['build_with_chromium==1', { | |
513 'defines': [ | |
514 # Changes settings for Chromium build. | |
515 # TODO(kjellander): Cleanup unused ones and move defines closer to | |
516 # the source when webrtc:4256 is completed. | |
517 'FEATURE_ENABLE_SSL', | |
518 'FEATURE_ENABLE_VOICEMAIL', | |
519 'EXPAT_RELATIVE_PATH', | |
520 'GTEST_RELATIVE_PATH', | |
521 'NO_MAIN_THREAD_WRAPPING', | |
522 'NO_SOUND_SYSTEM', | |
523 'WEBRTC_CHROMIUM_BUILD', | |
524 ], | |
525 'include_dirs': [ | |
526 # The overrides must be included first as that is the mechanism for | |
527 # selecting the override headers in Chromium. | |
528 '../../webrtc_overrides', | |
529 '../..', | |
530 ], | |
531 }, { | |
532 'include_dirs': [ | |
533 '../..', | |
534 ], | |
535 }], | |
536 ['OS=="mac"', { | |
537 'defines': [ | |
538 'WEBRTC_MAC', | |
539 ], | |
540 }], | |
541 ['OS=="ios"', { | |
542 'defines': [ | |
543 'WEBRTC_MAC', | |
544 'WEBRTC_IOS', | |
545 ], | |
546 }], | |
547 ['OS=="win"', { | |
548 'defines': [ | |
549 'WEBRTC_WIN', | |
550 '_CRT_SECURE_NO_WARNINGS', # Suppress warnings about _vsnprinf | |
551 ], | |
552 }], | |
553 ['OS=="linux"', { | |
554 'defines': [ | |
555 'WEBRTC_LINUX', | |
556 ], | |
557 }], | |
558 ['OS=="android"', { | |
559 'defines': [ | |
560 'WEBRTC_LINUX', | |
561 'WEBRTC_ANDROID', | |
562 ], | |
563 }], | |
564 ['os_posix==1', { | |
565 # For access to standard POSIXish features, use WEBRTC_POSIX instead | |
566 # of a more specific macro. | |
567 'defines': [ | |
568 'WEBRTC_POSIX', | |
569 ], | |
570 }], | |
571 ['chromeos==1', { | |
572 'defines': [ | |
573 'CHROMEOS', | |
574 ], | |
575 }], | |
576 ['os_bsd==1', { | |
577 'defines': [ | |
578 'BSD', | |
579 ], | |
580 }], | |
581 ['OS=="openbsd"', { | |
582 'defines': [ | |
583 'OPENBSD', | |
584 ], | |
585 }], | |
586 ['OS=="freebsd"', { | |
587 'defines': [ | |
588 'FREEBSD', | |
589 ], | |
590 }], | |
591 ], | |
592 }, | |
593 }, # target_defaults | |
594 } | |
OLD | NEW |