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