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 'clang%': 0, 34 'asan%': 0, 35 'lsan%': 0, 36 'msan%': 0, 37 'tsan%': 0, 38 'ubsan%': 0, 39 'ubsan_vptr%': 0, 40 'v8_target_arch%': '<(target_arch)', 41 'v8_host_byteorder%': '<!(python -c "import sys; print sys.byteorder")', 42 # Native Client builds currently use the V8 ARM JIT and 43 # arm/simulator-arm.cc to defer the significant effort required 44 # for NaCl JIT support. The nacl_target_arch variable provides 45 # the 'true' target arch for places in this file that need it. 46 # TODO(bradchen): get rid of nacl_target_arch when someday 47 # NaCl V8 builds stop using the ARM simulator 48 'nacl_target_arch%': 'none', # must be set externally 49 50 # Setting 'v8_can_use_vfp32dregs' to 'true' will cause V8 to use the VFP 51 # registers d16-d31 in the generated code, both in the snapshot and for the 52 # ARM target. Leaving the default value of 'false' will avoid the use of 53 # these registers in the snapshot and use CPU feature probing when running 54 # on the target. 55 'v8_can_use_vfp32dregs%': 'false', 56 'arm_test_noprobe%': 'off', 57 58 # Similar to vfp but on MIPS. 59 'v8_can_use_fpu_instructions%': 'true', 60 61 # Similar to the ARM hard float ABI but on MIPS. 62 'v8_use_mips_abi_hardfloat%': 'true', 63 64 # Force disable libstdc++ debug mode. 65 'disable_glibcxx_debug%': 0, 66 67 'v8_enable_backtrace%': 0, 68 69 # Enable profiling support. Only required on Windows. 70 'v8_enable_prof%': 0, 71 72 # Some versions of GCC 4.5 seem to need -fno-strict-aliasing. 73 'v8_no_strict_aliasing%': 0, 74 75 # Chrome needs this definition unconditionally. For standalone V8 builds, 76 # it's handled in build/standalone.gypi. 77 'want_separate_host_toolset%': 1, 78 79 # Toolset the d8 binary should be compiled for. Possible values are 'host' 80 # and 'target'. If you want to run v8 tests, it needs to be set to 'target'. 81 # The setting is ignored if want_separate_host_toolset is 0. 82 'v8_toolset_for_d8%': 'target', 83 84 'host_os%': '<(OS)', 85 'werror%': '-Werror', 86 # For a shared library build, results in "libv8-<(soname_version).so". 87 'soname_version%': '', 88 89 # Allow to suppress the array bounds warning (default is no suppression). 90 'wno_array_bounds%': '', 91 92 # Override where to find binutils 93 'binutils_dir%': '', 94 95 'conditions': [ 96 ['OS=="linux" and host_arch=="x64"', { 97 'binutils_dir%': 'third_party/binutils/Linux_x64/Release/bin', 98 }], 99 ['OS=="linux" and host_arch=="ia32"', { 100 'binutils_dir%': 'third_party/binutils/Linux_ia32/Release/bin', 101 }], 102 103 # linux_use_bundled_gold: whether to use the gold linker binary checked 104 # into third_party/binutils. Force this off via GYP_DEFINES when you 105 # are using a custom toolchain and need to control -B in ldflags. 106 # Do not use 32-bit gold on 32-bit hosts as it runs out address space 107 # for component=static_library builds. 108 ['OS=="linux" and (target_arch=="x64" or target_arch=="arm")', { 109 'linux_use_bundled_gold%': 1, 110 }, { 111 'linux_use_bundled_gold%': 0, 112 }], 113 # linux_use_bundled_binutils: whether to use the binary binutils 114 # checked into third_party/binutils. These are not multi-arch so cannot 115 # be used except on x86 and x86-64 (the only two architectures which 116 # are currently checke in). Force this off via GYP_DEFINES when you 117 # are using a custom toolchain and need to control -B in cflags. 118 ['OS=="linux" and (target_arch=="ia32" or target_arch=="x64")', { 119 'linux_use_bundled_binutils%': 1, 120 }, { 121 'linux_use_bundled_binutils%': 0, 122 }], 123 # linux_use_gold_flags: whether to use build flags that rely on gold. 124 # On by default for x64 Linux. 125 ['OS=="linux" and target_arch=="x64"', { 126 'linux_use_gold_flags%': 1, 127 }, { 128 'linux_use_gold_flags%': 0, 129 }], 130 ], 131 132 # Link-Time Optimizations 133 'use_lto%': 0, 134 }, 135 'conditions': [ 136 ['host_arch=="ia32" or host_arch=="x64" or \ 137 host_arch=="ppc" or host_arch=="ppc64" or \ 138 host_arch=="s390" or host_arch=="s390x" or \ 139 clang==1', { 140 'variables': { 141 'host_cxx_is_biarch%': 1, 142 }, 143 }, { 144 'variables': { 145 'host_cxx_is_biarch%': 0, 146 }, 147 }], 148 ['target_arch=="ia32" or target_arch=="x64" or target_arch=="x87" or \ 149 target_arch=="ppc" or target_arch=="ppc64" or target_arch=="s390" or \ 150 target_arch=="s390x" or clang==1', { 151 'variables': { 152 'target_cxx_is_biarch%': 1, 153 }, 154 }, { 155 'variables': { 156 'target_cxx_is_biarch%': 0, 157 }, 158 }], 159 ], 160 'target_defaults': { 161 'conditions': [ 162 ['v8_target_arch=="arm"', { 163 'defines': [ 164 'V8_TARGET_ARCH_ARM', 165 ], 166 'conditions': [ 167 [ 'arm_version==7 or arm_version=="default"', { 168 'defines': [ 169 'CAN_USE_ARMV7_INSTRUCTIONS', 170 ], 171 }], 172 [ 'arm_fpu=="vfpv3-d16" or arm_fpu=="default"', { 173 'defines': [ 174 'CAN_USE_VFP3_INSTRUCTIONS', 175 ], 176 }], 177 [ 'arm_fpu=="vfpv3"', { 178 'defines': [ 179 'CAN_USE_VFP3_INSTRUCTIONS', 180 'CAN_USE_VFP32DREGS', 181 ], 182 }], 183 [ 'arm_fpu=="neon"', { 184 'defines': [ 185 'CAN_USE_VFP3_INSTRUCTIONS', 186 'CAN_USE_VFP32DREGS', 187 'CAN_USE_NEON', 188 ], 189 }], 190 [ 'arm_test_noprobe=="on"', { 191 'defines': [ 192 'ARM_TEST_NO_FEATURE_PROBE', 193 ], 194 }], 195 ], 196 'target_conditions': [ 197 ['_toolset=="host"', { 198 'conditions': [ 199 ['v8_target_arch==host_arch', { 200 # Host built with an Arm CXX compiler. 201 'conditions': [ 202 [ 'arm_version==7', { 203 'cflags': ['-march=armv7-a',], 204 }], 205 [ 'arm_version==7 or arm_version=="default"', { 206 'conditions': [ 207 [ 'arm_fpu!="default"', { 208 'cflags': ['-mfpu=<(arm_fpu)',], 209 }], 210 ], 211 }], 212 [ 'arm_float_abi!="default"', { 213 'cflags': ['-mfloat-abi=<(arm_float_abi)',], 214 }], 215 [ 'arm_thumb==1', { 216 'cflags': ['-mthumb',], 217 }], 218 [ 'arm_thumb==0', { 219 'cflags': ['-marm',], 220 }], 221 ], 222 }, { 223 # 'v8_target_arch!=host_arch' 224 # Host not built with an Arm CXX compiler (simulator build). 225 'conditions': [ 226 [ 'arm_float_abi=="hard"', { 227 'defines': [ 228 'USE_EABI_HARDFLOAT=1', 229 ], 230 }], 231 [ 'arm_float_abi=="softfp" or arm_float_abi=="default"', { 232 'defines': [ 233 'USE_EABI_HARDFLOAT=0', 234 ], 235 }], 236 ], 237 }], 238 ], 239 }], # _toolset=="host" 240 ['_toolset=="target"', { 241 'conditions': [ 242 ['v8_target_arch==target_arch', { 243 # Target built with an Arm CXX compiler. 244 'conditions': [ 245 [ 'arm_version==7', { 246 'cflags': ['-march=armv7-a',], 247 }], 248 [ 'arm_version==7 or arm_version=="default"', { 249 'conditions': [ 250 [ 'arm_fpu!="default"', { 251 'cflags': ['-mfpu=<(arm_fpu)',], 252 }], 253 ], 254 }], 255 [ 'arm_float_abi!="default"', { 256 'cflags': ['-mfloat-abi=<(arm_float_abi)',], 257 }], 258 [ 'arm_thumb==1', { 259 'cflags': ['-mthumb',], 260 }], 261 [ 'arm_thumb==0', { 262 'cflags': ['-marm',], 263 }], 264 ], 265 }, { 266 # 'v8_target_arch!=target_arch' 267 # Target not built with an Arm CXX compiler (simulator build). 268 'conditions': [ 269 [ 'arm_float_abi=="hard"', { 270 'defines': [ 271 'USE_EABI_HARDFLOAT=1', 272 ], 273 }], 274 [ 'arm_float_abi=="softfp" or arm_float_abi=="default"', { 275 'defines': [ 276 'USE_EABI_HARDFLOAT=0', 277 ], 278 }], 279 ], 280 }], 281 # Disable GCC LTO for v8 282 # v8 is optimized for speed. Because GCC LTO merges flags at link 283 # time, we disable LTO to prevent any -O2 flags from taking 284 # precedence over v8's -Os flag. However, LLVM LTO does not work 285 # this way so we keep LTO enabled under LLVM. 286 ['clang==0 and use_lto==1', { 287 'cflags!': [ 288 '-flto', 289 '-ffat-lto-objects', 290 ], 291 }], 292 ], 293 }], # _toolset=="target" 294 ], 295 }], # v8_target_arch=="arm" 296 ['v8_target_arch=="arm64"', { 297 'defines': [ 298 'V8_TARGET_ARCH_ARM64', 299 ], 300 }], 301 ['v8_target_arch=="s390" or v8_target_arch=="s390x"', { 302 'defines': [ 303 'V8_TARGET_ARCH_S390', 304 ], 305 'conditions': [ 306 ['v8_target_arch=="s390x"', { 307 'defines': [ 308 'V8_TARGET_ARCH_S390X', 309 ], 310 }], 311 ['v8_host_byteorder=="little"', { 312 'defines': [ 313 'V8_TARGET_ARCH_S390_LE_SIM', 314 ], 315 }], 316 ], 317 }], # s390 318 ['v8_target_arch=="ppc" or v8_target_arch=="ppc64"', { 319 'defines': [ 320 'V8_TARGET_ARCH_PPC', 321 ], 322 'conditions': [ 323 ['v8_target_arch=="ppc64"', { 324 'defines': [ 325 'V8_TARGET_ARCH_PPC64', 326 ], 327 }], 328 ['v8_host_byteorder=="little"', { 329 'defines': [ 330 'V8_TARGET_ARCH_PPC_LE', 331 ], 332 }], 333 ['v8_host_byteorder=="big"', { 334 'defines': [ 335 'V8_TARGET_ARCH_PPC_BE', 336 ], 337 'conditions': [ 338 ['OS=="aix"', { 339 # Work around AIX ceil, trunc and round oddities. 340 'cflags': [ '-mcpu=power5+ -mfprnd' ], 341 }], 342 ['OS=="aix"', { 343 # Work around AIX assembler popcntb bug. 344 'cflags': [ '-mno-popcntb' ], 345 }], 346 ], 347 }], 348 ], 349 }], # ppc 350 ['v8_target_arch=="ia32"', { 351 'defines': [ 352 'V8_TARGET_ARCH_IA32', 353 ], 354 }], # v8_target_arch=="ia32" 355 ['v8_target_arch=="x87"', { 356 'defines': [ 357 'V8_TARGET_ARCH_X87', 358 ], 359 'cflags': ['-march=i586'], 360 }], # v8_target_arch=="x87" 361 ['(v8_target_arch=="mips" or v8_target_arch=="mipsel" \ 362 or v8_target_arch=="mips64" or v8_target_arch=="mips64el") \ 363 and v8_target_arch==target_arch', { 364 'target_conditions': [ 365 ['_toolset=="target"', { 366 # Target built with a Mips CXX compiler. 367 'variables': { 368 'ldso_path%': '<!(/bin/echo -n $LDSO_PATH)', 369 'ld_r_path%': '<!(/bin/echo -n $LD_R_PATH)', 370 }, 371 'conditions': [ 372 ['ldso_path!=""', { 373 'ldflags': ['-Wl,--dynamic-linker=<(ldso_path)'], 374 }], 375 ['ld_r_path!=""', { 376 'ldflags': ['-Wl,--rpath=<(ld_r_path)'], 377 }], 378 [ 'clang==1', { 379 'cflags': ['-integrated-as'], 380 }], 381 ], 382 }], 383 ], 384 }], 385 ['v8_target_arch=="mips"', { 386 'defines': [ 387 'V8_TARGET_ARCH_MIPS', 388 ], 389 'conditions': [ 390 [ 'v8_can_use_fpu_instructions=="true"', { 391 'defines': [ 392 'CAN_USE_FPU_INSTRUCTIONS', 393 ], 394 }], 395 [ 'v8_use_mips_abi_hardfloat=="true"', { 396 'defines': [ 397 '__mips_hard_float=1', 398 'CAN_USE_FPU_INSTRUCTIONS', 399 ], 400 }, { 401 'defines': [ 402 '__mips_soft_float=1' 403 ] 404 }], 405 ], 406 'target_conditions': [ 407 ['_toolset=="target"', { 408 'conditions': [ 409 ['v8_target_arch==target_arch', { 410 # Target built with a Mips CXX compiler. 411 'cflags': [ 412 '-EB', 413 '-Wno-error=array-bounds', # Workaround https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56273 414 ], 415 'ldflags': ['-EB'], 416 'conditions': [ 417 [ 'v8_use_mips_abi_hardfloat=="true"', { 418 'cflags': ['-mhard-float'], 419 'ldflags': ['-mhard-float'], 420 }, { 421 'cflags': ['-msoft-float'], 422 'ldflags': ['-msoft-float'], 423 }], 424 ['mips_arch_variant=="r6"', { 425 'defines': [ 426 '_MIPS_ARCH_MIPS32R6', 427 'FPU_MODE_FP64', 428 ], 429 'cflags!': ['-mfp32', '-mfpxx'], 430 'conditions': [ 431 [ 'clang==0', { 432 'cflags': ['-Wa,-mips32r6'], 433 }], 434 ], 435 'cflags': ['-mips32r6'], 436 'ldflags': ['-mips32r6'], 437 }], 438 ['mips_arch_variant=="r2"', { 439 'conditions': [ 440 [ 'mips_fpu_mode=="fp64"', { 441 'defines': [ 442 '_MIPS_ARCH_MIPS32R2', 443 'FPU_MODE_FP64', 444 ], 445 'cflags': ['-mfp64'], 446 }], 447 ['mips_fpu_mode=="fpxx"', { 448 'defines': [ 449 '_MIPS_ARCH_MIPS32R2', 450 'FPU_MODE_FPXX', 451 ], 452 'cflags': ['-mfpxx'], 453 }], 454 ['mips_fpu_mode=="fp32"', { 455 'defines': [ 456 '_MIPS_ARCH_MIPS32R2', 457 'FPU_MODE_FP32', 458 ], 459 'cflags': ['-mfp32'], 460 }], 461 [ 'clang==0', { 462 'cflags': ['-Wa,-mips32r2'], 463 }], 464 ], 465 'cflags': ['-mips32r2'], 466 'ldflags': ['-mips32r2'], 467 }], 468 ['mips_arch_variant=="r1"', { 469 'defines': [ 470 'FPU_MODE_FP32', 471 ], 472 'cflags!': ['-mfp64', '-mfpxx'], 473 'conditions': [ 474 [ 'clang==0', { 475 'cflags': ['-Wa,-mips32'], 476 }], 477 ], 478 'cflags': ['-mips32'], 479 'ldflags': ['-mips32'], 480 }], 481 ['mips_arch_variant=="rx"', { 482 'defines': [ 483 '_MIPS_ARCH_MIPS32RX', 484 'FPU_MODE_FPXX', 485 ], 486 'cflags!': ['-mfp64', '-mfp32'], 487 'conditions': [ 488 [ 'clang==0', { 489 'cflags': ['-Wa,-mips32'], 490 }], 491 ], 492 'cflags': ['-mips32', '-mfpxx'], 493 'ldflags': ['-mips32'], 494 }], 495 ], 496 }, { 497 # 'v8_target_arch!=target_arch' 498 # Target not built with an MIPS CXX compiler (simulator build). 499 'conditions': [ 500 ['mips_arch_variant=="r6"', { 501 'defines': [ 502 '_MIPS_ARCH_MIPS32R6', 503 'FPU_MODE_FP64', 504 ], 505 }], 506 ['mips_arch_variant=="r2"', { 507 'conditions': [ 508 [ 'mips_fpu_mode=="fp64"', { 509 'defines': [ 510 '_MIPS_ARCH_MIPS32R2', 511 'FPU_MODE_FP64', 512 ], 513 }], 514 ['mips_fpu_mode=="fpxx"', { 515 'defines': [ 516 '_MIPS_ARCH_MIPS32R2', 517 'FPU_MODE_FPXX', 518 ], 519 }], 520 ['mips_fpu_mode=="fp32"', { 521 'defines': [ 522 '_MIPS_ARCH_MIPS32R2', 523 'FPU_MODE_FP32', 524 ], 525 }], 526 ], 527 }], 528 ['mips_arch_variant=="r1"', { 529 'defines': [ 530 'FPU_MODE_FP32', 531 ], 532 }], 533 ['mips_arch_variant=="rx"', { 534 'defines': [ 535 '_MIPS_ARCH_MIPS32RX', 536 'FPU_MODE_FPXX', 537 ], 538 }], 539 ], 540 }], 541 ], 542 }], #_toolset=="target" 543 ['_toolset=="host"', { 544 'conditions': [ 545 ['mips_arch_variant=="rx"', { 546 'defines': [ 547 '_MIPS_ARCH_MIPS32RX', 548 'FPU_MODE_FPXX', 549 ], 550 }], 551 ['mips_arch_variant=="r6"', { 552 'defines': [ 553 '_MIPS_ARCH_MIPS32R6', 554 'FPU_MODE_FP64', 555 ], 556 }], 557 ['mips_arch_variant=="r2"', { 558 'conditions': [ 559 ['mips_fpu_mode=="fp64"', { 560 'defines': [ 561 '_MIPS_ARCH_MIPS32R2', 562 'FPU_MODE_FP64', 563 ], 564 }], 565 ['mips_fpu_mode=="fpxx"', { 566 'defines': [ 567 '_MIPS_ARCH_MIPS32R2', 568 'FPU_MODE_FPXX', 569 ], 570 }], 571 ['mips_fpu_mode=="fp32"', { 572 'defines': [ 573 '_MIPS_ARCH_MIPS32R2', 574 'FPU_MODE_FP32' 575 ], 576 }], 577 ], 578 }], 579 ['mips_arch_variant=="r1"', { 580 'defines': ['FPU_MODE_FP32',], 581 }], 582 ] 583 }], #_toolset=="host" 584 ], 585 }], # v8_target_arch=="mips" 586 ['v8_target_arch=="mipsel"', { 587 'defines': [ 588 'V8_TARGET_ARCH_MIPS', 589 ], 590 'conditions': [ 591 [ 'v8_can_use_fpu_instructions=="true"', { 592 'defines': [ 593 'CAN_USE_FPU_INSTRUCTIONS', 594 ], 595 }], 596 [ 'v8_use_mips_abi_hardfloat=="true"', { 597 'defines': [ 598 '__mips_hard_float=1', 599 'CAN_USE_FPU_INSTRUCTIONS', 600 ], 601 }, { 602 'defines': [ 603 '__mips_soft_float=1' 604 ], 605 }], 606 ], 607 'target_conditions': [ 608 ['_toolset=="target"', { 609 'conditions': [ 610 ['v8_target_arch==target_arch', { 611 # Target built with a Mips CXX compiler. 612 'cflags': [ 613 '-EL', 614 '-Wno-error=array-bounds', # Workaround https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56273 615 ], 616 'ldflags': ['-EL'], 617 'conditions': [ 618 [ 'v8_use_mips_abi_hardfloat=="true"', { 619 'cflags': ['-mhard-float'], 620 'ldflags': ['-mhard-float'], 621 }, { 622 'cflags': ['-msoft-float'], 623 'ldflags': ['-msoft-float'], 624 }], 625 ['mips_arch_variant=="r6"', { 626 'defines': [ 627 '_MIPS_ARCH_MIPS32R6', 628 'FPU_MODE_FP64', 629 ], 630 'cflags!': ['-mfp32', '-mfpxx'], 631 'conditions': [ 632 [ 'clang==0', { 633 'cflags': ['-Wa,-mips32r6'], 634 }], 635 ], 636 'cflags': ['-mips32r6'], 637 'ldflags': ['-mips32r6'], 638 }], 639 ['mips_arch_variant=="r2"', { 640 'conditions': [ 641 [ 'mips_fpu_mode=="fp64"', { 642 'defines': [ 643 '_MIPS_ARCH_MIPS32R2', 644 'FPU_MODE_FP64', 645 ], 646 'cflags': ['-mfp64'], 647 }], 648 ['mips_fpu_mode=="fpxx"', { 649 'defines': [ 650 '_MIPS_ARCH_MIPS32R2', 651 'FPU_MODE_FPXX', 652 ], 653 'cflags': ['-mfpxx'], 654 }], 655 ['mips_fpu_mode=="fp32"', { 656 'defines': [ 657 '_MIPS_ARCH_MIPS32R2', 658 'FPU_MODE_FP32', 659 ], 660 'cflags': ['-mfp32'], 661 }], 662 [ 'clang==0', { 663 'cflags': ['-Wa,-mips32r2'], 664 }], 665 ], 666 'cflags': ['-mips32r2'], 667 'ldflags': ['-mips32r2'], 668 }], 669 ['mips_arch_variant=="r1"', { 670 'cflags!': ['-mfp64', '-mfpxx'], 671 'conditions': [ 672 [ 'clang==0', { 673 'cflags': ['-Wa,-mips32'], 674 }], 675 ], 676 'cflags': ['-mips32'], 677 'ldflags': ['-mips32'], 678 }], 679 ['mips_arch_variant=="rx"', { 680 'defines': [ 681 '_MIPS_ARCH_MIPS32RX', 682 'FPU_MODE_FPXX', 683 ], 684 'cflags!': ['-mfp64', '-mfp32'], 685 'conditions': [ 686 [ 'clang==0', { 687 'cflags': ['-Wa,-mips32'], 688 }], 689 ], 690 'cflags': ['-mips32', '-mfpxx'], 691 'ldflags': ['-mips32'], 692 }], 693 ['mips_arch_variant=="loongson"', { 694 'defines': [ 695 '_MIPS_ARCH_LOONGSON', 696 'FPU_MODE_FP32', 697 ], 698 'cflags!': ['-mfp64', '-mfpxx'], 699 'conditions': [ 700 [ 'clang==0', { 701 'cflags': ['-Wa,-mips3'], 702 }], 703 ], 704 'cflags': ['-mips3', '-mfp32'], 705 }], 706 ], 707 }, { 708 # 'v8_target_arch!=target_arch' 709 # Target not built with an MIPS CXX compiler (simulator build). 710 'conditions': [ 711 ['mips_arch_variant=="r6"', { 712 'defines': [ 713 '_MIPS_ARCH_MIPS32R6', 714 'FPU_MODE_FP64', 715 ], 716 }], 717 ['mips_arch_variant=="r2"', { 718 'conditions': [ 719 [ 'mips_fpu_mode=="fp64"', { 720 'defines': [ 721 '_MIPS_ARCH_MIPS32R2', 722 'FPU_MODE_FP64', 723 ], 724 }], 725 ['mips_fpu_mode=="fpxx"', { 726 'defines': [ 727 '_MIPS_ARCH_MIPS32R2', 728 'FPU_MODE_FPXX', 729 ], 730 }], 731 ['mips_fpu_mode=="fp32"', { 732 'defines': [ 733 '_MIPS_ARCH_MIPS32R2', 734 'FPU_MODE_FP32', 735 ], 736 }], 737 ], 738 }], 739 ['mips_arch_variant=="r1"', { 740 'defines': [ 741 'FPU_MODE_FP32', 742 ], 743 }], 744 ['mips_arch_variant=="rx"', { 745 'defines': [ 746 '_MIPS_ARCH_MIPS32RX', 747 'FPU_MODE_FPXX', 748 ], 749 }], 750 ['mips_arch_variant=="loongson"', { 751 'defines': [ 752 '_MIPS_ARCH_LOONGSON', 753 'FPU_MODE_FP32', 754 ], 755 }], 756 ], 757 }], 758 ], 759 }], #_toolset=="target 760 ['_toolset=="host"', { 761 'conditions': [ 762 ['mips_arch_variant=="rx"', { 763 'defines': [ 764 '_MIPS_ARCH_MIPS32RX', 765 'FPU_MODE_FPXX', 766 ], 767 }], 768 ['mips_arch_variant=="r6"', { 769 'defines': [ 770 '_MIPS_ARCH_MIPS32R6', 771 'FPU_MODE_FP64', 772 ], 773 }], 774 ['mips_arch_variant=="r2"', { 775 'conditions': [ 776 ['mips_fpu_mode=="fp64"', { 777 'defines': [ 778 '_MIPS_ARCH_MIPS32R2', 779 'FPU_MODE_FP64', 780 ], 781 }], 782 ['mips_fpu_mode=="fpxx"', { 783 'defines': [ 784 '_MIPS_ARCH_MIPS32R2', 785 'FPU_MODE_FPXX', 786 ], 787 }], 788 ['mips_fpu_mode=="fp32"', { 789 'defines': [ 790 '_MIPS_ARCH_MIPS32R2', 791 'FPU_MODE_FP32' 792 ], 793 }], 794 ], 795 }], 796 ['mips_arch_variant=="r1"', { 797 'defines': ['FPU_MODE_FP32',], 798 }], 799 ['mips_arch_variant=="loongson"', { 800 'defines': [ 801 '_MIPS_ARCH_LOONGSON', 802 'FPU_MODE_FP32', 803 ], 804 }], 805 ] 806 }], 807 ], 808 }], # v8_target_arch=="mipsel" 809 ['v8_target_arch=="mips64el" or v8_target_arch=="mips64"', { 810 'defines': [ 811 'V8_TARGET_ARCH_MIPS64', 812 ], 813 'conditions': [ 814 [ 'v8_can_use_fpu_instructions=="true"', { 815 'defines': [ 816 'CAN_USE_FPU_INSTRUCTIONS', 817 ], 818 }], 819 [ 'v8_host_byteorder=="little"', { 820 'defines': [ 821 'V8_TARGET_ARCH_MIPS64_LE', 822 ], 823 }], 824 [ 'v8_host_byteorder=="big"', { 825 'defines': [ 826 'V8_TARGET_ARCH_MIPS64_BE', 827 ], 828 }], 829 [ 'v8_use_mips_abi_hardfloat=="true"', { 830 'defines': [ 831 '__mips_hard_float=1', 832 'CAN_USE_FPU_INSTRUCTIONS', 833 ], 834 }, { 835 'defines': [ 836 '__mips_soft_float=1' 837 ], 838 }], 839 ], 840 'target_conditions': [ 841 ['_toolset=="target"', { 842 'conditions': [ 843 ['v8_target_arch==target_arch', { 844 'cflags': [ 845 '-Wno-error=array-bounds', # Workaround https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56273 846 ], 847 'conditions': [ 848 ['v8_target_arch=="mips64el"', { 849 'cflags': ['-EL'], 850 'ldflags': ['-EL'], 851 }], 852 ['v8_target_arch=="mips64"', { 853 'cflags': ['-EB'], 854 'ldflags': ['-EB'], 855 }], 856 [ 'v8_use_mips_abi_hardfloat=="true"', { 857 'cflags': ['-mhard-float'], 858 'ldflags': ['-mhard-float'], 859 }, { 860 'cflags': ['-msoft-float'], 861 'ldflags': ['-msoft-float'], 862 }], 863 ['mips_arch_variant=="r6"', { 864 'defines': ['_MIPS_ARCH_MIPS64R6',], 865 'conditions': [ 866 [ 'clang==0', { 867 'cflags': ['-Wa,-mips64r6'], 868 }], 869 ], 870 'cflags': ['-mips64r6', '-mabi=64'], 871 'ldflags': ['-mips64r6', '-mabi=64'], 872 }], 873 ['mips_arch_variant=="r2"', { 874 'defines': ['_MIPS_ARCH_MIPS64R2',], 875 'conditions': [ 876 [ 'clang==0', { 877 'cflags': ['-Wa,-mips64r2'], 878 }], 879 ], 880 'cflags': ['-mips64r2', '-mabi=64'], 881 'ldflags': ['-mips64r2', '-mabi=64'], 882 }], 883 ], 884 }, { 885 # 'v8_target_arch!=target_arch' 886 # Target not built with an MIPS CXX compiler (simulator build). 887 'conditions': [ 888 ['mips_arch_variant=="r6"', { 889 'defines': ['_MIPS_ARCH_MIPS64R6',], 890 }], 891 ['mips_arch_variant=="r2"', { 892 'defines': ['_MIPS_ARCH_MIPS64R2',], 893 }], 894 ], 895 }], 896 ], 897 }], #'_toolset=="target" 898 ['_toolset=="host"', { 899 'conditions': [ 900 ['mips_arch_variant=="r6"', { 901 'defines': ['_MIPS_ARCH_MIPS64R6',], 902 }], 903 ['mips_arch_variant=="r2"', { 904 'defines': ['_MIPS_ARCH_MIPS64R2',], 905 }], 906 ], 907 }], #'_toolset=="host" 908 ], 909 }], # v8_target_arch=="mips64el" 910 ['v8_target_arch=="x64"', { 911 'defines': [ 912 'V8_TARGET_ARCH_X64', 913 ], 914 'xcode_settings': { 915 'ARCHS': [ 'x86_64' ], 916 }, 917 'msvs_settings': { 918 'VCLinkerTool': { 919 'StackReserveSize': '2097152', 920 }, 921 }, 922 'msvs_configuration_platform': 'x64', 923 }], # v8_target_arch=="x64" 924 ['v8_target_arch=="x32"', { 925 'defines': [ 926 # x32 port shares the source code with x64 port. 927 'V8_TARGET_ARCH_X64', 928 'V8_TARGET_ARCH_32_BIT', 929 ], 930 'cflags': [ 931 '-mx32', 932 # Inhibit warning if long long type is used. 933 '-Wno-long-long', 934 ], 935 'ldflags': [ 936 '-mx32', 937 ], 938 }], # v8_target_arch=="x32" 939 ['linux_use_gold_flags==1', { 940 # Newer gccs and clangs support -fuse-ld, use the flag to force gold 941 # selection. 942 # gcc -- http://gcc.gnu.org/onlinedocs/gcc-4.8.0/gcc/Optimize-Options.html 943 'ldflags': [ '-fuse-ld=gold', ], 944 }], 945 ['linux_use_bundled_binutils==1', { 946 'cflags': [ 947 '-B<!(cd <(DEPTH) && pwd -P)/<(binutils_dir)', 948 ], 949 }], 950 ['linux_use_bundled_gold==1', { 951 # Put our binutils, which contains gold in the search path. We pass 952 # the path to gold to the compiler. gyp leaves unspecified what the 953 # cwd is when running the compiler, so the normal gyp path-munging 954 # fails us. This hack gets the right path. 955 'ldflags': [ 956 '-B<!(cd <(DEPTH) && pwd -P)/<(binutils_dir)', 957 ], 958 }], 959 ['OS=="win"', { 960 'defines': [ 961 'WIN32', 962 ], 963 # 4351: VS 2005 and later are warning us that they've fixed a bug 964 # present in VS 2003 and earlier. 965 'msvs_disabled_warnings': [4351], 966 'msvs_configuration_attributes': { 967 'OutputDirectory': '<(DEPTH)\\build\\$(ConfigurationName)', 968 'IntermediateDirectory': '$(OutDir)\\obj\\$(ProjectName)', 969 'CharacterSet': '1', 970 }, 971 }], 972 ['OS=="win" and v8_target_arch=="ia32"', { 973 'msvs_settings': { 974 'VCCLCompilerTool': { 975 # Ensure no surprising artifacts from 80bit double math with x86. 976 'AdditionalOptions': ['/arch:SSE2'], 977 }, 978 }, 979 }], 980 ['OS=="win" and v8_enable_prof==1', { 981 'msvs_settings': { 982 'VCLinkerTool': { 983 'GenerateMapFile': 'true', 984 }, 985 }, 986 }], 987 ['(OS=="linux" or OS=="freebsd" or OS=="openbsd" or OS=="solaris" \ 988 or OS=="netbsd" or OS=="mac" or OS=="android" or OS=="qnx") and \ 989 v8_target_arch=="ia32"', { 990 'cflags': [ 991 '-msse2', 992 '-mfpmath=sse', 993 '-mmmx', # Allows mmintrin.h for MMX intrinsics. 994 ], 995 }], 996 ['(OS=="linux" or OS=="freebsd" or OS=="openbsd" or OS=="solaris" \ 997 or OS=="netbsd" or OS=="mac" or OS=="android" or OS=="qnx") and \ 998 (v8_target_arch=="arm" or v8_target_arch=="ia32" or \ 999 v8_target_arch=="x87" or v8_target_arch=="mips" or \ 1000 v8_target_arch=="mipsel" or v8_target_arch=="ppc" or \ 1001 v8_target_arch=="s390")', { 1002 'target_conditions': [ 1003 ['_toolset=="host"', { 1004 'conditions': [ 1005 ['host_cxx_is_biarch==1', { 1006 'conditions': [ 1007 ['host_arch=="s390" or host_arch=="s390x"', { 1008 'cflags': [ '-m31' ], 1009 'ldflags': [ '-m31' ] 1010 },{ 1011 'cflags': [ '-m32' ], 1012 'ldflags': [ '-m32' ] 1013 }], 1014 ], 1015 }], 1016 ], 1017 'xcode_settings': { 1018 'ARCHS': [ 'i386' ], 1019 }, 1020 }], 1021 ['_toolset=="target"', { 1022 'conditions': [ 1023 ['target_cxx_is_biarch==1 and nacl_target_arch!="nacl_x64"', { 1024 'conditions': [ 1025 ['host_arch=="s390" or host_arch=="s390x"', { 1026 'cflags': [ '-m31' ], 1027 'ldflags': [ '-m31' ] 1028 },{ 1029 'cflags': [ '-m32' ], 1030 'ldflags': [ '-m32' ], 1031 }], 1032 ], 1033 }], 1034 ], 1035 'xcode_settings': { 1036 'ARCHS': [ 'i386' ], 1037 }, 1038 }], 1039 ], 1040 }], 1041 ['(OS=="linux" or OS=="android") and \ 1042 (v8_target_arch=="x64" or v8_target_arch=="arm64" or \ 1043 v8_target_arch=="ppc64" or v8_target_arch=="s390x")', { 1044 'target_conditions': [ 1045 ['_toolset=="host"', { 1046 'conditions': [ 1047 ['host_cxx_is_biarch==1', { 1048 'cflags': [ '-m64' ], 1049 'ldflags': [ '-m64' ] 1050 }], 1051 ], 1052 }], 1053 ['_toolset=="target"', { 1054 'conditions': [ 1055 ['target_cxx_is_biarch==1', { 1056 'cflags': [ '-m64' ], 1057 'ldflags': [ '-m64' ], 1058 }], 1059 ] 1060 }], 1061 ], 1062 }], 1063 ['OS=="linux" or OS=="freebsd" or OS=="openbsd" or OS=="solaris" \ 1064 or OS=="netbsd" or OS=="qnx" or OS=="aix"', { 1065 'conditions': [ 1066 [ 'v8_no_strict_aliasing==1', { 1067 'cflags': [ '-fno-strict-aliasing' ], 1068 }], 1069 ], # conditions 1070 }], 1071 ['OS=="solaris"', { 1072 'defines': [ '__C99FEATURES__=1' ], # isinf() etc. 1073 }], 1074 ['OS=="freebsd" or OS=="openbsd"', { 1075 'cflags': [ '-I/usr/local/include' ], 1076 }], 1077 ['OS=="netbsd"', { 1078 'cflags': [ '-I/usr/pkg/include' ], 1079 }], 1080 ['OS=="aix"', { 1081 'defines': [ 1082 # Support for malloc(0) 1083 '_LINUX_SOURCE_COMPAT=1', 1084 '_ALL_SOURCE=1'], 1085 'conditions': [ 1086 [ 'v8_target_arch=="ppc"', { 1087 'ldflags': [ '-Wl,-bmaxdata:0x60000000/dsa' ], 1088 }], 1089 [ 'v8_target_arch=="ppc64"', { 1090 'cflags': [ '-maix64' ], 1091 'ldflags': [ '-maix64' ], 1092 }], 1093 ], 1094 }], 1095 ], # conditions 1096 'configurations': { 1097 # Abstract configuration for v8_optimized_debug == 0. 1098 'DebugBase0': { 1099 'abstract': 1, 1100 'msvs_settings': { 1101 'VCCLCompilerTool': { 1102 'Optimization': '0', 1103 'conditions': [ 1104 ['component=="shared_library"', { 1105 'RuntimeLibrary': '3', # /MDd 1106 }, { 1107 'RuntimeLibrary': '1', # /MTd 1108 }], 1109 ], 1110 }, 1111 'VCLinkerTool': { 1112 'LinkIncremental': '2', 1113 }, 1114 }, 1115 'variables': { 1116 'v8_enable_slow_dchecks%': 1, 1117 }, 1118 'conditions': [ 1119 ['OS=="linux" or OS=="freebsd" or OS=="openbsd" or OS=="netbsd" or \ 1120 OS=="qnx" or OS=="aix"', { 1121 'cflags!': [ 1122 '-O3', 1123 '-O2', 1124 '-O1', 1125 '-Os', 1126 ], 1127 'cflags': [ 1128 '-fdata-sections', 1129 '-ffunction-sections', 1130 ], 1131 }], 1132 ['OS=="mac"', { 1133 'xcode_settings': { 1134 'GCC_OPTIMIZATION_LEVEL': '0', # -O0 1135 }, 1136 }], 1137 ['v8_enable_slow_dchecks==1', { 1138 'defines': [ 1139 'ENABLE_SLOW_DCHECKS', 1140 ], 1141 }], 1142 ], 1143 }, # DebugBase0 1144 # Abstract configuration for v8_optimized_debug == 1. 1145 'DebugBase1': { 1146 'abstract': 1, 1147 'msvs_settings': { 1148 'VCCLCompilerTool': { 1149 'Optimization': '2', 1150 'InlineFunctionExpansion': '2', 1151 'EnableIntrinsicFunctions': 'true', 1152 'FavorSizeOrSpeed': '0', 1153 'StringPooling': 'true', 1154 'BasicRuntimeChecks': '0', 1155 'conditions': [ 1156 ['component=="shared_library"', { 1157 'RuntimeLibrary': '3', #/MDd 1158 }, { 1159 'RuntimeLibrary': '1', #/MTd 1160 }], 1161 ], 1162 }, 1163 'VCLinkerTool': { 1164 'LinkIncremental': '1', 1165 'OptimizeReferences': '2', 1166 'EnableCOMDATFolding': '2', 1167 }, 1168 }, 1169 'variables': { 1170 'v8_enable_slow_dchecks%': 0, 1171 }, 1172 'conditions': [ 1173 ['OS=="linux" or OS=="freebsd" or OS=="openbsd" or OS=="netbsd" or \ 1174 OS=="qnx" or OS=="aix"', { 1175 'cflags!': [ 1176 '-O0', 1177 '-O1', 1178 '-Os', 1179 ], 1180 'cflags': [ 1181 '-fdata-sections', 1182 '-ffunction-sections', 1183 ], 1184 'conditions': [ 1185 # TODO(crbug.com/272548): Avoid -O3 in NaCl 1186 # Don't use -O3 with sanitizers. 1187 ['nacl_target_arch=="none" and asan==0 and msan==0 and lsan==0 \ 1188 and tsan==0 and ubsan==0 and ubsan_vptr==0', { 1189 'cflags': ['-O3'], 1190 'cflags!': ['-O2'], 1191 }, { 1192 'cflags': ['-O2'], 1193 'cflags!': ['-O3'], 1194 }], 1195 ], 1196 }], 1197 ['OS=="mac"', { 1198 'xcode_settings': { 1199 'GCC_OPTIMIZATION_LEVEL': '3', # -O3 1200 'GCC_STRICT_ALIASING': 'YES', 1201 }, 1202 }], 1203 ['v8_enable_slow_dchecks==1', { 1204 'defines': [ 1205 'ENABLE_SLOW_DCHECKS', 1206 ], 1207 }], 1208 ], 1209 }, # DebugBase1 1210 # Common settings for the Debug configuration. 1211 'DebugBaseCommon': { 1212 'abstract': 1, 1213 'defines': [ 1214 'ENABLE_DISASSEMBLER', 1215 'V8_ENABLE_CHECKS', 1216 'OBJECT_PRINT', 1217 'VERIFY_HEAP', 1218 'DEBUG', 1219 'TRACE_MAPS' 1220 ], 1221 'conditions': [ 1222 ['OS=="linux" or OS=="freebsd" or OS=="openbsd" or OS=="netbsd" or \ 1223 OS=="qnx" or OS=="aix"', { 1224 'cflags': [ '-Woverloaded-virtual', '<(wno_array_bounds)', ], 1225 }], 1226 ['OS=="linux" and v8_enable_backtrace==1', { 1227 # Support for backtrace_symbols. 1228 'ldflags': [ '-rdynamic' ], 1229 }], 1230 ['OS=="linux" and disable_glibcxx_debug==0', { 1231 # Enable libstdc++ debugging facilities to help catch problems 1232 # early, see http://crbug.com/65151 . 1233 'defines': ['_GLIBCXX_DEBUG=1',], 1234 }], 1235 ['OS=="aix"', { 1236 'ldflags': [ '-Wl,-bbigtoc' ], 1237 'conditions': [ 1238 ['v8_target_arch=="ppc64"', { 1239 'cflags': [ '-maix64 -mcmodel=large' ], 1240 }], 1241 ], 1242 }], 1243 ['OS=="android"', { 1244 'variables': { 1245 'android_full_debug%': 1, 1246 }, 1247 'conditions': [ 1248 ['android_full_debug==0', { 1249 # Disable full debug if we want a faster v8 in a debug build. 1250 # TODO(2304): pass DISABLE_DEBUG_ASSERT instead of hiding DEBUG. 1251 'defines!': [ 1252 'DEBUG', 1253 'ENABLE_SLOW_DCHECKS', 1254 ], 1255 }], 1256 ], 1257 }], 1258 # TODO(pcc): Re-enable in LTO builds once we've fixed the intermittent 1259 # link failures (crbug.com/513074). 1260 ['linux_use_gold_flags==1 and use_lto==0', { 1261 'target_conditions': [ 1262 ['_toolset=="target"', { 1263 'ldflags': [ 1264 # Experimentation found that using four linking threads 1265 # saved ~20% of link time. 1266 # https://groups.google.com/a/chromium.org/group/chromium-dev/browse_thread/thread/281527606915bb36 1267 # Only apply this to the target linker, since the host 1268 # linker might not be gold, but isn't used much anyway. 1269 '-Wl,--threads', 1270 '-Wl,--thread-count=4', 1271 ], 1272 }], 1273 ], 1274 }], 1275 ], 1276 }, # DebugBaseCommon 1277 'Debug': { 1278 'inherit_from': ['DebugBaseCommon'], 1279 'conditions': [ 1280 ['v8_optimized_debug==0', { 1281 'inherit_from': ['DebugBase0'], 1282 }, { 1283 'inherit_from': ['DebugBase1'], 1284 }], 1285 ], 1286 }, # Debug 1287 'Release': { 1288 'variables': { 1289 'v8_enable_slow_dchecks%': 0, 1290 }, 1291 'conditions': [ 1292 ['OS=="linux" or OS=="freebsd" or OS=="openbsd" or OS=="netbsd" \ 1293 or OS=="aix"', { 1294 'cflags!': [ 1295 '-Os', 1296 ], 1297 'cflags': [ 1298 '-fdata-sections', 1299 '-ffunction-sections', 1300 '<(wno_array_bounds)', 1301 ], 1302 'conditions': [ 1303 # TODO(crbug.com/272548): Avoid -O3 in NaCl 1304 # Don't use -O3 with sanitizers. 1305 ['nacl_target_arch=="none" and asan==0 and msan==0 and lsan==0 \ 1306 and tsan==0 and ubsan==0 and ubsan_vptr==0', { 1307 'cflags': ['-O3'], 1308 'cflags!': ['-O2'], 1309 }, { 1310 'cflags': ['-O2'], 1311 'cflags!': ['-O3'], 1312 }], 1313 ], 1314 }], 1315 ['OS=="android"', { 1316 'cflags!': [ 1317 '-O3', 1318 '-Os', 1319 ], 1320 'cflags': [ 1321 '-fdata-sections', 1322 '-ffunction-sections', 1323 '-O2', 1324 ], 1325 }], 1326 ['OS=="mac"', { 1327 'xcode_settings': { 1328 'GCC_OPTIMIZATION_LEVEL': '3', # -O3 1329 1330 # -fstrict-aliasing. Mainline gcc 1331 # enables this at -O2 and above, 1332 # but Apple gcc does not unless it 1333 # is specified explicitly. 1334 'GCC_STRICT_ALIASING': 'YES', 1335 }, 1336 }], # OS=="mac" 1337 ['OS=="win"', { 1338 'msvs_settings': { 1339 'VCCLCompilerTool': { 1340 'Optimization': '2', 1341 'InlineFunctionExpansion': '2', 1342 'EnableIntrinsicFunctions': 'true', 1343 'FavorSizeOrSpeed': '0', 1344 'StringPooling': 'true', 1345 'conditions': [ 1346 ['component=="shared_library"', { 1347 'RuntimeLibrary': '2', #/MD 1348 }, { 1349 'RuntimeLibrary': '0', #/MT 1350 }], 1351 ], 1352 }, 1353 'VCLinkerTool': { 1354 'LinkIncremental': '1', 1355 'OptimizeReferences': '2', 1356 'EnableCOMDATFolding': '2', 1357 }, 1358 }, 1359 }], # OS=="win" 1360 ['v8_enable_slow_dchecks==1', { 1361 'defines': [ 1362 'ENABLE_SLOW_DCHECKS', 1363 ], 1364 }], 1365 ], # conditions 1366 }, # Release 1367 }, # configurations 1368 }, # target_defaults 1369} 1370