1 # Copyright 2013 the V8 project authors. All rights reserved. 2 # Redistribution and use in source and binary forms, with or without 3 # modification, are permitted provided that the following conditions are 4 # met: 5 # 6 # * Redistributions of source code must retain the above copyright 7 # notice, this list of conditions and the following disclaimer. 8 # * Redistributions in binary form must reproduce the above 9 # copyright notice, this list of conditions and the following 10 # disclaimer in the documentation and/or other materials provided 11 # with the distribution. 12 # * Neither the name of Google Inc. nor the names of its 13 # contributors may be used to endorse or promote products derived 14 # from this software without specific prior written permission. 15 # 16 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 17 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 18 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 19 # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 20 # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 21 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 22 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 26 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 28 # Shared definitions for all V8-related targets. 29 30 { 31 'variables': { 32 'msvs_use_common_release': 0, 33 'gcc_version%': 'unknown', 34 'CXX%': '${CXX:-$(which g++)}', # Used to assemble a shell command. 35 'v8_target_arch%': '<(target_arch)', 36 # Native Client builds currently use the V8 ARM JIT and 37 # arm/simulator-arm.cc to defer the significant effort required 38 # for NaCl JIT support. The nacl_target_arch variable provides 39 # the 'true' target arch for places in this file that need it. 40 # TODO(bradchen): get rid of nacl_target_arch when someday 41 # NaCl V8 builds stop using the ARM simulator 42 'nacl_target_arch%': 'none', # must be set externally 43 44 # Setting 'v8_can_use_vfp32dregs' to 'true' will cause V8 to use the VFP 45 # registers d16-d31 in the generated code, both in the snapshot and for the 46 # ARM target. Leaving the default value of 'false' will avoid the use of 47 # these registers in the snapshot and use CPU feature probing when running 48 # on the target. 49 'v8_can_use_vfp32dregs%': 'false', 50 'arm_test%': 'off', 51 52 # Similar to vfp but on MIPS. 53 'v8_can_use_fpu_instructions%': 'true', 54 55 # Similar to the ARM hard float ABI but on MIPS. 56 'v8_use_mips_abi_hardfloat%': 'true', 57 58 # Default arch variant for MIPS. 59 'mips_arch_variant%': 'mips32r2', 60 61 'v8_enable_backtrace%': 0, 62 63 # Enable profiling support. Only required on Windows. 64 'v8_enable_prof%': 0, 65 66 # Some versions of GCC 4.5 seem to need -fno-strict-aliasing. 67 'v8_no_strict_aliasing%': 0, 68 69 # Chrome needs this definition unconditionally. For standalone V8 builds, 70 # it's handled in build/standalone.gypi. 71 'want_separate_host_toolset%': 1, 72 73 'host_os%': '<(OS)', 74 'werror%': '-Werror', 75 # For a shared library build, results in "libv8-<(soname_version).so". 76 'soname_version%': '', 77 78 # Allow to suppress the array bounds warning (default is no suppression). 79 'wno_array_bounds%': '', 80 }, 81 'target_defaults': { 82 'conditions': [ 83 ['v8_target_arch=="arm"', { 84 'defines': [ 85 'V8_TARGET_ARCH_ARM', 86 ], 87 'target_conditions': [ 88 ['_toolset=="host"', { 89 'variables': { 90 'armcompiler': '<!($(echo ${CXX_host:-$(which g++)}) -v 2>&1 | grep -q "^Target: arm" && echo "yes" || echo "no")', 91 }, 92 'conditions': [ 93 ['armcompiler=="yes"', { 94 'conditions': [ 95 [ 'armv7==1', { 96 'cflags': ['-march=armv7-a',], 97 }], 98 [ 'armv7==1 or armv7=="default"', { 99 'conditions': [ 100 [ 'arm_neon==1', { 101 'cflags': ['-mfpu=neon',], 102 }, 103 { 104 'conditions': [ 105 [ 'arm_fpu!="default"', { 106 'cflags': ['-mfpu=<(arm_fpu)',], 107 }], 108 ], 109 }], 110 ], 111 }], 112 [ 'arm_float_abi!="default"', { 113 'cflags': ['-mfloat-abi=<(arm_float_abi)',], 114 }], 115 [ 'arm_thumb==1', { 116 'cflags': ['-mthumb',], 117 }], 118 [ 'arm_thumb==0', { 119 'cflags': ['-marm',], 120 }], 121 [ 'arm_test=="on"', { 122 'defines': [ 123 'ARM_TEST', 124 ], 125 }], 126 ], 127 }, { 128 # armcompiler=="no" 129 'conditions': [ 130 [ 'armv7==1 or armv7=="default"', { 131 'defines': [ 132 'CAN_USE_ARMV7_INSTRUCTIONS=1', 133 ], 134 'conditions': [ 135 [ 'arm_fpu=="default"', { 136 'defines': [ 137 'CAN_USE_VFP3_INSTRUCTIONS', 138 ], 139 }], 140 [ 'arm_fpu=="vfpv3-d16"', { 141 'defines': [ 142 'CAN_USE_VFP3_INSTRUCTIONS', 143 ], 144 }], 145 [ 'arm_fpu=="vfpv3"', { 146 'defines': [ 147 'CAN_USE_VFP3_INSTRUCTIONS', 148 'CAN_USE_VFP32DREGS', 149 ], 150 }], 151 [ 'arm_fpu=="neon" or arm_neon==1', { 152 'defines': [ 153 'CAN_USE_VFP3_INSTRUCTIONS', 154 'CAN_USE_VFP32DREGS', 155 ], 156 }], 157 ], 158 }], 159 [ 'arm_float_abi=="hard"', { 160 'defines': [ 161 'USE_EABI_HARDFLOAT=1', 162 ], 163 }], 164 [ 'arm_float_abi=="softfp" or arm_float_abi=="default"', { 165 'defines': [ 166 'USE_EABI_HARDFLOAT=0', 167 ], 168 }], 169 ], 170 'defines': [ 171 'ARM_TEST', 172 ], 173 }], 174 ], 175 }], # _toolset=="host" 176 ['_toolset=="target"', { 177 'variables': { 178 'armcompiler': '<!($(echo ${CXX_target:-<(CXX)}) -v 2>&1 | grep -q "^Target: arm" && echo "yes" || echo "no")', 179 }, 180 'conditions': [ 181 ['armcompiler=="yes"', { 182 'conditions': [ 183 [ 'armv7==1', { 184 'cflags': ['-march=armv7-a',], 185 }], 186 [ 'armv7==1 or armv7=="default"', { 187 'conditions': [ 188 [ 'arm_neon==1', { 189 'cflags': ['-mfpu=neon',], 190 }, 191 { 192 'conditions': [ 193 [ 'arm_fpu!="default"', { 194 'cflags': ['-mfpu=<(arm_fpu)',], 195 }], 196 ], 197 }], 198 ], 199 }], 200 [ 'arm_float_abi!="default"', { 201 'cflags': ['-mfloat-abi=<(arm_float_abi)',], 202 }], 203 [ 'arm_thumb==1', { 204 'cflags': ['-mthumb',], 205 }], 206 [ 'arm_thumb==0', { 207 'cflags': ['-marm',], 208 }], 209 [ 'arm_test=="on"', { 210 'defines': [ 211 'ARM_TEST', 212 ], 213 }], 214 ], 215 }, { 216 # armcompiler=="no" 217 'conditions': [ 218 [ 'armv7==1 or armv7=="default"', { 219 'defines': [ 220 'CAN_USE_ARMV7_INSTRUCTIONS=1', 221 ], 222 'conditions': [ 223 [ 'arm_fpu=="default"', { 224 'defines': [ 225 'CAN_USE_VFP3_INSTRUCTIONS', 226 ], 227 }], 228 [ 'arm_fpu=="vfpv3-d16"', { 229 'defines': [ 230 'CAN_USE_VFP3_INSTRUCTIONS', 231 ], 232 }], 233 [ 'arm_fpu=="vfpv3"', { 234 'defines': [ 235 'CAN_USE_VFP3_INSTRUCTIONS', 236 'CAN_USE_VFP32DREGS', 237 ], 238 }], 239 [ 'arm_fpu=="neon" or arm_neon==1', { 240 'defines': [ 241 'CAN_USE_VFP3_INSTRUCTIONS', 242 'CAN_USE_VFP32DREGS', 243 ], 244 }], 245 ], 246 }], 247 [ 'arm_float_abi=="hard"', { 248 'defines': [ 249 'USE_EABI_HARDFLOAT=1', 250 ], 251 }], 252 [ 'arm_float_abi=="softfp" or arm_float_abi=="default"', { 253 'defines': [ 254 'USE_EABI_HARDFLOAT=0', 255 ], 256 }], 257 ], 258 'defines': [ 259 'ARM_TEST', 260 ], 261 }], 262 ], 263 }], # _toolset=="target" 264 ], 265 }], # v8_target_arch=="arm" 266 ['v8_target_arch=="ia32"', { 267 'defines': [ 268 'V8_TARGET_ARCH_IA32', 269 ], 270 }], # v8_target_arch=="ia32" 271 ['v8_target_arch=="mipsel"', { 272 'defines': [ 273 'V8_TARGET_ARCH_MIPS', 274 ], 275 'variables': { 276 'mipscompiler': '<!($(echo <(CXX)) -v 2>&1 | grep -q "^Target: mips" && echo "yes" || echo "no")', 277 }, 278 'conditions': [ 279 ['mipscompiler=="yes"', { 280 'target_conditions': [ 281 ['_toolset=="target"', { 282 'cflags': ['-EL'], 283 'ldflags': ['-EL'], 284 'conditions': [ 285 [ 'v8_use_mips_abi_hardfloat=="true"', { 286 'cflags': ['-mhard-float'], 287 'ldflags': ['-mhard-float'], 288 }, { 289 'cflags': ['-msoft-float'], 290 'ldflags': ['-msoft-float'], 291 }], 292 ['mips_arch_variant=="mips32r2"', { 293 'cflags': ['-mips32r2', '-Wa,-mips32r2'], 294 }], 295 ['mips_arch_variant=="mips32r1"', { 296 'cflags': ['-mips32', '-Wa,-mips32'], 297 }], 298 ['mips_arch_variant=="loongson"', { 299 'cflags': ['-mips3', '-Wa,-mips3'], 300 }], 301 ], 302 }], 303 ], 304 }], 305 [ 'v8_can_use_fpu_instructions=="true"', { 306 'defines': [ 307 'CAN_USE_FPU_INSTRUCTIONS', 308 ], 309 }], 310 [ 'v8_use_mips_abi_hardfloat=="true"', { 311 'defines': [ 312 '__mips_hard_float=1', 313 'CAN_USE_FPU_INSTRUCTIONS', 314 ], 315 }, { 316 'defines': [ 317 '__mips_soft_float=1' 318 ], 319 }], 320 ['mips_arch_variant=="mips32r2"', { 321 'defines': ['_MIPS_ARCH_MIPS32R2',], 322 }], 323 ['mips_arch_variant=="loongson"', { 324 'defines': ['_MIPS_ARCH_LOONGSON',], 325 }], 326 ], 327 }], # v8_target_arch=="mipsel" 328 ['v8_target_arch=="x64"', { 329 'defines': [ 330 'V8_TARGET_ARCH_X64', 331 ], 332 'xcode_settings': { 333 'ARCHS': [ 'x86_64' ], 334 }, 335 'msvs_settings': { 336 'VCLinkerTool': { 337 'StackReserveSize': '2097152', 338 }, 339 }, 340 'msvs_configuration_platform': 'x64', 341 }], # v8_target_arch=="x64" 342 ['OS=="win"', { 343 'defines': [ 344 'WIN32', 345 ], 346 'msvs_configuration_attributes': { 347 'OutputDirectory': '<(DEPTH)\\build\\$(ConfigurationName)', 348 'IntermediateDirectory': '$(OutDir)\\obj\\$(ProjectName)', 349 'CharacterSet': '1', 350 }, 351 }], 352 ['OS=="win" and v8_enable_prof==1', { 353 'msvs_settings': { 354 'VCLinkerTool': { 355 'GenerateMapFile': 'true', 356 }, 357 }, 358 }], 359 ['OS=="linux" or OS=="freebsd" or OS=="openbsd" or OS=="solaris" \ 360 or OS=="netbsd"', { 361 'conditions': [ 362 [ 'v8_no_strict_aliasing==1', { 363 'cflags': [ '-fno-strict-aliasing' ], 364 }], 365 ], # conditions 366 }], 367 ['OS=="solaris"', { 368 'defines': [ '__C99FEATURES__=1' ], # isinf() etc. 369 }], 370 ['(OS=="linux" or OS=="freebsd" or OS=="openbsd" or OS=="solaris" \ 371 or OS=="netbsd" or OS=="mac" or OS=="android") and \ 372 (v8_target_arch=="arm" or v8_target_arch=="ia32" or \ 373 v8_target_arch=="mipsel")', { 374 # Check whether the host compiler and target compiler support the 375 # '-m32' option and set it if so. 376 'target_conditions': [ 377 ['_toolset=="host"', { 378 'variables': { 379 'm32flag': '<!(($(echo ${CXX_host:-$(which g++)}) -m32 -E - > /dev/null 2>&1 < /dev/null) && echo "-m32" || true)', 380 }, 381 'cflags': [ '<(m32flag)' ], 382 'ldflags': [ '<(m32flag)' ], 383 'xcode_settings': { 384 'ARCHS': [ 'i386' ], 385 }, 386 }], 387 ['_toolset=="target"', { 388 'variables': { 389 'm32flag': '<!(($(echo ${CXX_target:-<(CXX)}) -m32 -E - > /dev/null 2>&1 < /dev/null) && echo "-m32" || true)', 390 'clang%': 0, 391 }, 392 'conditions': [ 393 ['(OS!="android" or clang==1) and \ 394 nacl_target_arch!="nacl_x64"', { 395 'cflags': [ '<(m32flag)' ], 396 'ldflags': [ '<(m32flag)' ], 397 }], 398 ], 399 'xcode_settings': { 400 'ARCHS': [ 'i386' ], 401 }, 402 }], 403 ], 404 }], 405 ['(OS=="linux") and (v8_target_arch=="x64")', { 406 # Check whether the host compiler and target compiler support the 407 # '-m64' option and set it if so. 408 'target_conditions': [ 409 ['_toolset=="host"', { 410 'variables': { 411 'm64flag': '<!(($(echo ${CXX_host:-$(which g++)}) -m64 -E - > /dev/null 2>&1 < /dev/null) && echo "-m64" || true)', 412 }, 413 'cflags': [ '<(m64flag)' ], 414 'ldflags': [ '<(m64flag)' ], 415 }], 416 ['_toolset=="target"', { 417 'variables': { 418 'm64flag': '<!(($(echo ${CXX_target:-<(CXX)}) -m64 -E - > /dev/null 2>&1 < /dev/null) && echo "-m64" || true)', 419 }, 420 'cflags': [ '<(m64flag)' ], 421 'ldflags': [ '<(m64flag)' ], 422 }] 423 ], 424 }], 425 ['OS=="freebsd" or OS=="openbsd"', { 426 'cflags': [ '-I/usr/local/include' ], 427 }], 428 ['OS=="netbsd"', { 429 'cflags': [ '-I/usr/pkg/include' ], 430 }], 431 ], # conditions 432 'configurations': { 433 'Debug': { 434 'defines': [ 435 'ENABLE_DISASSEMBLER', 436 'V8_ENABLE_CHECKS', 437 'OBJECT_PRINT', 438 'VERIFY_HEAP', 439 'DEBUG' 440 ], 441 'msvs_settings': { 442 'VCCLCompilerTool': { 443 'conditions': [ 444 ['v8_optimized_debug==0', { 445 'Optimization': '0', 446 'conditions': [ 447 ['component=="shared_library"', { 448 'RuntimeLibrary': '3', # /MDd 449 }, { 450 'RuntimeLibrary': '1', # /MTd 451 }], 452 ], 453 }], 454 ['v8_optimized_debug==1', { 455 'Optimization': '1', 456 'InlineFunctionExpansion': '2', 457 'EnableIntrinsicFunctions': 'true', 458 'FavorSizeOrSpeed': '0', 459 'StringPooling': 'true', 460 'BasicRuntimeChecks': '0', 461 'conditions': [ 462 ['component=="shared_library"', { 463 'RuntimeLibrary': '3', # /MDd 464 }, { 465 'RuntimeLibrary': '1', # /MTd 466 }], 467 ], 468 }], 469 ['v8_optimized_debug==2', { 470 'Optimization': '2', 471 'InlineFunctionExpansion': '2', 472 'EnableIntrinsicFunctions': 'true', 473 'FavorSizeOrSpeed': '0', 474 'StringPooling': 'true', 475 'BasicRuntimeChecks': '0', 476 'conditions': [ 477 ['component=="shared_library"', { 478 'RuntimeLibrary': '3', #/MDd 479 }, { 480 'RuntimeLibrary': '1', #/MTd 481 }], 482 ['v8_target_arch=="x64"', { 483 # TODO(2207): remove this option once the bug is fixed. 484 'WholeProgramOptimization': 'true', 485 }], 486 ], 487 }], 488 ], 489 }, 490 'VCLinkerTool': { 491 'conditions': [ 492 ['v8_optimized_debug==0', { 493 'LinkIncremental': '2', 494 }], 495 ['v8_optimized_debug==1', { 496 'LinkIncremental': '2', 497 }], 498 ['v8_optimized_debug==2', { 499 'LinkIncremental': '1', 500 'OptimizeReferences': '2', 501 'EnableCOMDATFolding': '2', 502 }], 503 ], 504 }, 505 }, 506 'conditions': [ 507 ['OS=="linux" or OS=="freebsd" or OS=="openbsd" or OS=="netbsd"', { 508 'cflags': [ '-Wall', '<(werror)', '-W', '-Wno-unused-parameter', 509 '-Wnon-virtual-dtor', '-Woverloaded-virtual', 510 '<(wno_array_bounds)' ], 511 'conditions': [ 512 ['v8_optimized_debug==0', { 513 'cflags!': [ 514 '-O0', 515 '-O3', 516 '-O2', 517 '-O1', 518 '-Os', 519 ], 520 'cflags': [ 521 '-fdata-sections', 522 '-ffunction-sections', 523 ], 524 }], 525 ['v8_optimized_debug==1', { 526 'cflags!': [ 527 '-O0', 528 '-O3', # TODO(2807) should be -O1. 529 '-O2', 530 '-Os', 531 ], 532 'cflags': [ 533 '-fdata-sections', 534 '-ffunction-sections', 535 '-O1', # TODO(2807) should be -O3. 536 ], 537 }], 538 ['v8_optimized_debug==2', { 539 'cflags!': [ 540 '-O0', 541 '-O1', 542 '-Os', 543 ], 544 'cflags': [ 545 '-fdata-sections', 546 '-ffunction-sections', 547 ], 548 'defines': [ 549 'OPTIMIZED_DEBUG' 550 ], 551 'conditions': [ 552 # TODO(crbug.com/272548): Avoid -O3 in NaCl 553 ['nacl_target_arch=="none"', { 554 'cflags': ['-O3'], 555 'cflags!': ['-O2'], 556 }, { 557 'cflags': ['-O2'], 558 'cflags!': ['-O3'], 559 }], 560 ], 561 }], 562 ['v8_optimized_debug!=0 and gcc_version==44 and clang==0', { 563 'cflags': [ 564 # Avoid crashes with gcc 4.4 in the v8 test suite. 565 '-fno-tree-vrp', 566 ], 567 }], 568 ], 569 }], 570 ['OS=="linux" and v8_enable_backtrace==1', { 571 # Support for backtrace_symbols. 572 'ldflags': [ '-rdynamic' ], 573 }], 574 ['OS=="android"', { 575 'variables': { 576 'android_full_debug%': 1, 577 }, 578 'conditions': [ 579 ['android_full_debug==0', { 580 # Disable full debug if we want a faster v8 in a debug build. 581 # TODO(2304): pass DISABLE_DEBUG_ASSERT instead of hiding DEBUG. 582 'defines!': [ 583 'DEBUG', 584 ], 585 }], 586 ], 587 }], 588 ['OS=="mac"', { 589 'xcode_settings': { 590 'conditions': [ 591 ['v8_optimized_debug==0', { 592 'GCC_OPTIMIZATION_LEVEL': '0', # -O0 593 }, { 594 'GCC_OPTIMIZATION_LEVEL': '3', # -O3 595 'GCC_STRICT_ALIASING': 'YES', 596 }], 597 ], 598 }, 599 }], 600 ], 601 }, # Debug 602 'Release': { 603 'conditions': [ 604 ['OS=="linux" or OS=="freebsd" or OS=="openbsd" or OS=="netbsd"', { 605 'cflags!': [ 606 '-Os', 607 ], 608 'cflags': [ 609 '-fdata-sections', 610 '-ffunction-sections', 611 '<(wno_array_bounds)', 612 ], 613 'conditions': [ 614 [ 'gcc_version==44 and clang==0', { 615 'cflags': [ 616 # Avoid crashes with gcc 4.4 in the v8 test suite. 617 '-fno-tree-vrp', 618 ], 619 }], 620 # TODO(crbug.com/272548): Avoid -O3 in NaCl 621 ['nacl_target_arch=="none"', { 622 'cflags': ['-O3'], 623 'cflags!': ['-O2'], 624 }, { 625 'cflags': ['-O2'], 626 'cflags!': ['-O3'], 627 }], 628 ], 629 }], 630 ['OS=="android"', { 631 'cflags!': [ 632 '-O3', 633 '-Os', 634 ], 635 'cflags': [ 636 '-fdata-sections', 637 '-ffunction-sections', 638 '-O2', 639 ], 640 'conditions': [ 641 [ 'gcc_version==44 and clang==0', { 642 'cflags': [ 643 # Avoid crashes with gcc 4.4 in the v8 test suite. 644 '-fno-tree-vrp', 645 ], 646 }], 647 ], 648 }], 649 ['OS=="mac"', { 650 'xcode_settings': { 651 'GCC_OPTIMIZATION_LEVEL': '3', # -O3 652 653 # -fstrict-aliasing. Mainline gcc 654 # enables this at -O2 and above, 655 # but Apple gcc does not unless it 656 # is specified explicitly. 657 'GCC_STRICT_ALIASING': 'YES', 658 }, 659 }], # OS=="mac" 660 ['OS=="win"', { 661 'msvs_settings': { 662 'VCCLCompilerTool': { 663 'Optimization': '2', 664 'InlineFunctionExpansion': '2', 665 'EnableIntrinsicFunctions': 'true', 666 'FavorSizeOrSpeed': '0', 667 'StringPooling': 'true', 668 'conditions': [ 669 ['component=="shared_library"', { 670 'RuntimeLibrary': '2', #/MD 671 }, { 672 'RuntimeLibrary': '0', #/MT 673 }], 674 ['v8_target_arch=="x64"', { 675 # TODO(2207): remove this option once the bug is fixed. 676 'WholeProgramOptimization': 'true', 677 }], 678 ], 679 }, 680 'VCLinkerTool': { 681 'LinkIncremental': '1', 682 'OptimizeReferences': '2', 683 'EnableCOMDATFolding': '2', 684 }, 685 }, 686 }], # OS=="win" 687 ], # conditions 688 }, # Release 689 }, # configurations 690 }, # target_defaults 691 } 692