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 'build_with_chromium%': '<(build_with_chromium)', 21 22 'conditions': [ 23 ['build_with_chromium==1', { 24 'build_with_libjingle': 1, 25 'webrtc_root%': '<(DEPTH)/third_party/webrtc', 26 'apk_tests_path%': '<(DEPTH)/third_party/webrtc/build/apk_tests_noop.gyp', 27 'modules_java_gyp_path%': '<(DEPTH)/third_party/webrtc/modules/modules_java_chromium.gyp', 28 'gen_core_neon_offsets_gyp%': '<(DEPTH)/third_party/webrtc/modules/audio_processing/gen_core_neon_offsets_chromium.gyp', 29 }, { 30 'build_with_libjingle%': 0, 31 'webrtc_root%': '<(DEPTH)/webrtc', 32 'apk_tests_path%': '<(DEPTH)/webrtc/build/apk_tests.gyp', 33 'modules_java_gyp_path%': '<(DEPTH)/webrtc/modules/modules_java.gyp', 34 'gen_core_neon_offsets_gyp%':'<(DEPTH)/webrtc/modules/audio_processing/gen_core_neon_offsets.gyp', 35 }], 36 ], 37 }, 38 'build_with_chromium%': '<(build_with_chromium)', 39 'build_with_libjingle%': '<(build_with_libjingle)', 40 'webrtc_root%': '<(webrtc_root)', 41 'apk_tests_path%': '<(apk_tests_path)', 42 'modules_java_gyp_path%': '<(modules_java_gyp_path)', 43 'gen_core_neon_offsets_gyp%': '<(gen_core_neon_offsets_gyp)', 44 'webrtc_vp8_dir%': '<(webrtc_root)/modules/video_coding/codecs/vp8', 45 'rbe_components_path%': '<(webrtc_root)/modules/remote_bitrate_estimator', 46 'include_opus%': 1, 47 }, 48 'build_with_chromium%': '<(build_with_chromium)', 49 'build_with_libjingle%': '<(build_with_libjingle)', 50 'webrtc_root%': '<(webrtc_root)', 51 'apk_tests_path%': '<(apk_tests_path)', 52 'modules_java_gyp_path%': '<(modules_java_gyp_path)', 53 'gen_core_neon_offsets_gyp%': '<(gen_core_neon_offsets_gyp)', 54 'webrtc_vp8_dir%': '<(webrtc_vp8_dir)', 55 'include_opus%': '<(include_opus)', 56 'rtc_relative_path%': 1, 57 'rbe_components_path%': '<(rbe_components_path)', 58 'external_libraries%': '0', 59 'json_root%': '<(DEPTH)/third_party/jsoncpp/source/include/', 60 # openssl needs to be defined or gyp will complain. Is is only used when 61 # when providing external libraries so just use current directory as a 62 # placeholder. 63 'ssl_root%': '.', 64 65 # The Chromium common.gypi we use treats all gyp files without 66 # chromium_code==1 as third party code. This disables many of the 67 # preferred warning settings. 68 # 69 # We can set this here to have WebRTC code treated as Chromium code. Our 70 # third party code will still have the reduced warning settings. 71 'chromium_code': 1, 72 73 # Set to 1 to enable code coverage on Linux using the gcov library. 74 'coverage%': 0, 75 76 # Remote bitrate estimator logging/plotting. 77 'enable_bwe_test_logging%': 0, 78 79 # Adds video support to dependencies shared by voice and video engine. 80 # This should normally be enabled; the intended use is to disable only 81 # when building voice engine exclusively. 82 'enable_video%': 1, 83 84 # Selects fixed-point code where possible. 85 'prefer_fixed_point%': 0, 86 87 # Enable data logging. Produces text files with data logged within engines 88 # which can be easily parsed for offline processing. 89 'enable_data_logging%': 0, 90 91 # Enables the use of protocol buffers for debug recordings. 92 'enable_protobuf%': 1, 93 94 # Disable these to not build components which can be externally provided. 95 'build_json%': 1, 96 'build_libjpeg%': 1, 97 'build_libyuv%': 1, 98 'build_libvpx%': 1, 99 'build_ssl%': 1, 100 101 # Disable by default 102 'have_dbus_glib%': 0, 103 104 # Enable to use the Mozilla internal settings. 105 'build_with_mozilla%': 0, 106 107 'libyuv_dir%': '<(DEPTH)/third_party/libyuv', 108 109 # Define MIPS architecture variant, MIPS DSP variant and MIPS FPU 110 # This may be subject to change in accordance to Chromium's MIPS flags 111 'mips_dsp_rev%': 0, 112 'mips_fpu%' : 1, 113 'enable_android_opensl%': 1, 114 115 # Link-Time Optimizations 116 # Executes code generation at link-time instead of compile-time 117 # https://gcc.gnu.org/wiki/LinkTimeOptimization 118 'use_lto%': 0, 119 120 # Defer ssl perference to that specified through sslconfig.h instead of 121 # choosing openssl or nss directly. In practice, this can be used to 122 # enable schannel on windows. 123 'use_legacy_ssl_defaults%': 0, 124 125 'conditions': [ 126 ['build_with_chromium==1', { 127 # Exclude pulse audio on Chromium since its prerequisites don't require 128 # pulse audio. 129 'include_pulse_audio%': 0, 130 131 # Exclude internal ADM since Chromium uses its own IO handling. 132 'include_internal_audio_device%': 0, 133 134 }, { # Settings for the standalone (not-in-Chromium) build. 135 # TODO(andrew): For now, disable the Chrome plugins, which causes a 136 # flood of chromium-style warnings. Investigate enabling them: 137 # http://code.google.com/p/webrtc/issues/detail?id=163 138 'clang_use_chrome_plugins%': 0, 139 140 'include_pulse_audio%': 1, 141 'include_internal_audio_device%': 1, 142 }], 143 ['build_with_libjingle==1', { 144 'include_tests%': 0, 145 'restrict_webrtc_logging%': 1, 146 }, { 147 'include_tests%': 1, 148 'restrict_webrtc_logging%': 0, 149 }], 150 ['OS=="ios"', { 151 'build_libjpeg%': 0, 152 'enable_protobuf%': 0, 153 }], 154 ['target_arch=="arm" or target_arch=="armv7"', { 155 'prefer_fixed_point%': 1, 156 }], 157 ], # conditions 158 }, 159 'target_defaults': { 160 'include_dirs': [ 161 # To include the top-level directory when building in Chrome, so we can 162 # use full paths (e.g. headers inside testing/ or third_party/). 163 '<(DEPTH)', 164 ], 165 'conditions': [ 166 ['restrict_webrtc_logging==1', { 167 'defines': ['WEBRTC_RESTRICT_LOGGING',], 168 }], 169 ['build_with_mozilla==1', { 170 'defines': [ 171 # Changes settings for Mozilla build. 172 'WEBRTC_MOZILLA_BUILD', 173 ], 174 }], 175 ['have_dbus_glib==1', { 176 'defines': [ 177 'HAVE_DBUS_GLIB', 178 ], 179 'cflags': [ 180 '<!@(pkg-config --cflags dbus-glib-1)', 181 ], 182 }], 183 ['rtc_relative_path==1', { 184 'defines': ['EXPAT_RELATIVE_PATH',], 185 }], 186 ['enable_video==1', { 187 'defines': ['WEBRTC_MODULE_UTILITY_VIDEO',], 188 }], 189 ['build_with_chromium==1', { 190 'defines': [ 191 # Changes settings for Chromium build. 192 'WEBRTC_CHROMIUM_BUILD', 193 'LOGGING_INSIDE_WEBRTC', 194 ], 195 'include_dirs': [ 196 # overrides must be included first as that is the mechanism for 197 # selecting the override headers in Chromium. 198 '../overrides', 199 # Allow includes to be prefixed with webrtc/ in case it is not an 200 # immediate subdirectory of <(DEPTH). 201 '../..', 202 ], 203 }, { 204 'conditions': [ 205 ['os_posix==1', { 206 'conditions': [ 207 # -Wextra is currently disabled in Chromium's common.gypi. Enable 208 # for targets that can handle it. For Android/arm64 right now 209 # there will be an 'enumeral and non-enumeral type in conditional 210 # expression' warning in android_tools/ndk_experimental's version 211 # of stlport. 212 # See: https://code.google.com/p/chromium/issues/detail?id=379699 213 ['target_arch!="arm64" or OS!="android"', { 214 'cflags': [ 215 '-Wextra', 216 # We need to repeat some flags from Chromium's common.gypi 217 # here that get overridden by -Wextra. 218 '-Wno-unused-parameter', 219 '-Wno-missing-field-initializers', 220 '-Wno-strict-overflow', 221 ], 222 }], 223 ], 224 'cflags_cc': [ 225 '-Wnon-virtual-dtor', 226 # This is enabled for clang; enable for gcc as well. 227 '-Woverloaded-virtual', 228 ], 229 }], 230 ['clang==1', { 231 'cflags': [ 232 '-Wthread-safety', 233 ], 234 }], 235 ], 236 }], 237 ['target_arch=="arm" or target_arch=="armv7"', { 238 'defines': [ 239 'WEBRTC_ARCH_ARM', 240 ], 241 'conditions': [ 242 ['arm_version==7', { 243 'defines': ['WEBRTC_ARCH_ARM_V7',], 244 'conditions': [ 245 ['arm_neon==1', { 246 'defines': ['WEBRTC_ARCH_ARM_NEON',], 247 }, { 248 'defines': ['WEBRTC_DETECT_ARM_NEON',], 249 }], 250 ], 251 }], 252 ], 253 }], 254 ['target_arch=="mipsel" and mips_arch_variant!="r6" and android_webview_build==0', { 255 'defines': [ 256 'MIPS32_LE', 257 ], 258 'conditions': [ 259 ['mips_fpu==1', { 260 'defines': [ 261 'MIPS_FPU_LE', 262 ], 263 'cflags': [ 264 '-mhard-float', 265 ], 266 }, { 267 'cflags': [ 268 '-msoft-float', 269 ], 270 }], 271 ['mips_arch_variant=="r2"', { 272 'defines': [ 273 'MIPS32_R2_LE', 274 ], 275 'cflags': [ 276 '-mips32r2', 277 ], 278 'cflags_cc': [ 279 '-mips32r2', 280 ], 281 }], 282 ['mips_dsp_rev==1', { 283 'defines': [ 284 'MIPS_DSP_R1_LE', 285 ], 286 'cflags': [ 287 '-mdsp', 288 ], 289 'cflags_cc': [ 290 '-mdsp', 291 ], 292 }], 293 ['mips_dsp_rev==2', { 294 'defines': [ 295 'MIPS_DSP_R1_LE', 296 'MIPS_DSP_R2_LE', 297 ], 298 'cflags': [ 299 '-mdspr2', 300 ], 301 'cflags_cc': [ 302 '-mdspr2', 303 ], 304 }], 305 ], 306 }], 307 ['coverage==1 and OS=="linux"', { 308 'cflags': [ '-ftest-coverage', 309 '-fprofile-arcs' ], 310 'link_settings': { 'libraries': [ '-lgcov' ] }, 311 }], 312 ['os_posix==1', { 313 # For access to standard POSIXish features, use WEBRTC_POSIX instead of 314 # a more specific macro. 315 'defines': [ 316 'WEBRTC_POSIX', 317 ], 318 }], 319 ['OS=="ios"', { 320 'defines': [ 321 'WEBRTC_MAC', 322 'WEBRTC_IOS', 323 ], 324 }], 325 ['OS=="linux"', { 326 'defines': [ 327 'WEBRTC_LINUX', 328 ], 329 }], 330 ['OS=="mac"', { 331 'defines': [ 332 'WEBRTC_MAC', 333 ], 334 }], 335 ['OS=="win"', { 336 'defines': [ 337 'WEBRTC_WIN', 338 ], 339 # TODO(andrew): enable all warnings when possible. 340 # TODO(phoglund): get rid of 4373 supression when 341 # http://code.google.com/p/webrtc/issues/detail?id=261 is solved. 342 'msvs_disabled_warnings': [ 343 4373, # legacy warning for ignoring const / volatile in signatures. 344 4389, # Signed/unsigned mismatch. 345 ], 346 # Re-enable some warnings that Chromium disables. 347 'msvs_disabled_warnings!': [4189,], 348 }], 349 ['OS=="android"', { 350 'defines': [ 351 'WEBRTC_LINUX', 352 'WEBRTC_ANDROID', 353 ], 354 'conditions': [ 355 ['enable_android_opensl==1', { 356 'defines': [ 357 'WEBRTC_ANDROID_OPENSLES', 358 ], 359 }], 360 ['clang!=1', { 361 # The Android NDK doesn't provide optimized versions of these 362 # functions. Ensure they are disabled for all compilers. 363 'cflags': [ 364 '-fno-builtin-cos', 365 '-fno-builtin-sin', 366 '-fno-builtin-cosf', 367 '-fno-builtin-sinf', 368 ], 369 }], 370 ], 371 }], 372 ], # conditions 373 'direct_dependent_settings': { 374 'conditions': [ 375 ['build_with_mozilla==1', { 376 'defines': [ 377 # Changes settings for Mozilla build. 378 'WEBRTC_MOZILLA_BUILD', 379 ], 380 }], 381 ['build_with_chromium==1', { 382 'defines': [ 383 # Changes settings for Chromium build. 384 'WEBRTC_CHROMIUM_BUILD', 385 ], 386 'include_dirs': [ 387 # overrides must be included first as that is the mechanism for 388 # selecting the override headers in Chromium. 389 '../overrides', 390 '../..', 391 ], 392 }, { 393 'include_dirs': [ 394 '../..', 395 ], 396 }], 397 ['OS=="mac"', { 398 'defines': [ 399 'WEBRTC_MAC', 400 ], 401 }], 402 ['OS=="ios"', { 403 'defines': [ 404 'WEBRTC_MAC', 405 'WEBRTC_IOS', 406 ], 407 }], 408 ['OS=="win"', { 409 'defines': [ 410 'WEBRTC_WIN', 411 ], 412 }], 413 ['OS=="linux"', { 414 'defines': [ 415 'WEBRTC_LINUX', 416 ], 417 }], 418 ['OS=="android"', { 419 'defines': [ 420 'WEBRTC_LINUX', 421 'WEBRTC_ANDROID', 422 ], 423 'conditions': [ 424 ['enable_android_opensl==1', { 425 'defines': [ 426 'WEBRTC_ANDROID_OPENSLES', 427 ], 428 }] 429 ], 430 }], 431 ['os_posix==1', { 432 # For access to standard POSIXish features, use WEBRTC_POSIX instead 433 # of a more specific macro. 434 'defines': [ 435 'WEBRTC_POSIX', 436 ], 437 }], 438 ], 439 }, 440 }, # target_defaults 441 } 442 443