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