1# Copyright 2010 Google Inc. All rights reserved. 2# 3# Redistribution and use in source and binary forms, with or without 4# modification, are permitted provided that the following conditions are 5# met: 6# 7# * Redistributions of source code must retain the above copyright 8# notice, this list of conditions and the following disclaimer. 9# * Redistributions in binary form must reproduce the above 10# copyright notice, this list of conditions and the following disclaimer 11# in the documentation and/or other materials provided with the 12# distribution. 13# * Neither the name of Google Inc. nor the names of its 14# contributors may be used to endorse or promote products derived from 15# this software without specific prior written permission. 16# 17# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 18# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 19# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 20# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 21# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 22# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 23# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 24# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 29# IMPORTANT: 30# Please don't directly include this file if you are building via gyp_chromium, 31# since gyp_chromium is automatically forcing its inclusion. 32{ 33 'variables': { 34 # Variables expected to be overriden on the GYP command line (-D) or by 35 # ~/.gyp/include.gypi. 36 37 # Putting a variables dict inside another variables dict looks kind of 38 # weird. This is necessary to get these variables defined for the conditions 39 # within this variables dict that operate on these variables. 40 'variables': { 41 'variables': { 42 # Compute the architecture that we're building on. 43 'conditions': [ 44 [ 'OS=="linux" or OS=="freebsd" or OS=="openbsd"', { 45 # This handles the Linux platforms we generally deal with. Anything 46 # else gets passed through, which probably won't work very well; such 47 # hosts should pass an explicit target_arch to gyp. 48 'host_arch%': 49 '<!(uname -m | sed -e "s/i.86/ia32/;s/x86_64/x64/;s/amd64/x64/;s/arm.*/arm/")', 50 }, { # OS!="linux" 51 'host_arch%': 'ia32', 52 }], 53 ], 54 }, 55 56 'host_arch%': '<(host_arch)', 57 58 # Default architecture we're building for is the architecture we're 59 # building on. 60 'target_arch%': '<(host_arch)', 61 62 # This variable tells WebCore.gyp and JavaScriptCore.gyp whether they are 63 # are built under a chromium full build (1) or a webkit.org chromium 64 # build (0). 65 'inside_chromium_build%': 1, 66 67 # Set to 1 compile with -fPIC cflag on linux. This is a must for shared 68 # libraries on linux x86-64 and arm. 69 'linux_fpic%': 0, 70 71 # Python version. 72 'python_ver%': '2.5', 73 74 # Determine ARM compilation flags. 75 'arm_version%': 7, 76 77 # Set Neon compilation flags (only meaningful if arm_version==7). 78 'arm_neon%': 1, 79 80 # The system root for cross-compiles. Default: none. 81 'sysroot%': '', 82 83 # On Linux, we build with sse2 for Chromium builds. 84 'disable_sse2%': 0, 85 }, 86 87 'target_arch%': '<(target_arch)', 88 'host_arch%': '<(host_arch)', 89 'inside_chromium_build%': '<(inside_chromium_build)', 90 'linux_fpic%': '<(linux_fpic)', 91 'python_ver%': '<(python_ver)', 92 'arm_version%': '<(arm_version)', 93 'arm_neon%': '<(arm_neon)', 94 'sysroot%': '<(sysroot)', 95 'disable_sse2%': '<(disable_sse2)', 96 97 # The release channel that this build targets. This is used to restrict 98 # channel-specific build options, like which installer packages to create. 99 # The default is 'all', which does no channel-specific filtering. 100 'channel%': 'all', 101 102 # Override chromium_mac_pch and set it to 0 to suppress the use of 103 # precompiled headers on the Mac. Prefix header injection may still be 104 # used, but prefix headers will not be precompiled. This is useful when 105 # using distcc to distribute a build to compile slaves that don't 106 # share the same compiler executable as the system driving the compilation, 107 # because precompiled headers rely on pointers into a specific compiler 108 # executable's image. Setting this to 0 is needed to use an experimental 109 # Linux-Mac cross compiler distcc farm. 110 'chromium_mac_pch%': 1, 111 112 # Mac OS X SDK and deployment target support. 113 # The SDK identifies the version of the system headers that will be used, 114 # and corresponds to the MAC_OS_X_VERSION_MAX_ALLOWED compile-time macro. 115 # "Maximum allowed" refers to the operating system version whose APIs are 116 # available in the headers. 117 # The deployment target identifies the minimum system version that the 118 # built products are expected to function on. It corresponds to the 119 # MAC_OS_X_VERSION_MIN_REQUIRED compile-time macro. 120 # To ensure these macros are available, #include <AvailabilityMacros.h>. 121 # Additional documentation on these macros is available at 122 # http://developer.apple.com/mac/library/technotes/tn2002/tn2064.html#SECTION3 123 # Chrome normally builds with the Mac OS X 10.5 SDK and sets the 124 # deployment target to 10.5. Other projects, such as O3D, may override 125 # these defaults. 126 'mac_sdk%': '10.5', 127 'mac_deployment_target%': '10.5', 128 129 # Set to 1 to enable code coverage. In addition to build changes 130 # (e.g. extra CFLAGS), also creates a new target in the src/chrome 131 # project file called "coverage". 132 # Currently ignored on Windows. 133 'coverage%': 0, 134 135 # Although base/allocator lets you select a heap library via an 136 # environment variable, the libcmt shim it uses sometimes gets in 137 # the way. To disable it entirely, and switch to normal msvcrt, do e.g. 138 # 'win_use_allocator_shim': 0, 139 # 'win_release_RuntimeLibrary': 2 140 # to ~/.gyp/include.gypi, gclient runhooks --force, and do a release build. 141 'win_use_allocator_shim%': 1, # 0 = shim allocator via libcmt; 1 = msvcrt 142 143 # Whether usage of OpenMAX is enabled. 144 'enable_openmax%': 0, 145 146 # TODO(bradnelson): eliminate this when possible. 147 # To allow local gyp files to prevent release.vsprops from being included. 148 # Yes(1) means include release.vsprops. 149 # Once all vsprops settings are migrated into gyp, this can go away. 150 'msvs_use_common_release%': 1, 151 152 # TODO(bradnelson): eliminate this when possible. 153 # To allow local gyp files to override additional linker options for msvs. 154 # Yes(1) means set use the common linker options. 155 'msvs_use_common_linker_extras%': 1, 156 157 # TODO(sgk): eliminate this if possible. 158 # It would be nicer to support this via a setting in 'target_defaults' 159 # in chrome/app/locales/locales.gypi overriding the setting in the 160 # 'Debug' configuration in the 'target_defaults' dict below, 161 # but that doesn't work as we'd like. 162 'msvs_debug_link_incremental%': '2', 163 164 # This is the location of the sandbox binary. Chrome looks for this before 165 # running the zygote process. If found, and SUID, it will be used to 166 # sandbox the zygote process and, thus, all renderer processes. 167 'linux_sandbox_path%': '', 168 169 # Set this to true to enable SELinux support. 170 'selinux%': 0, 171 172 # Strip the binary after dumping symbols. 173 'linux_strip_binary%': 0, 174 175 # Enable TCMalloc. 176 'linux_use_tcmalloc%': 1, 177 178 # Disable TCMalloc's debugallocation. 179 'linux_use_debugallocation%': 0, 180 181 # Disable TCMalloc's heapchecker. 182 'linux_use_heapchecker%': 0, 183 184 # Set to 1 to turn on seccomp sandbox by default. 185 # (Note: this is ignored for official builds.) 186 'linux_use_seccomp_sandbox%': 0, 187 188 # Set to select the Title Case versions of strings in GRD files. 189 'use_titlecase_in_grd%': 0, 190 191 # Used to disable Native Client at compile time, for platforms where it 192 # isn't supported 193 'disable_nacl%': 0, 194 195 # Set Thumb compilation flags. 196 'arm_thumb%': 0, 197 198 # Set ARM fpu compilation flags (only meaningful if arm_version==7 and 199 # arm_neon==0). 200 'arm_fpu%': 'vfpv3', 201 202 # Enable new NPDevice API. 203 'enable_new_npdevice_api%': 0, 204 205 'conditions': [ 206 # Whether to use multiple cores to compile with visual studio. This is 207 # optional because it sometimes causes corruption on VS 2005. 208 # It is on by default on VS 2008 and off on VS 2005. 209 ['OS=="win"', { 210 'conditions': [ 211 ['MSVS_VERSION=="2005"', { 212 'msvs_multi_core_compile%': 0, 213 },{ 214 'msvs_multi_core_compile%': 1, 215 }], 216 # Don't do incremental linking for large modules on 32-bit. 217 ['MSVS_OS_BITS==32', { 218 'msvs_large_module_debug_link_mode%': '1', # No 219 },{ 220 'msvs_large_module_debug_link_mode%': '2', # Yes 221 }], 222 ], 223 'nacl_win64_defines': [ 224 # This flag is used to minimize dependencies when building 225 # Native Client loader for 64-bit Windows. 226 'NACL_WIN64', 227 ], 228 }], 229 ], 230 231 # NOTE: When these end up in the Mac bundle, we need to replace '-' for '_' 232 # so Cocoa is happy (http://crbug.com/20441). 233 'locales': [ 234 'am', 'ar', 'bg', 'bn', 'ca', 'cs', 'da', 'de', 'el', 'en-GB', 235 'en-US', 'es-419', 'es', 'et', 'fi', 'fil', 'fr', 'gu', 'he', 236 'hi', 'hr', 'hu', 'id', 'it', 'ja', 'kn', 'ko', 'lt', 'lv', 237 'ml', 'mr', 'nb', 'nl', 'pl', 'pt-BR', 'pt-PT', 'ro', 'ru', 238 'sk', 'sl', 'sr', 'sv', 'sw', 'ta', 'te', 'th', 'tr', 'uk', 239 'vi', 'zh-CN', 'zh-TW', 240 ], 241 }, 242 'target_defaults': { 243 'includes': [ 244 'filename_rules.gypi', 245 ], 246 'variables': { 247 # See http://gcc.gnu.org/onlinedocs/gcc-4.4.2/gcc/Optimize-Options.html 248 'mac_release_optimization%': '3', # Use -O3 unless overridden 249 'mac_debug_optimization%': '0', # Use -O0 unless overridden 250 # See http://msdn.microsoft.com/en-us/library/aa652360(VS.71).aspx 251 'win_release_Optimization%': '2', # 2 = /Os 252 'win_debug_Optimization%': '0', # 0 = /Od 253 # See http://msdn.microsoft.com/en-us/library/aa652367(VS.71).aspx 254 'win_release_RuntimeLibrary%': '0', # 0 = /MT (nondebug static) 255 'win_debug_RuntimeLibrary%': '1', # 1 = /MTd (debug static) 256 257 'release_extra_cflags%': '', 258 'debug_extra_cflags%': '', 259 'release_valgrind_build%': 0, 260 }, 261 'conditions': [ 262 ['selinux==1', { 263 'defines': ['CHROMIUM_SELINUX=1'], 264 }], 265 ['win_use_allocator_shim==0', { 266 'conditions': [ 267 ['OS=="win"', { 268 'defines': ['NO_TCMALLOC'], 269 }], 270 ], 271 }], 272 ['coverage!=0', { 273 'conditions': [ 274 ['OS=="mac"', { 275 'xcode_settings': { 276 'GCC_INSTRUMENT_PROGRAM_FLOW_ARCS': 'YES', # -fprofile-arcs 277 'GCC_GENERATE_TEST_COVERAGE_FILES': 'YES', # -ftest-coverage 278 }, 279 # Add -lgcov for types executable, shared_library, and 280 # loadable_module; not for static_library. 281 # This is a delayed conditional. 282 'target_conditions': [ 283 ['_type!="static_library"', { 284 'xcode_settings': { 'OTHER_LDFLAGS': [ '-lgcov' ] }, 285 }], 286 ], 287 }], 288 # Linux gyp (into scons) doesn't like target_conditions? 289 # TODO(???): track down why 'target_conditions' doesn't work 290 # on Linux gyp into scons like it does on Mac gyp into xcodeproj. 291 ['OS=="linux"', { 292 'cflags': [ '-ftest-coverage', 293 '-fprofile-arcs' ], 294 'link_settings': { 'libraries': [ '-lgcov' ] }, 295 }], 296 # Finally, for Windows, we simply turn on profiling. 297 ['OS=="win"', { 298 'msvs_settings': { 299 'VCLinkerTool': { 300 'Profile': 'true', 301 }, 302 'VCCLCompilerTool': { 303 # /Z7, not /Zi, so coverage is happyb 304 'DebugInformationFormat': '1', 305 'AdditionalOptions': ['/Yd'], 306 } 307 } 308 }], # OS==win 309 ], # conditions for coverage 310 }], # coverage!=0 311 ], # conditions for 'target_defaults' 312 'target_conditions': [ 313 [ 'OS=="linux" or OS=="freebsd" or OS=="openbsd"', { 314 'cflags!': [ 315 '-Wall', 316 '-Wextra', 317 '-Werror', 318 ], 319 }], 320 [ 'OS=="win"', { 321 'defines': [ 322 '_CRT_SECURE_NO_DEPRECATE', 323 '_CRT_NONSTDC_NO_WARNINGS', 324 '_CRT_NONSTDC_NO_DEPRECATE', 325 # This is required for ATL to use XP-safe versions of its functions. 326 '_USING_V110_SDK71_', 327 ], 328 'msvs_disabled_warnings': [4800], 329 'msvs_settings': { 330 'VCCLCompilerTool': { 331 'WarnAsError': 'true', 332 'Detect64BitPortabilityProblems': 'false', 333 }, 334 }, 335 }], 336 [ 'OS=="mac"', { 337 'xcode_settings': { 338 'GCC_TREAT_WARNINGS_AS_ERRORS': 'NO', 339 'WARNING_CFLAGS!': ['-Wall'], 340 }, 341 }], 342 ], # target_conditions for 'target_defaults' 343 'default_configuration': 'Debug', 344 'configurations': { 345 # VCLinkerTool LinkIncremental values below: 346 # 0 == default 347 # 1 == /INCREMENTAL:NO 348 # 2 == /INCREMENTAL 349 # Debug links incremental, Release does not. 350 # 351 # Abstract base configurations to cover common 352 # attributes. 353 # 354 'Common_Base': { 355 'abstract': 1, 356 'msvs_configuration_attributes': { 357 'OutputDirectory': '$(SolutionDir)$(ConfigurationName)', 358 'IntermediateDirectory': '$(OutDir)\\obj\\$(ProjectName)', 359 'CharacterSet': '1', 360 }, 361 }, 362 'x86_Base': { 363 'abstract': 1, 364 'msvs_settings': { 365 'VCLinkerTool': { 366 'MinimumRequiredVersion': '5.01', # XP. 367 'TargetMachine': '1', 368 }, 369 }, 370 'msvs_configuration_platform': 'Win32', 371 }, 372 'x64_Base': { 373 'abstract': 1, 374 'msvs_configuration_platform': 'x64', 375 'msvs_settings': { 376 'VCLinkerTool': { 377 'TargetMachine': '17', # x86 - 64 378 'AdditionalLibraryDirectories!': 379 ['<(DEPTH)/third_party/platformsdk_win7/files/Lib'], 380 'AdditionalLibraryDirectories': 381 ['<(DEPTH)/third_party/platformsdk_win7/files/Lib/x64'], 382 }, 383 'VCLibrarianTool': { 384 'AdditionalLibraryDirectories!': 385 ['<(DEPTH)/third_party/platformsdk_win7/files/Lib'], 386 'AdditionalLibraryDirectories': 387 ['<(DEPTH)/third_party/platformsdk_win7/files/Lib/x64'], 388 }, 389 }, 390 'defines': [ 391 # Not sure if tcmalloc works on 64-bit Windows. 392 'NO_TCMALLOC', 393 ], 394 }, 395 'Debug_Base': { 396 'abstract': 1, 397 'xcode_settings': { 398 'COPY_PHASE_STRIP': 'NO', 399 'GCC_OPTIMIZATION_LEVEL': '<(mac_debug_optimization)', 400 'OTHER_CFLAGS': [ '<@(debug_extra_cflags)', ], 401 }, 402 'msvs_settings': { 403 'VCCLCompilerTool': { 404 'Optimization': '<(win_debug_Optimization)', 405 'PreprocessorDefinitions': ['_DEBUG'], 406 'BasicRuntimeChecks': '3', 407 'RuntimeLibrary': '<(win_debug_RuntimeLibrary)', 408 }, 409 'VCLinkerTool': { 410 'LinkIncremental': '<(msvs_debug_link_incremental)', 411 }, 412 'VCResourceCompilerTool': { 413 'PreprocessorDefinitions': ['_DEBUG'], 414 }, 415 }, 416 'conditions': [ 417 ['OS=="linux"', { 418 'cflags': [ 419 '<@(debug_extra_cflags)', 420 ], 421 }], 422 ], 423 }, 424 'Release_Base': { 425 'abstract': 1, 426 'defines': [ 427 'NDEBUG', 428 ], 429 'xcode_settings': { 430 'DEAD_CODE_STRIPPING': 'YES', # -Wl,-dead_strip 431 'GCC_OPTIMIZATION_LEVEL': '<(mac_release_optimization)', 432 'OTHER_CFLAGS': [ '<@(release_extra_cflags)', ], 433 }, 434 'msvs_settings': { 435 'VCCLCompilerTool': { 436 'Optimization': '<(win_release_Optimization)', 437 'RuntimeLibrary': '<(win_release_RuntimeLibrary)', 438 }, 439 'VCLinkerTool': { 440 'LinkIncremental': '1', 441 }, 442 }, 443 'conditions': [ 444 ['release_valgrind_build==0', { 445 'defines': ['NVALGRIND'], 446 }], 447 ['win_use_allocator_shim==0', { 448 'defines': ['NO_TCMALLOC'], 449 }], 450 ['win_release_RuntimeLibrary==2', { 451 # Visual C++ 2008 barfs when building anything with /MD (msvcrt): 452 # VC\include\typeinfo(139) : warning C4275: non dll-interface 453 # class 'stdext::exception' used as base for dll-interface 454 # class 'std::bad_cast' 455 'msvs_disabled_warnings': [4275], 456 }], 457 ['OS=="linux"', { 458 'cflags': [ 459 '<@(release_extra_cflags)', 460 ], 461 }], 462 ], 463 }, 464 'Purify_Base': { 465 'abstract': 1, 466 'defines': [ 467 'PURIFY', 468 'NO_TCMALLOC', 469 ], 470 'msvs_settings': { 471 'VCCLCompilerTool': { 472 'Optimization': '0', 473 'RuntimeLibrary': '0', 474 'BufferSecurityCheck': 'false', 475 }, 476 'VCLinkerTool': { 477 'EnableCOMDATFolding': '1', 478 'LinkIncremental': '1', 479 }, 480 }, 481 }, 482 # 483 # Concrete configurations 484 # 485 'Debug': { 486 'inherit_from': ['Common_Base', 'x86_Base', 'Debug_Base'], 487 }, 488 'Release': { 489 'inherit_from': ['Common_Base', 'x86_Base', 'Release_Base'], 490 'conditions': [ 491 ['msvs_use_common_release', { 492 'defines': ['OFFICIAL_BUILD'], 493 'msvs_settings': { 494 'VCCLCompilerTool': { 495 'Optimization': '3', 496 'StringPooling': 'true', 497 'OmitFramePointers': 'true', 498 'InlineFunctionExpansion': '2', 499 'EnableIntrinsicFunctions': 'true', 500 'FavorSizeOrSpeed': '2', 501 'OmitFramePointers': 'true', 502 'EnableFiberSafeOptimizations': 'true', 503 'WholeProgramOptimization': 'true', 504 }, 505 'VCLibrarianTool': { 506 'AdditionalOptions': ['/ltcg', '/expectedoutputsize:120000000'], 507 }, 508 'VCLinkerTool': { 509 'LinkIncremental': '1', 510 'OptimizeReferences': '2', 511 'EnableCOMDATFolding': '2', 512 'OptimizeForWindows98': '1', 513 'LinkTimeCodeGeneration': '1', 514 }, 515 }, 516 }], 517 ] 518 }, 519 'conditions': [ 520 [ 'OS=="win"', { 521 # TODO(bradnelson): add a gyp mechanism to make this more graceful. 522 'Purify': { 523 'inherit_from': ['Common_Base', 'x86_Base', 'Release_Base', 'Purify'], 524 }, 525 'Debug_x64': { 526 'inherit_from': ['Common_Base', 'x64_Base', 'Debug_Base'], 527 }, 528 'Release_x64': { 529 'inherit_from': ['Common_Base', 'x64_Base', 'Release_Base'], 530 }, 531 'Purify_x64': { 532 'inherit_from': ['Common_Base', 'x64_Base', 'Release_Base', 'Purify_Base'], 533 }, 534 }], 535 ], 536 }, 537 }, 538 'conditions': [ 539 ['OS=="linux" or OS=="freebsd" or OS=="openbsd" or OS=="solaris"', { 540 'target_defaults': { 541 # Enable -Werror by default, but put it in a variable so it can 542 # be disabled in ~/.gyp/include.gypi on the valgrind builders. 543 'variables': { 544 # Use -fno-strict-aliasing by default since gcc 4.4 has periodic 545 # issues that slip through the cracks. We could do this just for 546 # gcc 4.4 but it makes more sense to be consistent on all 547 # compilers in use. TODO(Craig): turn this off again when 548 # there is some 4.4 test infrastructure in place and existing 549 # aliasing issues have been fixed. 550 'no_strict_aliasing%': 1, 551 'conditions': [['OS=="linux"', {'werror%': '-Werror',}], 552 ['OS=="freebsd"', {'werror%': '',}], 553 ['OS=="openbsd"', {'werror%': '',}], 554 ], 555 }, 556 'cflags': [ 557 '<(werror)', # See note above about the werror variable. 558 '-pthread', 559 '-fno-exceptions', 560 '-Wall', 561 # TODO(evan): turn this back on once all the builds work. 562 # '-Wextra', 563 # Don't warn about unused function params. We use those everywhere. 564 '-Wno-unused-parameter', 565 # Don't warn about the "struct foo f = {0};" initialization pattern. 566 '-Wno-missing-field-initializers', 567 '-D_FILE_OFFSET_BITS=64', 568 # Don't export any symbols (for example, to plugins we dlopen()). 569 # Note: this is *required* to make some plugins work. 570 '-fvisibility=hidden', 571 ], 572 'cflags_cc': [ 573 '-frtti', 574 '-fno-threadsafe-statics', 575 # Make inline functions have hidden visiblity by default. 576 # Surprisingly, not covered by -fvisibility=hidden. 577 '-fvisibility-inlines-hidden', 578 ], 579 'ldflags': [ 580 '-pthread', '-Wl,-z,noexecstack', 581 ], 582 'scons_variable_settings': { 583 'LIBPATH': ['$LIB_DIR'], 584 # Linking of large files uses lots of RAM, so serialize links 585 # using the handy flock command from util-linux. 586 'FLOCK_LINK': ['flock', '$TOP_BUILDDIR/linker.lock', '$LINK'], 587 'FLOCK_SHLINK': ['flock', '$TOP_BUILDDIR/linker.lock', '$SHLINK'], 588 'FLOCK_LDMODULE': ['flock', '$TOP_BUILDDIR/linker.lock', '$LDMODULE'], 589 590 # We have several cases where archives depend on each other in 591 # a cyclic fashion. Since the GNU linker does only a single 592 # pass over the archives we surround the libraries with 593 # --start-group and --end-group (aka -( and -) ). That causes 594 # ld to loop over the group until no more undefined symbols 595 # are found. In an ideal world we would only make groups from 596 # those libraries which we knew to be in cycles. However, 597 # that's tough with SCons, so we bodge it by making all the 598 # archives a group by redefining the linking command here. 599 # 600 # TODO: investigate whether we still have cycles that 601 # require --{start,end}-group. There has been a lot of 602 # refactoring since this was first coded, which might have 603 # eliminated the circular dependencies. 604 # 605 # Note: $_LIBDIRFLAGS comes before ${LINK,SHLINK,LDMODULE}FLAGS 606 # so that we prefer our own built libraries (e.g. -lpng) to 607 # system versions of libraries that pkg-config might turn up. 608 # TODO(sgk): investigate handling this not by re-ordering the 609 # flags this way, but by adding a hook to use the SCons 610 # ParseFlags() option on the output from pkg-config. 611 'LINKCOM': [['$FLOCK_LINK', '-o', '$TARGET', 612 '$_LIBDIRFLAGS', '$LINKFLAGS', '$SOURCES', 613 '-Wl,--start-group', '$_LIBFLAGS', '-Wl,--end-group']], 614 'SHLINKCOM': [['$FLOCK_SHLINK', '-o', '$TARGET', 615 '$_LIBDIRFLAGS', '$SHLINKFLAGS', '$SOURCES', 616 '-Wl,--start-group', '$_LIBFLAGS', '-Wl,--end-group']], 617 'LDMODULECOM': [['$FLOCK_LDMODULE', '-o', '$TARGET', 618 '$_LIBDIRFLAGS', '$LDMODULEFLAGS', '$SOURCES', 619 '-Wl,--start-group', '$_LIBFLAGS', '-Wl,--end-group']], 620 'IMPLICIT_COMMAND_DEPENDENCIES': 0, 621 }, 622 'scons_import_variables': [ 623 'AS', 624 'CC', 625 'CXX', 626 'LINK', 627 ], 628 'scons_propagate_variables': [ 629 'AS', 630 'CC', 631 'CCACHE_DIR', 632 'CXX', 633 'DISTCC_DIR', 634 'DISTCC_HOSTS', 635 'HOME', 636 'INCLUDE_SERVER_ARGS', 637 'INCLUDE_SERVER_PORT', 638 'LINK', 639 'CHROME_BUILD_TYPE', 640 'CHROMIUM_BUILD', 641 'OFFICIAL_BUILD', 642 ], 643 'configurations': { 644 'Debug_Base': { 645 'variables': { 646 'debug_optimize%': '0', 647 }, 648 'defines': [ 649 '_DEBUG', 650 ], 651 'cflags': [ 652 '-O>(debug_optimize)', 653 '-g', 654 # One can use '-gstabs' to enable building the debugging 655 # information in STABS format for breakpad's dumpsyms. 656 ], 657 'ldflags': [ 658 '-rdynamic', # Allows backtrace to resolve symbols. 659 ], 660 }, 661 'Release_Base': { 662 'variables': { 663 'release_optimize%': '2', 664 }, 665 'cflags': [ 666 '-O>(release_optimize)', 667 # Don't emit the GCC version ident directives, they just end up 668 # in the .comment section taking up binary size. 669 '-fno-ident', 670 # Put data and code in their own sections, so that unused symbols 671 # can be removed at link time with --gc-sections. 672 '-fdata-sections', 673 '-ffunction-sections', 674 ], 675 'ldflags': [ 676 '-Wl,--gc-sections', 677 ], 678 }, 679 }, 680 'variants': { 681 'coverage': { 682 'cflags': ['-fprofile-arcs', '-ftest-coverage'], 683 'ldflags': ['-fprofile-arcs'], 684 }, 685 'profile': { 686 'cflags': ['-pg', '-g'], 687 'ldflags': ['-pg'], 688 }, 689 'symbols': { 690 'cflags': ['-g'], 691 }, 692 }, 693 'conditions': [ 694 [ 'target_arch=="ia32"', { 695 'asflags': [ 696 # Needed so that libs with .s files (e.g. libicudata.a) 697 # are compatible with the general 32-bit-ness. 698 '-32', 699 ], 700 # All floating-point computations on x87 happens in 80-bit 701 # precision. Because the C and C++ language standards allow 702 # the compiler to keep the floating-point values in higher 703 # precision than what's specified in the source and doing so 704 # is more efficient than constantly rounding up to 64-bit or 705 # 32-bit precision as specified in the source, the compiler, 706 # especially in the optimized mode, tries very hard to keep 707 # values in x87 floating-point stack (in 80-bit precision) 708 # as long as possible. This has important side effects, that 709 # the real value used in computation may change depending on 710 # how the compiler did the optimization - that is, the value 711 # kept in 80-bit is different than the value rounded down to 712 # 64-bit or 32-bit. There are possible compiler options to make 713 # this behavior consistent (e.g. -ffloat-store would keep all 714 # floating-values in the memory, thus force them to be rounded 715 # to its original precision) but they have significant runtime 716 # performance penalty. 717 # 718 # -mfpmath=sse -msse2 makes the compiler use SSE instructions 719 # which keep floating-point values in SSE registers in its 720 # native precision (32-bit for single precision, and 64-bit for 721 # double precision values). This means the floating-point value 722 # used during computation does not change depending on how the 723 # compiler optimized the code, since the value is always kept 724 # in its specified precision. 725 'conditions': [ 726 ['disable_sse2==0', { 727 'cflags': [ 728 '-march=pentium4', 729 '-msse2', 730 '-mfpmath=sse', 731 ], 732 }], 733 ], 734 # -mmmx allows mmintrin.h to be used for mmx intrinsics. 735 # video playback is mmx and sse2 optimized. 736 'cflags': [ 737 '-m32', 738 '-mmmx', 739 ], 740 'ldflags': [ 741 '-m32', 742 ], 743 }], 744 ['target_arch=="arm"', { 745 'target_conditions': [ 746 ['_toolset=="target"', { 747 'cflags_cc': [ 748 # The codesourcery arm-2009q3 toolchain warns at that the ABI 749 # has changed whenever it encounters a varargs function. This 750 # silences those warnings, as they are not helpful and 751 # clutter legitimate warnings. 752 '-Wno-abi', 753 ], 754 'conditions': [ 755 ['arm_thumb == 1', { 756 'cflags': [ 757 '-mthumb', 758 # TODO(piman): -Wa,-mimplicit-it=thumb is needed for 759 # inline assembly that uses condition codes but it's 760 # suboptimal. Better would be to #ifdef __thumb__ at the 761 # right place and have a separate thumb path. 762 '-Wa,-mimplicit-it=thumb', 763 ] 764 }], 765 ['arm_version==7', { 766 'cflags': [ 767 '-march=armv7-a', 768 '-mtune=cortex-a8', 769 '-mfloat-abi=softfp', 770 ], 771 'conditions': [ 772 ['arm_neon==1', { 773 'cflags': [ '-mfpu=neon', ], 774 }, { 775 'cflags': [ '-mfpu=<(arm_fpu)', ], 776 }] 777 ], 778 }], 779 ], 780 }], 781 ], 782 }], 783 ['linux_fpic==1', { 784 'cflags': [ 785 '-fPIC', 786 ], 787 }], 788 ['sysroot!=""', { 789 'target_conditions': [ 790 ['_toolset=="target"', { 791 'cflags': [ 792 '--sysroot=<(sysroot)', 793 ], 794 'ldflags': [ 795 '--sysroot=<(sysroot)', 796 ], 797 }]] 798 }], 799 ['no_strict_aliasing==1', { 800 'cflags': [ 801 '-fno-strict-aliasing', 802 ], 803 }], 804 ['linux_use_heapchecker==1', { 805 'variables': {'linux_use_tcmalloc%': 1}, 806 }], 807 ['linux_use_tcmalloc==0', { 808 'defines': ['NO_TCMALLOC'], 809 }], 810 ['linux_use_heapchecker==0', { 811 'defines': ['NO_HEAPCHECKER'], 812 }], 813 ], 814 }, 815 }], 816 # FreeBSD-specific options; note that most FreeBSD options are set above, 817 # with Linux. 818 ['OS=="freebsd"', { 819 'target_defaults': { 820 'ldflags': [ 821 '-Wl,--no-keep-memory', 822 ], 823 }, 824 }], 825 ['OS=="solaris"', { 826 'cflags!': ['-fvisibility=hidden'], 827 'cflags_cc!': ['-fvisibility-inlines-hidden'], 828 }], 829 ['OS=="mac"', { 830 'target_defaults': { 831 'variables': { 832 # This should be 'mac_real_dsym%', but there seems to be a bug 833 # with % in variables that are intended to be set to different 834 # values in different targets, like this one. 835 'mac_real_dsym': 0, # Fake .dSYMs are fine in most cases. 836 }, 837 'mac_bundle': 0, 838 'xcode_settings': { 839 'ALWAYS_SEARCH_USER_PATHS': 'NO', 840 'GCC_C_LANGUAGE_STANDARD': 'c99', # -std=c99 841 'GCC_CW_ASM_SYNTAX': 'NO', # No -fasm-blocks 842 'GCC_DYNAMIC_NO_PIC': 'NO', # No -mdynamic-no-pic 843 # (Equivalent to -fPIC) 844 'GCC_ENABLE_CPP_EXCEPTIONS': 'NO', # -fno-exceptions 845 'GCC_ENABLE_CPP_RTTI': 'YES', # -frtti 846 'GCC_ENABLE_PASCAL_STRINGS': 'NO', # No -mpascal-strings 847 # GCC_INLINES_ARE_PRIVATE_EXTERN maps to -fvisibility-inlines-hidden 848 'GCC_INLINES_ARE_PRIVATE_EXTERN': 'YES', 849 'GCC_OBJC_CALL_CXX_CDTORS': 'YES', # -fobjc-call-cxx-cdtors 850 'GCC_SYMBOLS_PRIVATE_EXTERN': 'YES', # -fvisibility=hidden 851 'GCC_THREADSAFE_STATICS': 'NO', # -fno-threadsafe-statics 852 'GCC_TREAT_WARNINGS_AS_ERRORS': 'YES', # -Werror 853 'GCC_VERSION': '4.2', 854 'GCC_WARN_ABOUT_MISSING_NEWLINE': 'YES', # -Wnewline-eof 855 # MACOSX_DEPLOYMENT_TARGET maps to -mmacosx-version-min 856 'MACOSX_DEPLOYMENT_TARGET': '<(mac_deployment_target)', 857 'PREBINDING': 'NO', # No -Wl,-prebind 858 'USE_HEADERMAP': 'NO', 859 'WARNING_CFLAGS': ['-Wall', '-Wendif-labels'], 860 'conditions': [ 861 ['chromium_mac_pch', {'GCC_PRECOMPILE_PREFIX_HEADER': 'YES'}, 862 {'GCC_PRECOMPILE_PREFIX_HEADER': 'NO'} 863 ], 864 ], 865 }, 866 'target_conditions': [ 867 ['_type!="static_library"', { 868 'xcode_settings': {'OTHER_LDFLAGS': ['-Wl,-search_paths_first']}, 869 }], 870 ['_mac_bundle', { 871 'xcode_settings': {'OTHER_LDFLAGS': ['-Wl,-ObjC']}, 872 }], 873 ], # target_conditions 874 }, # target_defaults 875 }], # OS=="mac" 876 ['OS=="win"', { 877 'target_defaults': { 878 'defines': [ 879 '_WIN32_WINNT=0x0600', 880 'WINVER=0x0600', 881 'WIN32', 882 '_WINDOWS', 883 '_HAS_EXCEPTIONS=0', 884 'NOMINMAX', 885 '_CRT_RAND_S', 886 'CERT_CHAIN_PARA_HAS_EXTRA_FIELDS', 887 'WIN32_LEAN_AND_MEAN', 888 '_SECURE_ATL', 889 '_HAS_TR1=0', 890 ], 891 'msvs_system_include_dirs': [ 892 '<(DEPTH)/third_party/platformsdk_win7/files/Include', 893 '$(VSInstallDir)/VC/atlmfc/include', 894 ], 895 'msvs_cygwin_dirs': ['<(DEPTH)/third_party/cygwin'], 896 'msvs_disabled_warnings': [ 897 4100, 4127, 4396, 4503, 4512, 4819, 4995, 4702 898 ], 899 'msvs_settings': { 900 'VCCLCompilerTool': { 901 'MinimalRebuild': 'false', 902 'ExceptionHandling': '0', 903 'BufferSecurityCheck': 'true', 904 'EnableFunctionLevelLinking': 'true', 905 'RuntimeTypeInfo': 'false', 906 'WarningLevel': '4', 907 'WarnAsError': 'true', 908 'DebugInformationFormat': '3', 909 'conditions': [ 910 [ 'msvs_multi_core_compile', { 911 'AdditionalOptions': ['/MP'], 912 }], 913 ], 914 }, 915 'VCLibrarianTool': { 916 'AdditionalOptions': ['/ignore:4221'], 917 'AdditionalLibraryDirectories': 918 ['<(DEPTH)/third_party/platformsdk_win7/files/Lib'], 919 }, 920 'VCLinkerTool': { 921 'AdditionalDependencies': [ 922 'wininet.lib', 923 'version.lib', 924 'msimg32.lib', 925 'ws2_32.lib', 926 'usp10.lib', 927 'psapi.lib', 928 'dbghelp.lib', 929 ], 930 'AdditionalLibraryDirectories': 931 ['<(DEPTH)/third_party/platformsdk_win7/files/Lib'], 932 'GenerateDebugInformation': 'true', 933 'MapFileName': '$(OutDir)\\$(TargetName).map', 934 'ImportLibrary': '$(OutDir)\\lib\\$(TargetName).lib', 935 'FixedBaseAddress': '1', 936 # SubSystem values: 937 # 0 == not set 938 # 1 == /SUBSYSTEM:CONSOLE 939 # 2 == /SUBSYSTEM:WINDOWS 940 # Most of the executables we'll ever create are tests 941 # and utilities with console output. 942 'SubSystem': '1', 943 }, 944 'VCMIDLTool': { 945 'GenerateStublessProxies': 'true', 946 'TypeLibraryName': '$(InputName).tlb', 947 'OutputDirectory': '$(IntDir)', 948 'HeaderFileName': '$(InputName).h', 949 'DLLDataFileName': 'dlldata.c', 950 'InterfaceIdentifierFileName': '$(InputName)_i.c', 951 'ProxyFileName': '$(InputName)_p.c', 952 }, 953 'VCResourceCompilerTool': { 954 'Culture' : '1033', 955 'AdditionalIncludeDirectories': ['<(DEPTH)'], 956 }, 957 }, 958 }, 959 }], 960 ['disable_nacl==1 or OS=="freebsd" or OS=="openbsd" or OS=="solaris"', { 961 'target_defaults': { 962 'defines': [ 963 'DISABLE_NACL', 964 ], 965 }, 966 }], 967 ['OS=="win" and msvs_use_common_linker_extras', { 968 'target_defaults': { 969 'msvs_settings': { 970 'VCLinkerTool': { 971 'DelayLoadDLLs': [ 972 'dbghelp.dll', 973 'dwmapi.dll', 974 'uxtheme.dll', 975 ], 976 }, 977 }, 978 'configurations': { 979 'x86_Base': { 980 'msvs_settings': { 981 'VCLinkerTool': { 982 'AdditionalOptions': [ 983 '/safeseh', 984 '/dynamicbase', 985 '/ignore:4199', 986 '/ignore:4221', 987 '/nxcompat', 988 ], 989 }, 990 }, 991 }, 992 'x64_Base': { 993 'msvs_settings': { 994 'VCLinkerTool': { 995 'AdditionalOptions': [ 996 # safeseh is not compatible with x64 997 '/dynamicbase', 998 '/ignore:4199', 999 '/ignore:4221', 1000 '/nxcompat', 1001 ], 1002 }, 1003 }, 1004 }, 1005 }, 1006 }, 1007 }], 1008 ['enable_new_npdevice_api==1', { 1009 'target_defaults': { 1010 'defines': [ 1011 'ENABLE_NEW_NPDEVICE_API', 1012 ], 1013 }, 1014 }], 1015 ], 1016 'scons_settings': { 1017 'sconsbuild_dir': '<(DEPTH)/sconsbuild', 1018 'tools': ['ar', 'as', 'gcc', 'g++', 'gnulink', 'chromium_builders'], 1019 }, 1020 'xcode_settings': { 1021 # DON'T ADD ANYTHING NEW TO THIS BLOCK UNLESS YOU REALLY REALLY NEED IT! 1022 # This block adds *project-wide* configuration settings to each project 1023 # file. It's almost always wrong to put things here. Specify your 1024 # custom xcode_settings in target_defaults to add them to targets instead. 1025 1026 # In an Xcode Project Info window, the "Base SDK for All Configurations" 1027 # setting sets the SDK on a project-wide basis. In order to get the 1028 # configured SDK to show properly in the Xcode UI, SDKROOT must be set 1029 # here at the project level. 1030 'SDKROOT': 'macosx<(mac_sdk)', # -isysroot 1031 1032 # The Xcode generator will look for an xcode_settings section at the root 1033 # of each dict and use it to apply settings on a file-wide basis. Most 1034 # settings should not be here, they should be in target-specific 1035 # xcode_settings sections, or better yet, should use non-Xcode-specific 1036 # settings in target dicts. SYMROOT is a special case, because many other 1037 # Xcode variables depend on it, including variables such as 1038 # PROJECT_DERIVED_FILE_DIR. When a source group corresponding to something 1039 # like PROJECT_DERIVED_FILE_DIR is added to a project, in order for the 1040 # files to appear (when present) in the UI as actual files and not red 1041 # red "missing file" proxies, the correct path to PROJECT_DERIVED_FILE_DIR, 1042 # and therefore SYMROOT, needs to be set at the project level. 1043 'SYMROOT': '<(DEPTH)/xcodebuild', 1044 }, 1045} 1046