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          ],
320      }],  # s390
321      ['v8_target_arch=="ppc" or v8_target_arch=="ppc64"', {
322        'defines': [
323          'V8_TARGET_ARCH_PPC',
324        ],
325        'conditions': [
326          ['v8_target_arch=="ppc64"', {
327            'defines': [
328              'V8_TARGET_ARCH_PPC64',
329            ],
330          }],
331          ['v8_host_byteorder=="little"', {
332            'defines': [
333              'V8_TARGET_ARCH_PPC_LE',
334            ],
335          }],
336          ['v8_host_byteorder=="big"', {
337            'defines': [
338              'V8_TARGET_ARCH_PPC_BE',
339            ],
340            'conditions': [
341              ['OS=="aix"', {
342                # Work around AIX ceil, trunc and round oddities.
343                'cflags': [ '-mcpu=power5+ -mfprnd' ],
344              }],
345              ['OS=="aix"', {
346                # Work around AIX assembler popcntb bug.
347                'cflags': [ '-mno-popcntb' ],
348              }],
349            ],
350          }],
351        ],
352      }],  # ppc
353      ['v8_target_arch=="ia32"', {
354        'defines': [
355          'V8_TARGET_ARCH_IA32',
356        ],
357      }],  # v8_target_arch=="ia32"
358      ['v8_target_arch=="x87"', {
359        'defines': [
360          'V8_TARGET_ARCH_X87',
361        ],
362        'cflags': ['-march=i586'],
363      }],  # v8_target_arch=="x87"
364      ['v8_target_arch=="mips" or v8_target_arch=="mipsel" \
365        or v8_target_arch=="mips64" or v8_target_arch=="mips64el"', {
366        'target_conditions': [
367          ['_toolset=="target"', {
368            'conditions': [
369              ['v8_target_arch==target_arch', {
370                # Target built with a Mips CXX compiler.
371                'variables': {
372                  'ldso_path%': '<!(/bin/echo -n $LDSO_PATH)',
373                  'ld_r_path%': '<!(/bin/echo -n $LD_R_PATH)',
374                },
375                'conditions': [
376                  ['ldso_path!=""', {
377                    'ldflags': ['-Wl,--dynamic-linker=<(ldso_path)'],
378                  }],
379                  ['ld_r_path!=""', {
380                    'ldflags': ['-Wl,--rpath=<(ld_r_path)'],
381                  }],
382                  [ 'clang==1', {
383                    'cflags': ['-integrated-as'],
384                  }],
385                  ['OS!="mac"', {
386                    'defines': ['_MIPS_TARGET_HW',],
387                  }, {
388                    'defines': ['_MIPS_TARGET_SIMULATOR',],
389                  }],
390                ],
391              }, {
392                'defines': ['_MIPS_TARGET_SIMULATOR',],
393              }],
394            ],
395          }],  #'_toolset=="target"
396          ['_toolset=="host"', {
397            'conditions': [
398              ['v8_target_arch==target_arch and OS!="mac"', {
399                'defines': ['_MIPS_TARGET_HW',],
400              }, {
401                'defines': ['_MIPS_TARGET_SIMULATOR',],
402              }],
403            ],
404          }],  #'_toolset=="host"
405        ],
406      }],
407      ['v8_target_arch=="mips"', {
408        'defines': [
409          'V8_TARGET_ARCH_MIPS',
410        ],
411        'conditions': [
412          [ 'v8_can_use_fpu_instructions=="true"', {
413            'defines': [
414              'CAN_USE_FPU_INSTRUCTIONS',
415            ],
416          }],
417          [ 'v8_use_mips_abi_hardfloat=="true"', {
418            'defines': [
419              '__mips_hard_float=1',
420              'CAN_USE_FPU_INSTRUCTIONS',
421            ],
422          }, {
423            'defines': [
424              '__mips_soft_float=1'
425            ]
426          }],
427        ],
428        'target_conditions': [
429          ['_toolset=="target"', {
430            'conditions': [
431              ['v8_target_arch==target_arch', {
432                # Target built with a Mips CXX compiler.
433                'cflags': [
434                  '-EB',
435                  '-Wno-error=array-bounds',  # Workaround https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56273
436                ],
437                'ldflags': ['-EB'],
438                'conditions': [
439                  [ 'v8_use_mips_abi_hardfloat=="true"', {
440                    'cflags': ['-mhard-float'],
441                    'ldflags': ['-mhard-float'],
442                  }, {
443                    'cflags': ['-msoft-float'],
444                    'ldflags': ['-msoft-float'],
445                  }],
446                  ['mips_arch_variant=="r6"', {
447                    'defines': [
448                      '_MIPS_ARCH_MIPS32R6',
449                      'FPU_MODE_FP64',
450                    ],
451                    'cflags!': ['-mfp32', '-mfpxx'],
452                    'conditions': [
453                      [ 'clang==0', {
454                        'cflags': ['-Wa,-mips32r6'],
455                      }],
456                    ],
457                    'cflags': ['-mips32r6'],
458                    'ldflags': ['-mips32r6'],
459                  }],
460                  ['mips_arch_variant=="r2"', {
461                    'conditions': [
462                      [ 'mips_fpu_mode=="fp64"', {
463                        'defines': [
464                          '_MIPS_ARCH_MIPS32R2',
465                          'FPU_MODE_FP64',
466                        ],
467                        'cflags': ['-mfp64'],
468                      }],
469                      ['mips_fpu_mode=="fpxx"', {
470                        'defines': [
471                          '_MIPS_ARCH_MIPS32R2',
472                          'FPU_MODE_FPXX',
473                        ],
474                        'cflags': ['-mfpxx'],
475                      }],
476                      ['mips_fpu_mode=="fp32"', {
477                        'defines': [
478                          '_MIPS_ARCH_MIPS32R2',
479                          'FPU_MODE_FP32',
480                        ],
481                        'cflags': ['-mfp32'],
482                      }],
483                      [ 'clang==0', {
484                        'cflags': ['-Wa,-mips32r2'],
485                      }],
486                    ],
487                    'cflags': ['-mips32r2'],
488                    'ldflags': ['-mips32r2'],
489                  }],
490                  ['mips_arch_variant=="r1"', {
491                    'defines': [
492                      'FPU_MODE_FP32',
493                    ],
494                    'cflags!': ['-mfp64', '-mfpxx'],
495                    'conditions': [
496                      [ 'clang==0', {
497                        'cflags': ['-Wa,-mips32'],
498                      }],
499                    ],
500                    'cflags': ['-mips32'],
501                    'ldflags': ['-mips32'],
502                  }],
503                  ['mips_arch_variant=="rx"', {
504                    'defines': [
505                      '_MIPS_ARCH_MIPS32RX',
506                      'FPU_MODE_FPXX',
507                    ],
508                    'cflags!': ['-mfp64', '-mfp32'],
509                    'conditions': [
510                      [ 'clang==0', {
511                        'cflags': ['-Wa,-mips32'],
512                      }],
513                    ],
514                    'cflags': ['-mips32', '-mfpxx'],
515                    'ldflags': ['-mips32'],
516                  }],
517                ],
518              }, {
519                # 'v8_target_arch!=target_arch'
520                # Target not built with an MIPS CXX compiler (simulator build).
521                'conditions': [
522                  ['mips_arch_variant=="r6"', {
523                    'defines': [
524                      '_MIPS_ARCH_MIPS32R6',
525                      'FPU_MODE_FP64',
526                    ],
527                  }],
528                  ['mips_arch_variant=="r2"', {
529                    'conditions': [
530                      [ 'mips_fpu_mode=="fp64"', {
531                        'defines': [
532                          '_MIPS_ARCH_MIPS32R2',
533                          'FPU_MODE_FP64',
534                        ],
535                      }],
536                      ['mips_fpu_mode=="fpxx"', {
537                        'defines': [
538                          '_MIPS_ARCH_MIPS32R2',
539                          'FPU_MODE_FPXX',
540                        ],
541                      }],
542                      ['mips_fpu_mode=="fp32"', {
543                        'defines': [
544                          '_MIPS_ARCH_MIPS32R2',
545                          'FPU_MODE_FP32',
546                        ],
547                      }],
548                    ],
549                  }],
550                  ['mips_arch_variant=="r1"', {
551                    'defines': [
552                      'FPU_MODE_FP32',
553                    ],
554                  }],
555                  ['mips_arch_variant=="rx"', {
556                    'defines': [
557                      '_MIPS_ARCH_MIPS32RX',
558                      'FPU_MODE_FPXX',
559                    ],
560                  }],
561                ],
562              }],
563            ],
564          }],  #_toolset=="target"
565          ['_toolset=="host"', {
566            'conditions': [
567              ['mips_arch_variant=="rx"', {
568                'defines': [
569                  '_MIPS_ARCH_MIPS32RX',
570                  'FPU_MODE_FPXX',
571                ],
572              }],
573              ['mips_arch_variant=="r6"', {
574                'defines': [
575                  '_MIPS_ARCH_MIPS32R6',
576                  'FPU_MODE_FP64',
577                ],
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=="r2"', {
662                    'conditions': [
663                      [ 'mips_fpu_mode=="fp64"', {
664                        'defines': [
665                          '_MIPS_ARCH_MIPS32R2',
666                          'FPU_MODE_FP64',
667                        ],
668                        'cflags': ['-mfp64'],
669                      }],
670                      ['mips_fpu_mode=="fpxx"', {
671                        'defines': [
672                          '_MIPS_ARCH_MIPS32R2',
673                          'FPU_MODE_FPXX',
674                        ],
675                        'cflags': ['-mfpxx'],
676                      }],
677                      ['mips_fpu_mode=="fp32"', {
678                        'defines': [
679                          '_MIPS_ARCH_MIPS32R2',
680                          'FPU_MODE_FP32',
681                        ],
682                        'cflags': ['-mfp32'],
683                      }],
684                      [ 'clang==0', {
685                        'cflags': ['-Wa,-mips32r2'],
686                      }],
687                    ],
688                    'cflags': ['-mips32r2'],
689                    'ldflags': ['-mips32r2'],
690                  }],
691                  ['mips_arch_variant=="r1"', {
692                    'defines': [
693                      'FPU_MODE_FP32',
694                    ],
695                    'cflags!': ['-mfp64', '-mfpxx'],
696                    'conditions': [
697                      [ 'clang==0', {
698                        'cflags': ['-Wa,-mips32'],
699                      }],
700                    ],
701                    'cflags': ['-mips32'],
702                    'ldflags': ['-mips32'],
703                  }],
704                  ['mips_arch_variant=="rx"', {
705                    'defines': [
706                      '_MIPS_ARCH_MIPS32RX',
707                      'FPU_MODE_FPXX',
708                    ],
709                    'cflags!': ['-mfp64', '-mfp32'],
710                    'conditions': [
711                      [ 'clang==0', {
712                        'cflags': ['-Wa,-mips32'],
713                      }],
714                    ],
715                    'cflags': ['-mips32', '-mfpxx'],
716                    'ldflags': ['-mips32'],
717                  }],
718                  ['mips_arch_variant=="loongson"', {
719                    'defines': [
720                      '_MIPS_ARCH_LOONGSON',
721                      'FPU_MODE_FP32',
722                    ],
723                    'cflags!': ['-mfp64', '-mfpxx'],
724                    'conditions': [
725                      [ 'clang==0', {
726                        'cflags': ['-Wa,-mips3'],
727                      }],
728                    ],
729                    'cflags': ['-mips3', '-mfp32'],
730                  }],
731                ],
732              }, {
733                # 'v8_target_arch!=target_arch'
734                # Target not built with an MIPS CXX compiler (simulator build).
735                'conditions': [
736                  ['mips_arch_variant=="r6"', {
737                    'defines': [
738                      '_MIPS_ARCH_MIPS32R6',
739                      'FPU_MODE_FP64',
740                    ],
741                  }],
742                  ['mips_arch_variant=="r2"', {
743                    'conditions': [
744                      [ 'mips_fpu_mode=="fp64"', {
745                        'defines': [
746                          '_MIPS_ARCH_MIPS32R2',
747                          'FPU_MODE_FP64',
748                        ],
749                      }],
750                      ['mips_fpu_mode=="fpxx"', {
751                        'defines': [
752                          '_MIPS_ARCH_MIPS32R2',
753                          'FPU_MODE_FPXX',
754                        ],
755                      }],
756                      ['mips_fpu_mode=="fp32"', {
757                        'defines': [
758                          '_MIPS_ARCH_MIPS32R2',
759                          'FPU_MODE_FP32',
760                        ],
761                      }],
762                    ],
763                  }],
764                  ['mips_arch_variant=="r1"', {
765                    'defines': [
766                      'FPU_MODE_FP32',
767                    ],
768                  }],
769                  ['mips_arch_variant=="rx"', {
770                    'defines': [
771                      '_MIPS_ARCH_MIPS32RX',
772                      'FPU_MODE_FPXX',
773                    ],
774                  }],
775                  ['mips_arch_variant=="loongson"', {
776                    'defines': [
777                      '_MIPS_ARCH_LOONGSON',
778                      'FPU_MODE_FP32',
779                    ],
780                  }],
781                ],
782              }],
783            ],
784          }], #_toolset=="target
785          ['_toolset=="host"', {
786            'conditions': [
787              ['mips_arch_variant=="rx"', {
788                'defines': [
789                  '_MIPS_ARCH_MIPS32RX',
790                  'FPU_MODE_FPXX',
791                ],
792              }],
793              ['mips_arch_variant=="r6"', {
794                'defines': [
795                  '_MIPS_ARCH_MIPS32R6',
796                  'FPU_MODE_FP64',
797                ],
798              }],
799              ['mips_arch_variant=="r2"', {
800                'conditions': [
801                  ['mips_fpu_mode=="fp64"', {
802                    'defines': [
803                      '_MIPS_ARCH_MIPS32R2',
804                      'FPU_MODE_FP64',
805                    ],
806                  }],
807                  ['mips_fpu_mode=="fpxx"', {
808                    'defines': [
809                      '_MIPS_ARCH_MIPS32R2',
810                      'FPU_MODE_FPXX',
811                    ],
812                  }],
813                  ['mips_fpu_mode=="fp32"', {
814                    'defines': [
815                      '_MIPS_ARCH_MIPS32R2',
816                      'FPU_MODE_FP32'
817                    ],
818                  }],
819                ],
820              }],
821              ['mips_arch_variant=="r1"', {
822                'defines': ['FPU_MODE_FP32',],
823              }],
824              ['mips_arch_variant=="loongson"', {
825                'defines': [
826                  '_MIPS_ARCH_LOONGSON',
827                  'FPU_MODE_FP32',
828                ],
829              }],
830            ]
831          }],
832        ],
833      }],  # v8_target_arch=="mipsel"
834      ['v8_target_arch=="mips64el" or v8_target_arch=="mips64"', {
835        'defines': [
836          'V8_TARGET_ARCH_MIPS64',
837        ],
838        'conditions': [
839          [ 'v8_can_use_fpu_instructions=="true"', {
840            'defines': [
841              'CAN_USE_FPU_INSTRUCTIONS',
842            ],
843          }],
844          [ 'v8_host_byteorder=="little"', {
845            'defines': [
846              'V8_TARGET_ARCH_MIPS64_LE',
847            ],
848          }],
849          [ 'v8_host_byteorder=="big"', {
850            'defines': [
851              'V8_TARGET_ARCH_MIPS64_BE',
852            ],
853          }],
854          [ 'v8_use_mips_abi_hardfloat=="true"', {
855            'defines': [
856              '__mips_hard_float=1',
857              'CAN_USE_FPU_INSTRUCTIONS',
858            ],
859          }, {
860            'defines': [
861              '__mips_soft_float=1'
862            ],
863          }],
864         ],
865        'target_conditions': [
866          ['_toolset=="target"', {
867            'conditions': [
868              ['v8_target_arch==target_arch', {
869                'cflags': [
870                  '-Wno-error=array-bounds',  # Workaround https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56273
871                ],
872                'conditions': [
873                  ['v8_target_arch=="mips64el"', {
874                    'cflags': ['-EL'],
875                    'ldflags': ['-EL'],
876                  }],
877                  ['v8_target_arch=="mips64"', {
878                    'cflags': ['-EB'],
879                    'ldflags': ['-EB'],
880                  }],
881                  [ 'v8_use_mips_abi_hardfloat=="true"', {
882                    'cflags': ['-mhard-float'],
883                    'ldflags': ['-mhard-float'],
884                  }, {
885                    'cflags': ['-msoft-float'],
886                    'ldflags': ['-msoft-float'],
887                  }],
888                  ['mips_arch_variant=="r6"', {
889                    'defines': ['_MIPS_ARCH_MIPS64R6',],
890                    'conditions': [
891                      [ 'clang==0', {
892                        'cflags': ['-Wa,-mips64r6'],
893                      }],
894                    ],
895                    'cflags': ['-mips64r6', '-mabi=64'],
896                    'ldflags': ['-mips64r6', '-mabi=64'],
897                  }],
898                  ['mips_arch_variant=="r2"', {
899                    'defines': ['_MIPS_ARCH_MIPS64R2',],
900                    'conditions': [
901                      [ 'clang==0', {
902                        'cflags': ['-Wa,-mips64r2'],
903                      }],
904                    ],
905                    'cflags': ['-mips64r2', '-mabi=64'],
906                    'ldflags': ['-mips64r2', '-mabi=64'],
907                  }],
908                ],
909              }, {
910                # 'v8_target_arch!=target_arch'
911                # Target not built with an MIPS CXX compiler (simulator build).
912                'conditions': [
913                  ['mips_arch_variant=="r6"', {
914                    'defines': ['_MIPS_ARCH_MIPS64R6',],
915                  }],
916                  ['mips_arch_variant=="r2"', {
917                    'defines': ['_MIPS_ARCH_MIPS64R2',],
918                  }],
919                ],
920              }],
921            ],
922          }],  #'_toolset=="target"
923          ['_toolset=="host"', {
924            'conditions': [
925              ['mips_arch_variant=="r6"', {
926                'defines': ['_MIPS_ARCH_MIPS64R6',],
927              }],
928              ['mips_arch_variant=="r2"', {
929                'defines': ['_MIPS_ARCH_MIPS64R2',],
930              }],
931            ],
932          }],  #'_toolset=="host"
933        ],
934      }],  # v8_target_arch=="mips64el"
935      ['v8_target_arch=="x64"', {
936        'defines': [
937          'V8_TARGET_ARCH_X64',
938        ],
939        'xcode_settings': {
940          'ARCHS': [ 'x86_64' ],
941        },
942        'msvs_settings': {
943          'VCLinkerTool': {
944            'StackReserveSize': '2097152',
945          },
946        },
947        'msvs_configuration_platform': 'x64',
948      }],  # v8_target_arch=="x64"
949      ['v8_target_arch=="x32"', {
950        'defines': [
951          # x32 port shares the source code with x64 port.
952          'V8_TARGET_ARCH_X64',
953          'V8_TARGET_ARCH_32_BIT',
954        ],
955        'cflags': [
956          '-mx32',
957          # Inhibit warning if long long type is used.
958          '-Wno-long-long',
959        ],
960        'ldflags': [
961          '-mx32',
962        ],
963      }],  # v8_target_arch=="x32"
964      ['linux_use_gold_flags==1', {
965        # Newer gccs and clangs support -fuse-ld, use the flag to force gold
966        # selection.
967        # gcc -- http://gcc.gnu.org/onlinedocs/gcc-4.8.0/gcc/Optimize-Options.html
968        'ldflags': [ '-fuse-ld=gold', ],
969      }],
970      ['linux_use_bundled_binutils==1', {
971        'cflags': [
972          '-B<!(cd <(DEPTH) && pwd -P)/<(binutils_dir)',
973        ],
974      }],
975      ['linux_use_bundled_gold==1', {
976        # Put our binutils, which contains gold in the search path. We pass
977        # the path to gold to the compiler. gyp leaves unspecified what the
978        # cwd is when running the compiler, so the normal gyp path-munging
979        # fails us. This hack gets the right path.
980        'ldflags': [
981          '-B<!(cd <(DEPTH) && pwd -P)/<(binutils_dir)',
982        ],
983      }],
984      ['OS=="win"', {
985        'defines': [
986          'WIN32',
987        ],
988        # 4351: VS 2005 and later are warning us that they've fixed a bug
989        #       present in VS 2003 and earlier.
990        'msvs_disabled_warnings': [4351],
991        'msvs_configuration_attributes': {
992          'OutputDirectory': '<(DEPTH)\\build\\$(ConfigurationName)',
993          'IntermediateDirectory': '$(OutDir)\\obj\\$(ProjectName)',
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