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 'cfi_vptr%': 0, 36 'lsan%': 0, 37 'msan%': 0, 38 'tsan%': 0, 39 'ubsan%': 0, 40 'ubsan_vptr%': 0, 41 'has_valgrind%': 0, 42 'coverage%': 0, 43 'v8_target_arch%': '<(target_arch)', 44 'v8_host_byteorder%': '<!(python -c "import sys; print(sys.byteorder)")', 45 'force_dynamic_crt%': 0, 46 47 # Setting 'v8_can_use_vfp32dregs' to 'true' will cause V8 to use the VFP 48 # registers d16-d31 in the generated code, both in the snapshot and for the 49 # ARM target. Leaving the default value of 'false' will avoid the use of 50 # these registers in the snapshot and use CPU feature probing when running 51 # on the target. 52 'v8_can_use_vfp32dregs%': 'false', 53 'arm_test_noprobe%': 'off', 54 55 # Similar to vfp but on MIPS. 56 'v8_can_use_fpu_instructions%': 'true', 57 58 # Similar to the ARM hard float ABI but on MIPS. 59 'v8_use_mips_abi_hardfloat%': 'true', 60 61 # MIPS MSA support 62 'mips_use_msa%': 0, 63 64 # Print to stdout on Android. 65 'v8_android_log_stdout%': 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 gypfiles/standalone.gypi. 77 'want_separate_host_toolset%': 1, 78 79 # Toolset the shell binary should be compiled for. Possible values are 80 # 'host' and 'target'. 81 # The setting is ignored if want_separate_host_toolset is 0. 82 'v8_toolset_for_shell%': '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 # Override where to find binutils 90 'binutils_dir%': '', 91 92 'conditions': [ 93 ['OS=="linux" and host_arch=="x64"', { 94 'binutils_dir%': 'third_party/binutils/Linux_x64/Release/bin', 95 }], 96 ['OS=="linux" and host_arch=="ia32"', { 97 'binutils_dir%': 'third_party/binutils/Linux_ia32/Release/bin', 98 }], 99 ], 100 101 # Indicates if gcmole tools are downloaded by a hook. 102 'gcmole%': 0, 103 }, 104 105 # [GYP] this needs to be outside of the top level 'variables' 106 'conditions': [ 107 ['host_arch=="ia32" or host_arch=="x64" or \ 108 host_arch=="ppc" or host_arch=="ppc64" or \ 109 host_arch=="s390x" or \ 110 clang==1', { 111 'variables': { 112 'host_cxx_is_biarch%': 1, 113 }, 114 }, { 115 'variables': { 116 'host_cxx_is_biarch%': 0, 117 }, 118 }], 119 ['target_arch=="ia32" or target_arch=="x64" or \ 120 target_arch=="ppc" or target_arch=="ppc64" or \ 121 target_arch=="s390x" or clang==1', { 122 'variables': { 123 'target_cxx_is_biarch%': 1, 124 }, 125 }, { 126 'variables': { 127 'target_cxx_is_biarch%': 0, 128 }, 129 }], 130 ], 131 'target_defaults': { 132 'include_dirs': [ 133 '<(V8_ROOT)', 134 '<(V8_ROOT)/include', 135 ], 136 'conditions': [ 137 ['clang', { 138 'cflags': [ '-Werror', '-Wno-unknown-pragmas' ], 139 },{ 140 'cflags!': [ '-Wall', '-Wextra' ], 141 'cflags': [ '-Wno-return-type' ], 142 }], 143 ['v8_target_arch=="arm"', { 144 'defines': [ 145 'V8_TARGET_ARCH_ARM', 146 ], 147 'conditions': [ 148 [ 'arm_version==7 or arm_version=="default"', { 149 'defines': [ 150 'CAN_USE_ARMV7_INSTRUCTIONS', 151 ], 152 }], 153 [ 'arm_fpu=="vfpv3-d16" or arm_fpu=="default"', { 154 'defines': [ 155 'CAN_USE_VFP3_INSTRUCTIONS', 156 ], 157 }], 158 [ 'arm_fpu=="vfpv3"', { 159 'defines': [ 160 'CAN_USE_VFP3_INSTRUCTIONS', 161 'CAN_USE_VFP32DREGS', 162 ], 163 }], 164 [ 'arm_fpu=="neon"', { 165 'defines': [ 166 'CAN_USE_VFP3_INSTRUCTIONS', 167 'CAN_USE_VFP32DREGS', 168 'CAN_USE_NEON', 169 ], 170 }], 171 [ 'arm_test_noprobe=="on"', { 172 'defines': [ 173 'ARM_TEST_NO_FEATURE_PROBE', 174 ], 175 }], 176 ], 177 'target_conditions': [ 178 ['_toolset=="host"', { 179 'conditions': [ 180 ['v8_target_arch==host_arch', { 181 # Host built with an Arm CXX compiler. 182 'conditions': [ 183 [ 'arm_version==7', { 184 'cflags': ['-march=armv7-a',], 185 }], 186 [ 'arm_version==7 or arm_version=="default"', { 187 'conditions': [ 188 [ 'arm_fpu!="default"', { 189 'cflags': ['-mfpu=<(arm_fpu)',], 190 }], 191 ], 192 }], 193 [ 'arm_float_abi!="default"', { 194 'cflags': ['-mfloat-abi=<(arm_float_abi)',], 195 }], 196 [ 'arm_thumb==1', { 197 'cflags': ['-mthumb',], 198 }], 199 [ 'arm_thumb==0', { 200 'cflags': ['-marm',], 201 }], 202 ], 203 }, { 204 # 'v8_target_arch!=host_arch' 205 # Host not built with an Arm CXX compiler (simulator build). 206 'conditions': [ 207 [ 'arm_float_abi=="hard"', { 208 'defines': [ 209 'USE_EABI_HARDFLOAT=1', 210 ], 211 }], 212 [ 'arm_float_abi=="softfp" or arm_float_abi=="default"', { 213 'defines': [ 214 'USE_EABI_HARDFLOAT=0', 215 ], 216 }], 217 ], 218 }], 219 ], 220 }], # _toolset=="host" 221 ['_toolset=="target"', { 222 'conditions': [ 223 ['v8_target_arch==target_arch', { 224 # Target built with an Arm CXX compiler. 225 'conditions': [ 226 [ 'arm_version==7', { 227 'cflags': ['-march=armv7-a',], 228 }], 229 [ 'arm_version==7 or arm_version=="default"', { 230 'conditions': [ 231 [ 'arm_fpu!="default"', { 232 'cflags': ['-mfpu=<(arm_fpu)',], 233 }], 234 ], 235 }], 236 [ 'arm_float_abi!="default"', { 237 'cflags': ['-mfloat-abi=<(arm_float_abi)',], 238 }], 239 [ 'arm_thumb==1', { 240 'cflags': ['-mthumb',], 241 }], 242 [ 'arm_thumb==0', { 243 'cflags': ['-marm',], 244 }], 245 ], 246 }, { 247 # 'v8_target_arch!=target_arch' 248 # Target not built with an Arm CXX compiler (simulator build). 249 'conditions': [ 250 [ 'arm_float_abi=="hard"', { 251 'defines': [ 252 'USE_EABI_HARDFLOAT=1', 253 ], 254 }], 255 [ 'arm_float_abi=="softfp" or arm_float_abi=="default"', { 256 'defines': [ 257 'USE_EABI_HARDFLOAT=0', 258 ], 259 }], 260 ], 261 }], 262 ], 263 }], # _toolset=="target" 264 ], 265 }], # v8_target_arch=="arm" 266 ['v8_target_arch=="arm64"', { 267 'defines': [ 268 'V8_TARGET_ARCH_ARM64', 269 ], 270 'conditions': [ 271 ['v8_control_flow_integrity==1', { 272 'cflags': [ '-mbranch-protection=pac-ret+b-key+bti' ], 273 }], 274 ], 275 'target_conditions': [ 276 ['_toolset == "target"', { 277 'cflags': [ '-fvisibility-inlines-hidden', '-fvisibility=hidden' ], 278 }], 279 ], 280 }], 281 ['v8_target_arch=="riscv64"', { 282 'defines': [ 283 'V8_TARGET_ARCH_RISCV64', 284 '__riscv_xlen=64', 285 'CAN_USE_FPU_INSTRUCTIONS' 286 ], 287 }], 288 ['v8_target_arch=="loong64"', { 289 'defines': [ 290 'V8_TARGET_ARCH_LOONG64', 291 ], 292 }], 293 ['v8_target_arch=="s390x"', { 294 'defines': [ 295 'V8_TARGET_ARCH_S390', 296 ], 297 'cflags': [ '-ffp-contract=off' ], 298 'conditions': [ 299 ['v8_target_arch=="s390x"', { 300 'defines': [ 301 'V8_TARGET_ARCH_S390X', 302 ], 303 }], 304 ['v8_host_byteorder=="little"', { 305 'defines': [ 306 'V8_TARGET_ARCH_S390_LE_SIM', 307 ], 308 }, { 309 'cflags': [ '-march=z196' ], 310 }], 311 ], 312 }], # s390x 313 ['v8_target_arch=="ppc" or v8_target_arch=="ppc64"', { 314 'conditions': [ 315 ['v8_target_arch=="ppc"', { 316 'defines': [ 317 'V8_TARGET_ARCH_PPC', 318 ], 319 }], 320 ['v8_target_arch=="ppc64"', { 321 'defines': [ 322 'V8_TARGET_ARCH_PPC64', 323 ], 324 'cflags': [ 325 '-ffp-contract=off', 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" or OS=="os400"', { 339 # Work around AIX ceil, trunc and round oddities. 340 'cflags': [ '-mcpu=power5+ -mfprnd' ], 341 }], 342 ['OS=="aix" or OS=="os400"', { 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=="mips" or v8_target_arch=="mipsel" \ 356 or v8_target_arch=="mips64" or v8_target_arch=="mips64el"', { 357 'target_conditions': [ 358 ['_toolset=="target"', { 359 'conditions': [ 360 ['v8_target_arch==target_arch', { 361 # Target built with a Mips CXX compiler. 362 'variables': { 363 'ldso_path%': '<!(/bin/echo -n $LDSO_PATH)', 364 'ld_r_path%': '<!(/bin/echo -n $LD_R_PATH)', 365 }, 366 'conditions': [ 367 ['ldso_path!=""', { 368 'ldflags': ['-Wl,--dynamic-linker=<(ldso_path)'], 369 }], 370 ['ld_r_path!=""', { 371 'ldflags': ['-Wl,--rpath=<(ld_r_path)'], 372 }], 373 [ 'clang==1', { 374 'cflags': ['-integrated-as'], 375 }], 376 ['OS!="mac"', { 377 'defines': ['_MIPS_TARGET_HW',], 378 }, { 379 'defines': ['_MIPS_TARGET_SIMULATOR',], 380 }], 381 ], 382 }, { 383 'defines': ['_MIPS_TARGET_SIMULATOR',], 384 }], 385 ], 386 }], #'_toolset=="target" 387 ['_toolset=="host"', { 388 'conditions': [ 389 ['v8_target_arch==target_arch and OS!="mac"', { 390 'defines': ['_MIPS_TARGET_HW',], 391 }, { 392 'defines': ['_MIPS_TARGET_SIMULATOR',], 393 }], 394 ], 395 }], #'_toolset=="host" 396 ], 397 }], 398 ['v8_target_arch=="mips"', { 399 'defines': [ 400 'V8_TARGET_ARCH_MIPS', 401 ], 402 'conditions': [ 403 [ 'v8_can_use_fpu_instructions=="true"', { 404 'defines': [ 405 'CAN_USE_FPU_INSTRUCTIONS', 406 ], 407 }], 408 [ 'v8_use_mips_abi_hardfloat=="true"', { 409 'defines': [ 410 '__mips_hard_float=1', 411 'CAN_USE_FPU_INSTRUCTIONS', 412 ], 413 }, { 414 'defines': [ 415 '__mips_soft_float=1' 416 ] 417 }], 418 ], 419 'target_conditions': [ 420 ['_toolset=="target"', { 421 'conditions': [ 422 ['v8_target_arch==target_arch', { 423 # Target built with a Mips CXX compiler. 424 'cflags': [ 425 '-EB', 426 '-Wno-error=array-bounds', # Workaround https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56273 427 ], 428 'ldflags': ['-EB'], 429 'conditions': [ 430 [ 'v8_use_mips_abi_hardfloat=="true"', { 431 'cflags': ['-mhard-float'], 432 'ldflags': ['-mhard-float'], 433 }, { 434 'cflags': ['-msoft-float'], 435 'ldflags': ['-msoft-float'], 436 }], 437 ['mips_arch_variant=="r6"', { 438 'defines': [ 439 '_MIPS_ARCH_MIPS32R6', 440 'FPU_MODE_FP64', 441 ], 442 'cflags!': ['-mfp32', '-mfpxx'], 443 'conditions': [ 444 [ 'clang==0', { 445 'cflags': ['-Wa,-mips32r6'], 446 }], 447 ], 448 'cflags': ['-mips32r6'], 449 'ldflags': ['-mips32r6'], 450 }], 451 ['mips_arch_variant=="r6" and mips_use_msa==1', { 452 'defines': [ '_MIPS_MSA' ], 453 }], 454 ['mips_arch_variant=="r2"', { 455 'conditions': [ 456 [ 'mips_fpu_mode=="fp64"', { 457 'defines': [ 458 '_MIPS_ARCH_MIPS32R2', 459 'FPU_MODE_FP64', 460 ], 461 'cflags': ['-mfp64'], 462 }], 463 ['mips_fpu_mode=="fpxx"', { 464 'defines': [ 465 '_MIPS_ARCH_MIPS32R2', 466 'FPU_MODE_FPXX', 467 ], 468 'cflags': ['-mfpxx'], 469 }], 470 ['mips_fpu_mode=="fp32"', { 471 'defines': [ 472 '_MIPS_ARCH_MIPS32R2', 473 'FPU_MODE_FP32', 474 ], 475 'cflags': ['-mfp32'], 476 }], 477 [ 'clang==0', { 478 'cflags': ['-Wa,-mips32r2'], 479 }], 480 ], 481 'cflags': ['-mips32r2'], 482 'ldflags': ['-mips32r2'], 483 }], 484 ['mips_arch_variant=="r1"', { 485 'defines': [ 486 'FPU_MODE_FP32', 487 ], 488 'cflags!': ['-mfp64', '-mfpxx'], 489 'conditions': [ 490 [ 'clang==0', { 491 'cflags': ['-Wa,-mips32'], 492 }], 493 ], 494 'cflags': ['-mips32'], 495 'ldflags': ['-mips32'], 496 }], 497 ['mips_arch_variant=="rx"', { 498 'defines': [ 499 '_MIPS_ARCH_MIPS32RX', 500 'FPU_MODE_FPXX', 501 ], 502 'cflags!': ['-mfp64', '-mfp32'], 503 'conditions': [ 504 [ 'clang==0', { 505 'cflags': ['-Wa,-mips32'], 506 }], 507 ], 508 'cflags': ['-mips32', '-mfpxx'], 509 'ldflags': ['-mips32'], 510 }], 511 ], 512 }, { 513 # 'v8_target_arch!=target_arch' 514 # Target not built with an MIPS CXX compiler (simulator build). 515 'conditions': [ 516 ['mips_arch_variant=="r6"', { 517 'defines': [ 518 '_MIPS_ARCH_MIPS32R6', 519 'FPU_MODE_FP64', 520 ], 521 }], 522 ['mips_arch_variant=="r6" and mips_use_msa==1', { 523 'defines': [ '_MIPS_MSA' ], 524 }], 525 ['mips_arch_variant=="r2"', { 526 'conditions': [ 527 [ 'mips_fpu_mode=="fp64"', { 528 'defines': [ 529 '_MIPS_ARCH_MIPS32R2', 530 'FPU_MODE_FP64', 531 ], 532 }], 533 ['mips_fpu_mode=="fpxx"', { 534 'defines': [ 535 '_MIPS_ARCH_MIPS32R2', 536 'FPU_MODE_FPXX', 537 ], 538 }], 539 ['mips_fpu_mode=="fp32"', { 540 'defines': [ 541 '_MIPS_ARCH_MIPS32R2', 542 'FPU_MODE_FP32', 543 ], 544 }], 545 ], 546 }], 547 ['mips_arch_variant=="r1"', { 548 'defines': [ 549 'FPU_MODE_FP32', 550 ], 551 }], 552 ['mips_arch_variant=="rx"', { 553 'defines': [ 554 '_MIPS_ARCH_MIPS32RX', 555 'FPU_MODE_FPXX', 556 ], 557 }], 558 ], 559 }], 560 ], 561 }], #_toolset=="target" 562 ['_toolset=="host"', { 563 'conditions': [ 564 ['mips_arch_variant=="rx"', { 565 'defines': [ 566 '_MIPS_ARCH_MIPS32RX', 567 'FPU_MODE_FPXX', 568 ], 569 }], 570 ['mips_arch_variant=="r6"', { 571 'defines': [ 572 '_MIPS_ARCH_MIPS32R6', 573 'FPU_MODE_FP64', 574 ], 575 }], 576 ['mips_arch_variant=="r6" and mips_use_msa==1', { 577 'defines': [ '_MIPS_MSA' ], 578 }], 579 ['mips_arch_variant=="r2"', { 580 'conditions': [ 581 ['mips_fpu_mode=="fp64"', { 582 'defines': [ 583 '_MIPS_ARCH_MIPS32R2', 584 'FPU_MODE_FP64', 585 ], 586 }], 587 ['mips_fpu_mode=="fpxx"', { 588 'defines': [ 589 '_MIPS_ARCH_MIPS32R2', 590 'FPU_MODE_FPXX', 591 ], 592 }], 593 ['mips_fpu_mode=="fp32"', { 594 'defines': [ 595 '_MIPS_ARCH_MIPS32R2', 596 'FPU_MODE_FP32' 597 ], 598 }], 599 ], 600 }], 601 ['mips_arch_variant=="r1"', { 602 'defines': ['FPU_MODE_FP32',], 603 }], 604 ] 605 }], #_toolset=="host" 606 ], 607 }], # v8_target_arch=="mips" 608 ['v8_target_arch=="mipsel"', { 609 'defines': [ 610 'V8_TARGET_ARCH_MIPS', 611 ], 612 'conditions': [ 613 [ 'v8_can_use_fpu_instructions=="true"', { 614 'defines': [ 615 'CAN_USE_FPU_INSTRUCTIONS', 616 ], 617 }], 618 [ 'v8_use_mips_abi_hardfloat=="true"', { 619 'defines': [ 620 '__mips_hard_float=1', 621 'CAN_USE_FPU_INSTRUCTIONS', 622 ], 623 }, { 624 'defines': [ 625 '__mips_soft_float=1' 626 ], 627 }], 628 ], 629 'target_conditions': [ 630 ['_toolset=="target"', { 631 'conditions': [ 632 ['v8_target_arch==target_arch', { 633 # Target built with a Mips CXX compiler. 634 'cflags': [ 635 '-EL', 636 '-Wno-error=array-bounds', # Workaround https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56273 637 ], 638 'ldflags': ['-EL'], 639 'conditions': [ 640 [ 'v8_use_mips_abi_hardfloat=="true"', { 641 'cflags': ['-mhard-float'], 642 'ldflags': ['-mhard-float'], 643 }, { 644 'cflags': ['-msoft-float'], 645 'ldflags': ['-msoft-float'], 646 }], 647 ['mips_arch_variant=="r6"', { 648 'defines': [ 649 '_MIPS_ARCH_MIPS32R6', 650 'FPU_MODE_FP64', 651 ], 652 'cflags!': ['-mfp32', '-mfpxx'], 653 'conditions': [ 654 [ 'clang==0', { 655 'cflags': ['-Wa,-mips32r6'], 656 }], 657 ], 658 'cflags': ['-mips32r6'], 659 'ldflags': ['-mips32r6'], 660 }], 661 ['mips_arch_variant=="r6" and mips_use_msa==1', { 662 'defines': [ '_MIPS_MSA' ], 663 }], 664 ['mips_arch_variant=="r2"', { 665 'conditions': [ 666 [ 'mips_fpu_mode=="fp64"', { 667 'defines': [ 668 '_MIPS_ARCH_MIPS32R2', 669 'FPU_MODE_FP64', 670 ], 671 'cflags': ['-mfp64'], 672 }], 673 ['mips_fpu_mode=="fpxx"', { 674 'defines': [ 675 '_MIPS_ARCH_MIPS32R2', 676 'FPU_MODE_FPXX', 677 ], 678 'cflags': ['-mfpxx'], 679 }], 680 ['mips_fpu_mode=="fp32"', { 681 'defines': [ 682 '_MIPS_ARCH_MIPS32R2', 683 'FPU_MODE_FP32', 684 ], 685 'cflags': ['-mfp32'], 686 }], 687 [ 'clang==0', { 688 'cflags': ['-Wa,-mips32r2'], 689 }], 690 ], 691 'cflags': ['-mips32r2'], 692 'ldflags': ['-mips32r2'], 693 }], 694 ['mips_arch_variant=="r1"', { 695 'defines': [ 696 'FPU_MODE_FP32', 697 ], 698 'cflags!': ['-mfp64', '-mfpxx'], 699 'conditions': [ 700 [ 'clang==0', { 701 'cflags': ['-Wa,-mips32'], 702 }], 703 ], 704 'cflags': ['-mips32'], 705 'ldflags': ['-mips32'], 706 }], 707 ['mips_arch_variant=="rx"', { 708 'defines': [ 709 '_MIPS_ARCH_MIPS32RX', 710 'FPU_MODE_FPXX', 711 ], 712 'cflags!': ['-mfp64', '-mfp32'], 713 'conditions': [ 714 [ 'clang==0', { 715 'cflags': ['-Wa,-mips32'], 716 }], 717 ], 718 'cflags': ['-mips32', '-mfpxx'], 719 'ldflags': ['-mips32'], 720 }], 721 ['mips_arch_variant=="loongson"', { 722 'defines': [ 723 '_MIPS_ARCH_LOONGSON', 724 'FPU_MODE_FP32', 725 ], 726 'cflags!': ['-mfp64', '-mfpxx'], 727 'conditions': [ 728 [ 'clang==0', { 729 'cflags': ['-Wa,-mips3'], 730 }], 731 ], 732 'cflags': ['-mips3', '-mfp32'], 733 }], 734 ], 735 }, { 736 # 'v8_target_arch!=target_arch' 737 # Target not built with an MIPS CXX compiler (simulator build). 738 'conditions': [ 739 ['mips_arch_variant=="r6"', { 740 'defines': [ 741 '_MIPS_ARCH_MIPS32R6', 742 'FPU_MODE_FP64', 743 ], 744 }], 745 ['mips_arch_variant=="r6" and mips_use_msa==1', { 746 'defines': [ '_MIPS_MSA' ], 747 }], 748 ['mips_arch_variant=="r2"', { 749 'conditions': [ 750 [ 'mips_fpu_mode=="fp64"', { 751 'defines': [ 752 '_MIPS_ARCH_MIPS32R2', 753 'FPU_MODE_FP64', 754 ], 755 }], 756 ['mips_fpu_mode=="fpxx"', { 757 'defines': [ 758 '_MIPS_ARCH_MIPS32R2', 759 'FPU_MODE_FPXX', 760 ], 761 }], 762 ['mips_fpu_mode=="fp32"', { 763 'defines': [ 764 '_MIPS_ARCH_MIPS32R2', 765 'FPU_MODE_FP32', 766 ], 767 }], 768 ], 769 }], 770 ['mips_arch_variant=="r1"', { 771 'defines': [ 772 'FPU_MODE_FP32', 773 ], 774 }], 775 ['mips_arch_variant=="rx"', { 776 'defines': [ 777 '_MIPS_ARCH_MIPS32RX', 778 'FPU_MODE_FPXX', 779 ], 780 }], 781 ['mips_arch_variant=="loongson"', { 782 'defines': [ 783 '_MIPS_ARCH_LOONGSON', 784 'FPU_MODE_FP32', 785 ], 786 }], 787 ], 788 }], 789 ], 790 }], #_toolset=="target 791 ['_toolset=="host"', { 792 'conditions': [ 793 ['mips_arch_variant=="rx"', { 794 'defines': [ 795 '_MIPS_ARCH_MIPS32RX', 796 'FPU_MODE_FPXX', 797 ], 798 }], 799 ['mips_arch_variant=="r6"', { 800 'defines': [ 801 '_MIPS_ARCH_MIPS32R6', 802 'FPU_MODE_FP64', 803 ], 804 }], 805 ['mips_arch_variant=="r6" and mips_use_msa==1', { 806 'defines': [ '_MIPS_MSA' ], 807 }], 808 ['mips_arch_variant=="r2"', { 809 'conditions': [ 810 ['mips_fpu_mode=="fp64"', { 811 'defines': [ 812 '_MIPS_ARCH_MIPS32R2', 813 'FPU_MODE_FP64', 814 ], 815 }], 816 ['mips_fpu_mode=="fpxx"', { 817 'defines': [ 818 '_MIPS_ARCH_MIPS32R2', 819 'FPU_MODE_FPXX', 820 ], 821 }], 822 ['mips_fpu_mode=="fp32"', { 823 'defines': [ 824 '_MIPS_ARCH_MIPS32R2', 825 'FPU_MODE_FP32' 826 ], 827 }], 828 ], 829 }], 830 ['mips_arch_variant=="r1"', { 831 'defines': ['FPU_MODE_FP32',], 832 }], 833 ['mips_arch_variant=="loongson"', { 834 'defines': [ 835 '_MIPS_ARCH_LOONGSON', 836 'FPU_MODE_FP32', 837 ], 838 }], 839 ] 840 }], 841 ], 842 }], # v8_target_arch=="mipsel" 843 ['v8_target_arch=="mips64el" or v8_target_arch=="mips64"', { 844 'defines': [ 845 'V8_TARGET_ARCH_MIPS64', 846 ], 847 'conditions': [ 848 [ 'v8_can_use_fpu_instructions=="true"', { 849 'defines': [ 850 'CAN_USE_FPU_INSTRUCTIONS', 851 ], 852 }], 853 [ 'v8_host_byteorder=="little"', { 854 'defines': [ 855 'V8_TARGET_ARCH_MIPS64_LE', 856 ], 857 }], 858 [ 'v8_host_byteorder=="big"', { 859 'defines': [ 860 'V8_TARGET_ARCH_MIPS64_BE', 861 ], 862 }], 863 [ 'v8_use_mips_abi_hardfloat=="true"', { 864 'defines': [ 865 '__mips_hard_float=1', 866 'CAN_USE_FPU_INSTRUCTIONS', 867 ], 868 }, { 869 'defines': [ 870 '__mips_soft_float=1' 871 ], 872 }], 873 ], 874 'target_conditions': [ 875 ['_toolset=="target"', { 876 'conditions': [ 877 ['v8_target_arch==target_arch', { 878 'cflags': [ 879 '-Wno-error=array-bounds', # Workaround https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56273 880 ], 881 'conditions': [ 882 ['v8_target_arch=="mips64el"', { 883 'cflags': ['-EL'], 884 'ldflags': ['-EL'], 885 }], 886 ['v8_target_arch=="mips64"', { 887 'cflags': ['-EB'], 888 'ldflags': ['-EB'], 889 }], 890 [ 'v8_use_mips_abi_hardfloat=="true"', { 891 'cflags': ['-mhard-float'], 892 'ldflags': ['-mhard-float'], 893 }, { 894 'cflags': ['-msoft-float'], 895 'ldflags': ['-msoft-float'], 896 }], 897 ['mips_arch_variant=="r6"', { 898 'defines': ['_MIPS_ARCH_MIPS64R6',], 899 'conditions': [ 900 [ 'clang==0', { 901 'cflags': ['-Wa,-mips64r6'], 902 }], 903 ], 904 'cflags': ['-mips64r6', '-mabi=64'], 905 'ldflags': ['-mips64r6', '-mabi=64'], 906 }], 907 ['mips_arch_variant=="r6" and mips_use_msa==1', { 908 'defines': [ '_MIPS_MSA' ], 909 }], 910 ['mips_arch_variant=="r2"', { 911 'defines': ['_MIPS_ARCH_MIPS64R2',], 912 'conditions': [ 913 [ 'clang==0', { 914 'cflags': ['-Wa,-mips64r2'], 915 }], 916 ], 917 'cflags': ['-mips64r2', '-mabi=64'], 918 'ldflags': ['-mips64r2', '-mabi=64'], 919 }], 920 ], 921 }, { 922 # 'v8_target_arch!=target_arch' 923 # Target not built with an MIPS CXX compiler (simulator build). 924 'conditions': [ 925 ['mips_arch_variant=="r6"', { 926 'defines': ['_MIPS_ARCH_MIPS64R6',], 927 }], 928 ['mips_arch_variant=="r6" and mips_use_msa==1', { 929 'defines': [ '_MIPS_MSA' ], 930 }], 931 ['mips_arch_variant=="r2"', { 932 'defines': ['_MIPS_ARCH_MIPS64R2',], 933 }], 934 ], 935 }], 936 ], 937 }], #'_toolset=="target" 938 ['_toolset=="host"', { 939 'conditions': [ 940 ['mips_arch_variant=="r6"', { 941 'defines': ['_MIPS_ARCH_MIPS64R6',], 942 }], 943 ['mips_arch_variant=="r6" and mips_use_msa==1', { 944 'defines': [ '_MIPS_MSA' ], 945 }], 946 ['mips_arch_variant=="r2"', { 947 'defines': ['_MIPS_ARCH_MIPS64R2',], 948 }], 949 ], 950 }], #'_toolset=="host" 951 ], 952 }], # v8_target_arch=="mips64el" 953 ['v8_target_arch=="x64"', { 954 'defines': [ 955 'V8_TARGET_ARCH_X64', 956 ], 957 'xcode_settings': { 958 'ARCHS': [ 'x86_64' ], 959 }, 960 'msvs_settings': { 961 'VCLinkerTool': { 962 'StackReserveSize': '2097152', 963 }, 964 }, 965 'msvs_configuration_platform': 'x64', 966 }], # v8_target_arch=="x64" 967 ['OS=="win"', { 968 'defines': [ 969 'WIN32', 970 'NOMINMAX', # Refs: https://chromium-review.googlesource.com/c/v8/v8/+/1456620 971 '_WIN32_WINNT=0x0602', # Windows 8 972 ], 973 # 4351: VS 2005 and later are warning us that they've fixed a bug 974 # present in VS 2003 and earlier. 975 'msvs_disabled_warnings': [4351], 976 'msvs_configuration_attributes': { 977 'CharacterSet': '1', 978 }, 979 }], 980 ['OS=="win" and v8_target_arch=="ia32"', { 981 'msvs_settings': { 982 'VCCLCompilerTool': { 983 # Ensure no surprising artifacts from 80bit double math with x86. 984 'AdditionalOptions': ['/arch:SSE2'], 985 }, 986 }, 987 }], 988 ['OS=="win" and v8_enable_prof==1', { 989 'msvs_settings': { 990 'VCLinkerTool': { 991 'GenerateMapFile': 'true', 992 }, 993 }, 994 }], 995 ['OS=="android"', { 996 'defines': [ 997 'V8_HAVE_TARGET_OS', 998 'V8_TARGET_OS_ANDROID', 999 ] 1000 }], 1001 ['OS=="ios"', { 1002 'defines': [ 1003 'V8_HAVE_TARGET_OS', 1004 'V8_TARGET_OS_IOS', 1005 ] 1006 }], 1007 ['OS=="linux"', { 1008 'defines': [ 1009 'V8_HAVE_TARGET_OS', 1010 'V8_TARGET_OS_LINUX', 1011 ] 1012 }], 1013 ['OS=="mac"', { 1014 'defines': [ 1015 'V8_HAVE_TARGET_OS', 1016 'V8_TARGET_OS_MACOS', 1017 ] 1018 }], 1019 ['OS=="win"', { 1020 'defines': [ 1021 'V8_HAVE_TARGET_OS', 1022 'V8_TARGET_OS_WIN', 1023 ] 1024 }], 1025 ['(OS=="linux" or OS=="freebsd" or OS=="openbsd" or OS=="solaris" \ 1026 or OS=="netbsd" or OS=="mac" or OS=="android" or OS=="qnx") and \ 1027 v8_target_arch=="ia32"', { 1028 'cflags': [ 1029 '-msse2', 1030 '-mfpmath=sse', 1031 '-mmmx', # Allows mmintrin.h for MMX intrinsics. 1032 ], 1033 }], 1034 ['(OS=="linux" or OS=="freebsd" or OS=="openbsd" or OS=="solaris" \ 1035 or OS=="netbsd" or OS=="mac" or OS=="android" or OS=="qnx") and \ 1036 (v8_target_arch=="arm" or v8_target_arch=="ia32" or \ 1037 v8_target_arch=="mips" or v8_target_arch=="mipsel" or \ 1038 v8_target_arch=="ppc")', { 1039 'target_conditions': [ 1040 ['_toolset=="host"', { 1041 'conditions': [ 1042 ['host_cxx_is_biarch==1', { 1043 'conditions': [ 1044 ['host_arch=="s390x"', { 1045 'cflags': [ '-m31' ], 1046 'ldflags': [ '-m31' ] 1047 },{ 1048 'cflags': [ '-m32' ], 1049 'ldflags': [ '-m32' ] 1050 }], 1051 ], 1052 }], 1053 ], 1054 'xcode_settings': { 1055 'ARCHS': [ 'i386' ], 1056 }, 1057 }], 1058 ['_toolset=="target"', { 1059 'conditions': [ 1060 ['target_cxx_is_biarch==1', { 1061 'conditions': [ 1062 ['host_arch=="s390x"', { 1063 'cflags': [ '-m31' ], 1064 'ldflags': [ '-m31' ] 1065 },{ 1066 'cflags': [ '-m32' ], 1067 'ldflags': [ '-m32' ], 1068 }], 1069 ], 1070 }], 1071 ], 1072 'xcode_settings': { 1073 'ARCHS': [ 'i386' ], 1074 }, 1075 }], 1076 ], 1077 }], 1078 ['(OS=="linux" or OS=="android") and \ 1079 (v8_target_arch=="x64" or v8_target_arch=="arm64" or \ 1080 v8_target_arch=="ppc64" or v8_target_arch=="s390x")', { 1081 'target_conditions': [ 1082 ['_toolset=="host"', { 1083 'conditions': [ 1084 ['host_cxx_is_biarch==1', { 1085 'cflags': [ '-m64' ], 1086 'ldflags': [ '-m64' ] 1087 }], 1088 ], 1089 }], 1090 ['_toolset=="target"', { 1091 'conditions': [ 1092 ['target_cxx_is_biarch==1', { 1093 'cflags': [ '-m64' ], 1094 'ldflags': [ '-m64' ], 1095 }], 1096 ] 1097 }], 1098 ], 1099 }], 1100 ['OS=="android" and v8_android_log_stdout==1', { 1101 'defines': [ 1102 'V8_ANDROID_LOG_STDOUT', 1103 ], 1104 }], 1105 ['OS=="linux" or OS=="freebsd" or OS=="openbsd" or OS=="solaris" \ 1106 or OS=="netbsd" or OS=="qnx" or OS=="aix" or OS=="os400"', { 1107 'conditions': [ 1108 [ 'v8_no_strict_aliasing==1', { 1109 'cflags': [ '-fno-strict-aliasing' ], 1110 }], 1111 ], # conditions 1112 }], 1113 ['OS=="solaris"', { 1114 'defines': [ '__C99FEATURES__=1' ], # isinf() etc. 1115 }], 1116 ['OS=="freebsd" or OS=="openbsd"', { 1117 'cflags': [ '-I/usr/local/include' ], 1118 }], 1119 ['OS=="netbsd"', { 1120 'cflags': [ '-I/usr/pkg/include' ], 1121 }], 1122 ['OS=="aix" or OS=="os400"', { 1123 'defines': [ 1124 # Support for malloc(0) 1125 '_LINUX_SOURCE_COMPAT=1', 1126 '__STDC_FORMAT_MACROS', 1127 '_ALL_SOURCE=1'], 1128 'conditions': [ 1129 [ 'v8_target_arch=="ppc"', { 1130 'ldflags': [ '-Wl,-bmaxdata:0x60000000/dsa' ], 1131 }], 1132 [ 'v8_target_arch=="ppc64"', { 1133 'cflags': [ '-maix64', '-fdollars-in-identifiers', '-fno-extern-tls-init' ], 1134 'ldflags': [ '-maix64 -Wl,-bbigtoc' ], 1135 }], 1136 ], 1137 }], 1138 ], # conditions 1139 'configurations': { 1140 'Debug': { 1141 'defines': [ 1142 'ENABLE_DISASSEMBLER', 1143 'V8_ENABLE_CHECKS', 1144 'OBJECT_PRINT', 1145 'DEBUG', 1146 'V8_TRACE_MAPS', 1147 'V8_ENABLE_ALLOCATION_TIMEOUT', 1148 'V8_ENABLE_FORCE_SLOW_PATH', 1149 ], 1150 'conditions': [ 1151 ['OS=="linux" and v8_enable_backtrace==1', { 1152 # Support for backtrace_symbols. 1153 'ldflags': [ '-rdynamic' ], 1154 }], 1155 ['OS=="aix" or OS=="os400"', { 1156 'ldflags': [ '-Wl,-bbigtoc' ], 1157 'conditions': [ 1158 ['v8_target_arch=="ppc64"', { 1159 'cflags': [ '-maix64 -mcmodel=large' ], 1160 }], 1161 ], 1162 }], 1163 ['OS=="android"', { 1164 'variables': { 1165 'android_full_debug%': 1, 1166 }, 1167 'conditions': [ 1168 ['android_full_debug==0', { 1169 # Disable full debug if we want a faster v8 in a debug build. 1170 # TODO(2304): pass DISABLE_DEBUG_ASSERT instead of hiding DEBUG. 1171 'defines!': [ 1172 'DEBUG', 1173 'ENABLE_SLOW_DCHECKS', 1174 ], 1175 }], 1176 ], 1177 }], 1178 ['v8_optimized_debug==0', { 1179 'msvs_settings': { 1180 'VCCLCompilerTool': { 1181 'Optimization': '0', 1182 'conditions': [ 1183 ['component=="shared_library" or force_dynamic_crt==1', { 1184 'RuntimeLibrary': '3', # /MDd 1185 }, { 1186 'RuntimeLibrary': '1', # /MTd 1187 }], 1188 ], 1189 }, 1190 'VCLinkerTool': { 1191 'LinkIncremental': '2', 1192 }, 1193 }, 1194 'variables': { 1195 'v8_enable_slow_dchecks%': 1, 1196 }, 1197 'conditions': [ 1198 ['OS=="linux" or OS=="freebsd" or OS=="openbsd" or OS=="netbsd" or \ 1199 OS=="qnx" or OS=="aix" or OS=="os400"', { 1200 'cflags!': [ 1201 '-O3', 1202 '-O2', 1203 '-O1', 1204 '-Os', 1205 ], 1206 'cflags': [ 1207 '-fdata-sections', 1208 '-ffunction-sections', 1209 ], 1210 }], 1211 ['OS=="mac"', { 1212 'xcode_settings': { 1213 'GCC_OPTIMIZATION_LEVEL': '0', # -O0 1214 }, 1215 }], 1216 ['v8_enable_slow_dchecks==1', { 1217 'defines': [ 1218 'ENABLE_SLOW_DCHECKS', 1219 ], 1220 }], 1221 ], 1222 }, { 1223 'msvs_settings': { 1224 'VCCLCompilerTool': { 1225 'Optimization': '2', 1226 'InlineFunctionExpansion': '2', 1227 'EnableIntrinsicFunctions': 'true', 1228 'FavorSizeOrSpeed': '0', 1229 'StringPooling': 'true', 1230 'BasicRuntimeChecks': '0', 1231 'conditions': [ 1232 ['component=="shared_library" or force_dynamic_crt==1', { 1233 'RuntimeLibrary': '3', #/MDd 1234 }, { 1235 'RuntimeLibrary': '1', #/MTd 1236 }], 1237 ], 1238 }, 1239 'VCLinkerTool': { 1240 'LinkIncremental': '1', 1241 'OptimizeReferences': '2', 1242 'EnableCOMDATFolding': '2', 1243 }, 1244 }, 1245 'variables': { 1246 'v8_enable_slow_dchecks%': 0, 1247 }, 1248 'conditions': [ 1249 ['OS=="linux" or OS=="freebsd" or OS=="openbsd" or OS=="netbsd" or \ 1250 OS=="qnx" or OS=="aix" or OS=="os400"', { 1251 'cflags!': [ 1252 '-O0', 1253 '-O1', 1254 '-Os', 1255 ], 1256 'cflags': [ 1257 '-fdata-sections', 1258 '-ffunction-sections', 1259 ], 1260 'conditions': [ 1261 # Don't use -O3 with sanitizers. 1262 ['asan==0 and msan==0 and lsan==0 \ 1263 and tsan==0 and ubsan==0 and ubsan_vptr==0', { 1264 'cflags': ['-O3'], 1265 'cflags!': ['-O2'], 1266 }, { 1267 'cflags': ['-O2'], 1268 'cflags!': ['-O3'], 1269 }], 1270 ], 1271 }], 1272 ['OS=="mac"', { 1273 'xcode_settings': { 1274 'GCC_OPTIMIZATION_LEVEL': '3', # -O3 1275 'GCC_STRICT_ALIASING': 'YES', 1276 }, 1277 }], 1278 ['v8_enable_slow_dchecks==1', { 1279 'defines': [ 1280 'ENABLE_SLOW_DCHECKS', 1281 ], 1282 }], 1283 ], 1284 }], 1285 # Temporary refs: https://github.com/nodejs/node/pull/23801 1286 ['v8_enable_handle_zapping==1', { 1287 'defines': ['ENABLE_HANDLE_ZAPPING',], 1288 }], 1289 ], 1290 1291 }, # DebugBaseCommon 1292 'Release': { 1293 'variables': { 1294 'v8_enable_slow_dchecks%': 0, 1295 }, 1296 # Temporary refs: https://github.com/nodejs/node/pull/23801 1297 'defines!': ['ENABLE_HANDLE_ZAPPING',], 1298 'conditions': [ 1299 ['OS=="linux" or OS=="freebsd" or OS=="openbsd" or OS=="netbsd" \ 1300 or OS=="aix" or OS=="os400"', { 1301 'cflags!': [ 1302 '-Os', 1303 ], 1304 'cflags': [ 1305 '-fdata-sections', 1306 '-ffunction-sections', 1307 ], 1308 'conditions': [ 1309 # Don't use -O3 with sanitizers. 1310 ['asan==0 and msan==0 and lsan==0 \ 1311 and tsan==0 and ubsan==0 and ubsan_vptr==0', { 1312 'cflags': ['-O3'], 1313 'cflags!': ['-O2'], 1314 }, { 1315 'cflags': ['-O2'], 1316 'cflags!': ['-O3'], 1317 }], 1318 ], 1319 }], 1320 ['OS=="android"', { 1321 'cflags!': [ 1322 '-O3', 1323 '-Os', 1324 ], 1325 'cflags': [ 1326 '-fdata-sections', 1327 '-ffunction-sections', 1328 '-O2', 1329 ], 1330 }], 1331 ['OS=="mac"', { 1332 'xcode_settings': { 1333 'GCC_OPTIMIZATION_LEVEL': '3', # -O3 1334 1335 # -fstrict-aliasing. Mainline gcc 1336 # enables this at -O2 and above, 1337 # but Apple gcc does not unless it 1338 # is specified explicitly. 1339 'GCC_STRICT_ALIASING': 'YES', 1340 }, 1341 }], # OS=="mac" 1342 ['OS=="win"', { 1343 'msvs_settings': { 1344 'VCCLCompilerTool': { 1345 'Optimization': '2', 1346 'InlineFunctionExpansion': '2', 1347 'EnableIntrinsicFunctions': 'true', 1348 'FavorSizeOrSpeed': '0', 1349 'StringPooling': 'true', 1350 'conditions': [ 1351 ['component=="shared_library" or force_dynamic_crt==1', { 1352 'RuntimeLibrary': '2', #/MD 1353 }, { 1354 'RuntimeLibrary': '0', #/MT 1355 }], 1356 ], 1357 }, 1358 'VCLinkerTool': { 1359 'LinkIncremental': '1', 1360 'OptimizeReferences': '2', 1361 'EnableCOMDATFolding': '2', 1362 }, 1363 }, 1364 }], # OS=="win" 1365 ['v8_enable_slow_dchecks==1', { 1366 'defines': [ 1367 'ENABLE_SLOW_DCHECKS', 1368 ], 1369 }], 1370 ], # conditions 1371 }, # Release 1372 }, # configurations 1373 'msvs_disabled_warnings': [ 1374 4129, # unrecognized character escape sequence (torque-generated) 1375 4245, # Conversion with signed/unsigned mismatch. 1376 4267, # Conversion with possible loss of data. 1377 4324, # Padding structure due to alignment. 1378 # 4351, # [refack] Old issue with array init. 1379 4355, # 'this' used in base member initializer list 1380 4506, # Benign "no definition for inline function" 1381 4661, # no suitable definition provided for explicit template instantiation request 1382 4701, # Potentially uninitialized local variable. 1383 4702, # Unreachable code. 1384 4703, # Potentially uninitialized local pointer variable. 1385 4709, # Comma operator within array index expr (bugged). 1386 4714, # Function marked forceinline not inlined. 1387 4715, # Not all control paths return a value. (see https://crbug.com/v8/7658) 1388 4718, # Recursive call has no side-effect. 1389 4723, # https://crbug.com/v8/7771 1390 4724, # https://crbug.com/v8/7771 1391 4800, # Forcing value to bool. 1392 ], 1393 # Relevant only for x86. 1394 # Refs: https://github.com/nodejs/node/pull/25852 1395 # Refs: https://docs.microsoft.com/en-us/cpp/build/reference/safeseh-image-has-safe-exception-handlers 1396 'msvs_settings': { 1397 'VCLinkerTool': { 1398 'ImageHasSafeExceptionHandlers': 'false', 1399 }, 1400 }, 1401 }, # target_defaults 1402} 1403