• Home
  • History
  • Annotate
  • 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    'clang%': 0,
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_noprobe%': '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    'v8_enable_backtrace%': 0,
59
60    # Enable profiling support. Only required on Windows.
61    'v8_enable_prof%': 0,
62
63    # Some versions of GCC 4.5 seem to need -fno-strict-aliasing.
64    'v8_no_strict_aliasing%': 0,
65
66    # Chrome needs this definition unconditionally. For standalone V8 builds,
67    # it's handled in build/standalone.gypi.
68    'want_separate_host_toolset%': 1,
69
70    # Toolset the d8 binary should be compiled for. Possible values are 'host'
71    # and 'target'. If you want to run v8 tests, it needs to be set to 'target'.
72    # The setting is ignored if want_separate_host_toolset is 0.
73    'v8_toolset_for_d8%': 'target',
74
75    'host_os%': '<(OS)',
76    'werror%': '-Werror',
77    # For a shared library build, results in "libv8-<(soname_version).so".
78    'soname_version%': '',
79
80    # Allow to suppress the array bounds warning (default is no suppression).
81    'wno_array_bounds%': '',
82
83    # Link-Time Optimizations
84    'use_lto%': 0,
85
86    'variables': {
87      # This is set when building the Android WebView inside the Android build
88      # system, using the 'android' gyp backend.
89      'android_webview_build%': 0,
90    },
91    # Copy it out one scope.
92    'android_webview_build%': '<(android_webview_build)',
93  },
94  'conditions': [
95    ['host_arch=="ia32" or host_arch=="x64" or clang==1', {
96      'variables': {
97        'host_cxx_is_biarch%': 1,
98       },
99     }, {
100      'variables': {
101        'host_cxx_is_biarch%': 0,
102      },
103    }],
104    ['target_arch=="ia32" or target_arch=="x64" or target_arch=="x87" or \
105      clang==1', {
106      'variables': {
107        'target_cxx_is_biarch%': 1,
108       },
109     }, {
110      'variables': {
111        'target_cxx_is_biarch%': 0,
112      },
113    }],
114  ],
115  'target_defaults': {
116    'conditions': [
117      ['v8_target_arch=="arm"', {
118        'defines': [
119          'V8_TARGET_ARCH_ARM',
120        ],
121        'conditions': [
122          [ 'arm_version==7 or arm_version=="default"', {
123            'defines': [
124              'CAN_USE_ARMV7_INSTRUCTIONS',
125            ],
126          }],
127          [ 'arm_fpu=="vfpv3-d16" or arm_fpu=="default"', {
128            'defines': [
129              'CAN_USE_VFP3_INSTRUCTIONS',
130            ],
131          }],
132          [ 'arm_fpu=="vfpv3"', {
133            'defines': [
134              'CAN_USE_VFP3_INSTRUCTIONS',
135              'CAN_USE_VFP32DREGS',
136            ],
137          }],
138          [ 'arm_fpu=="neon"', {
139            'defines': [
140              'CAN_USE_VFP3_INSTRUCTIONS',
141              'CAN_USE_VFP32DREGS',
142              'CAN_USE_NEON',
143            ],
144          }],
145          [ 'arm_test_noprobe=="on"', {
146            'defines': [
147              'ARM_TEST_NO_FEATURE_PROBE',
148            ],
149          }],
150        ],
151        'target_conditions': [
152          ['_toolset=="host"', {
153            'conditions': [
154              ['v8_target_arch==host_arch and android_webview_build==0', {
155                # Host built with an Arm CXX compiler.
156                'conditions': [
157                  [ 'arm_version==7', {
158                    'cflags': ['-march=armv7-a',],
159                  }],
160                  [ 'arm_version==7 or arm_version=="default"', {
161                    'conditions': [
162                      [ 'arm_fpu!="default"', {
163                        'cflags': ['-mfpu=<(arm_fpu)',],
164                      }],
165                    ],
166                  }],
167                  [ 'arm_float_abi!="default"', {
168                    'cflags': ['-mfloat-abi=<(arm_float_abi)',],
169                  }],
170                  [ 'arm_thumb==1', {
171                    'cflags': ['-mthumb',],
172                  }],
173                  [ 'arm_thumb==0', {
174                    'cflags': ['-marm',],
175                  }],
176                ],
177              }, {
178                # 'v8_target_arch!=host_arch'
179                # Host not built with an Arm CXX compiler (simulator build).
180                'conditions': [
181                  [ 'arm_float_abi=="hard"', {
182                    'defines': [
183                      'USE_EABI_HARDFLOAT=1',
184                    ],
185                  }],
186                  [ 'arm_float_abi=="softfp" or arm_float_abi=="default"', {
187                    'defines': [
188                      'USE_EABI_HARDFLOAT=0',
189                    ],
190                  }],
191                ],
192              }],
193            ],
194          }],  # _toolset=="host"
195          ['_toolset=="target"', {
196            'conditions': [
197              ['v8_target_arch==target_arch and android_webview_build==0', {
198                # Target built with an Arm CXX compiler.
199                'conditions': [
200                  [ 'arm_version==7', {
201                    'cflags': ['-march=armv7-a',],
202                  }],
203                  [ 'arm_version==7 or arm_version=="default"', {
204                    'conditions': [
205                      [ 'arm_fpu!="default"', {
206                        'cflags': ['-mfpu=<(arm_fpu)',],
207                      }],
208                    ],
209                  }],
210                  [ 'arm_float_abi!="default"', {
211                    'cflags': ['-mfloat-abi=<(arm_float_abi)',],
212                  }],
213                  [ 'arm_thumb==1', {
214                    'cflags': ['-mthumb',],
215                  }],
216                  [ 'arm_thumb==0', {
217                    'cflags': ['-marm',],
218                  }],
219                ],
220              }, {
221                # 'v8_target_arch!=target_arch'
222                # Target not built with an Arm CXX compiler (simulator build).
223                'conditions': [
224                  [ 'arm_float_abi=="hard"', {
225                    'defines': [
226                      'USE_EABI_HARDFLOAT=1',
227                    ],
228                  }],
229                  [ 'arm_float_abi=="softfp" or arm_float_abi=="default"', {
230                    'defines': [
231                      'USE_EABI_HARDFLOAT=0',
232                    ],
233                  }],
234                ],
235              }],
236              # Disable LTO for v8
237              # v8 is optimized for speed, which takes precedence over
238              # size optimization in LTO.
239              ['use_lto==1', {
240                'cflags!': [
241                  '-flto',
242                  '-ffat-lto-objects',
243                ],
244              }],
245            ],
246          }],  # _toolset=="target"
247        ],
248      }],  # v8_target_arch=="arm"
249      ['v8_target_arch=="arm64"', {
250        'defines': [
251          'V8_TARGET_ARCH_ARM64',
252        ],
253      }],
254      ['v8_target_arch=="ia32"', {
255        'defines': [
256          'V8_TARGET_ARCH_IA32',
257        ],
258      }],  # v8_target_arch=="ia32"
259      ['v8_target_arch=="x87"', {
260        'defines': [
261          'V8_TARGET_ARCH_X87',
262        ],
263        'cflags': ['-march=i586'],
264      }],  # v8_target_arch=="x87"
265      ['v8_target_arch=="mips"', {
266        'defines': [
267          'V8_TARGET_ARCH_MIPS',
268        ],
269        'conditions': [
270          [ 'v8_can_use_fpu_instructions=="true"', {
271            'defines': [
272              'CAN_USE_FPU_INSTRUCTIONS',
273            ],
274          }],
275          [ 'v8_use_mips_abi_hardfloat=="true"', {
276            'defines': [
277              '__mips_hard_float=1',
278              'CAN_USE_FPU_INSTRUCTIONS',
279            ],
280          }, {
281            'defines': [
282              '__mips_soft_float=1'
283            ]
284          }],
285        ],
286        'target_conditions': [
287          ['_toolset=="target"', {
288            'conditions': [
289              ['v8_target_arch==target_arch and android_webview_build==0', {
290                # Target built with a Mips CXX compiler.
291                'cflags': ['-EB'],
292                'ldflags': ['-EB'],
293                'conditions': [
294                  [ 'v8_use_mips_abi_hardfloat=="true"', {
295                    'cflags': ['-mhard-float'],
296                    'ldflags': ['-mhard-float'],
297                  }, {
298                    'cflags': ['-msoft-float'],
299                    'ldflags': ['-msoft-float'],
300                  }],
301                  ['mips_arch_variant=="r6"', {
302                    'defines': [
303                      '_MIPS_ARCH_MIPS32R6',
304                      'FPU_MODE_FP64',
305                    ],
306                    'cflags!': ['-mfp32', '-mfpxx'],
307                    'cflags': ['-mips32r6', '-Wa,-mips32r6'],
308                    'ldflags': [
309                      '-mips32r6',
310                      '-Wl,--dynamic-linker=$(LDSO_PATH)',
311                      '-Wl,--rpath=$(LD_R_PATH)',
312                    ],
313                  }],
314                  ['mips_arch_variant=="r2"', {
315                    'conditions': [
316                      [ 'mips_fpu_mode=="fp64"', {
317                        'defines': [
318                          '_MIPS_ARCH_MIPS32R2',
319                          'FPU_MODE_FP64',
320                        ],
321                        'cflags': ['-mfp64'],
322                      }],
323                      ['mips_fpu_mode=="fpxx"', {
324                        'defines': [
325                          '_MIPS_ARCH_MIPS32R2',
326                          'FPU_MODE_FPXX',
327                        ],
328                        'cflags': ['-mfpxx'],
329                      }],
330                      ['mips_fpu_mode=="fp32"', {
331                        'defines': [
332                          '_MIPS_ARCH_MIPS32R2',
333                          'FPU_MODE_FP32',
334                        ],
335                        'cflags': ['-mfp32'],
336                      }],
337                    ],
338                    'cflags': ['-mips32r2', '-Wa,-mips32r2'],
339                    'ldflags': ['-mips32r2'],
340                  }],
341                  ['mips_arch_variant=="r1"', {
342                    'defines': [
343                      'FPU_MODE_FP32',
344                    ],
345                    'cflags!': ['-mfp64', '-mfpxx'],
346                    'cflags': ['-mips32', '-Wa,-mips32'],
347                    'ldflags': ['-mips32'],
348                  }],
349                  ['mips_arch_variant=="rx"', {
350                    'defines': [
351                      '_MIPS_ARCH_MIPS32RX',
352                      'FPU_MODE_FPXX',
353                    ],
354                    'cflags!': ['-mfp64', '-mfp32'],
355                    'cflags': ['-mips32', '-Wa,-mips32', '-mfpxx'],
356                    'ldflags': ['-mips32'],
357                  }],
358                ],
359              }, {
360                # 'v8_target_arch!=target_arch'
361                # Target not built with an MIPS CXX compiler (simulator build).
362                'conditions': [
363                  ['mips_arch_variant=="r6"', {
364                    'defines': [
365                      '_MIPS_ARCH_MIPS32R6',
366                      'FPU_MODE_FP64',
367                    ],
368                  }],
369                  ['mips_arch_variant=="r2"', {
370                    'conditions': [
371                      [ 'mips_fpu_mode=="fp64"', {
372                        'defines': [
373                          '_MIPS_ARCH_MIPS32R2',
374                          'FPU_MODE_FP64',
375                        ],
376                      }],
377                      ['mips_fpu_mode=="fpxx"', {
378                        'defines': [
379                          '_MIPS_ARCH_MIPS32R2',
380                          'FPU_MODE_FPXX',
381                        ],
382                      }],
383                      ['mips_fpu_mode=="fp32"', {
384                        'defines': [
385                          '_MIPS_ARCH_MIPS32R2',
386                          'FPU_MODE_FP32',
387                        ],
388                      }],
389                    ],
390                  }],
391                  ['mips_arch_variant=="r1"', {
392                    'defines': [
393                      'FPU_MODE_FP32',
394                    ],
395                  }],
396                  ['mips_arch_variant=="rx"', {
397                    'defines': [
398                      '_MIPS_ARCH_MIPS32RX',
399                      'FPU_MODE_FPXX',
400                    ],
401                  }],
402                ],
403              }],
404            ],
405          }],  #_toolset=="target"
406          ['_toolset=="host"', {
407            'conditions': [
408              ['mips_arch_variant=="rx"', {
409                'defines': [
410                  '_MIPS_ARCH_MIPS32RX',
411                  'FPU_MODE_FPXX',
412                ],
413              }],
414              ['mips_arch_variant=="r6"', {
415                'defines': [
416                  '_MIPS_ARCH_MIPS32R6',
417                  'FPU_MODE_FP64',
418                ],
419              }],
420              ['mips_arch_variant=="r2"', {
421                'conditions': [
422                  ['mips_fpu_mode=="fp64"', {
423                    'defines': [
424                      '_MIPS_ARCH_MIPS32R2',
425                      'FPU_MODE_FP64',
426                    ],
427                  }],
428                  ['mips_fpu_mode=="fpxx"', {
429                    'defines': [
430                      '_MIPS_ARCH_MIPS32R2',
431                      'FPU_MODE_FPXX',
432                    ],
433                  }],
434                  ['mips_fpu_mode=="fp32"', {
435                    'defines': [
436                      '_MIPS_ARCH_MIPS32R2',
437                      'FPU_MODE_FP32'
438                    ],
439                  }],
440                ],
441              }],
442              ['mips_arch_variant=="r1"', {
443                'defines': ['FPU_MODE_FP32',],
444              }],
445            ]
446          }],  #_toolset=="host"
447        ],
448      }],  # v8_target_arch=="mips"
449      ['v8_target_arch=="mipsel"', {
450        'defines': [
451          'V8_TARGET_ARCH_MIPS',
452        ],
453        'conditions': [
454          [ 'v8_can_use_fpu_instructions=="true"', {
455            'defines': [
456              'CAN_USE_FPU_INSTRUCTIONS',
457            ],
458          }],
459          [ 'v8_use_mips_abi_hardfloat=="true"', {
460            'defines': [
461              '__mips_hard_float=1',
462              'CAN_USE_FPU_INSTRUCTIONS',
463            ],
464          }, {
465            'defines': [
466              '__mips_soft_float=1'
467            ],
468          }],
469        ],
470        'target_conditions': [
471          ['_toolset=="target"', {
472            'conditions': [
473              ['v8_target_arch==target_arch and android_webview_build==0', {
474                # Target built with a Mips CXX compiler.
475                'cflags': ['-EL'],
476                'ldflags': ['-EL'],
477                'conditions': [
478                  [ 'v8_use_mips_abi_hardfloat=="true"', {
479                    'cflags': ['-mhard-float'],
480                    'ldflags': ['-mhard-float'],
481                  }, {
482                    'cflags': ['-msoft-float'],
483                    'ldflags': ['-msoft-float'],
484                  }],
485                  ['mips_arch_variant=="r6"', {
486                    'defines': [
487                      '_MIPS_ARCH_MIPS32R6',
488                      'FPU_MODE_FP64',
489                    ],
490                    'cflags!': ['-mfp32', '-mfpxx'],
491                    'cflags': ['-mips32r6', '-Wa,-mips32r6'],
492                    'ldflags': [
493                      '-mips32r6',
494                      '-Wl,--dynamic-linker=$(LDSO_PATH)',
495                      '-Wl,--rpath=$(LD_R_PATH)',
496                    ],
497                  }],
498                  ['mips_arch_variant=="r2"', {
499                    'conditions': [
500                      [ 'mips_fpu_mode=="fp64"', {
501                        'defines': [
502                          '_MIPS_ARCH_MIPS32R2',
503                          'FPU_MODE_FP64',
504                        ],
505                        'cflags': ['-mfp64'],
506                      }],
507                      ['mips_fpu_mode=="fpxx"', {
508                        'defines': [
509                          '_MIPS_ARCH_MIPS32R2',
510                          'FPU_MODE_FPXX',
511                        ],
512                        'cflags': ['-mfpxx'],
513                      }],
514                      ['mips_fpu_mode=="fp32"', {
515                        'defines': [
516                          '_MIPS_ARCH_MIPS32R2',
517                          'FPU_MODE_FP32',
518                        ],
519                        'cflags': ['-mfp32'],
520                      }],
521                    ],
522                    'cflags': ['-mips32r2', '-Wa,-mips32r2'],
523                    'ldflags': ['-mips32r2'],
524                  }],
525                  ['mips_arch_variant=="r1"', {
526                    'cflags!': ['-mfp64', '-mfpxx'],
527                    'cflags': ['-mips32', '-Wa,-mips32'],
528                    'ldflags': ['-mips32'],
529                  }],
530                  ['mips_arch_variant=="rx"', {
531                    'defines': [
532                      '_MIPS_ARCH_MIPS32RX',
533                      'FPU_MODE_FPXX',
534                    ],
535                    'cflags!': ['-mfp64', '-mfp32'],
536                    'cflags': ['-mips32', '-Wa,-mips32', '-mfpxx'],
537                    'ldflags': ['-mips32'],
538                  }],
539                  ['mips_arch_variant=="loongson"', {
540                    'defines': [
541                      '_MIPS_ARCH_LOONGSON',
542                      'FPU_MODE_FP32',
543                    ],
544                    'cflags!': ['-mfp64', '-mfp32', '-mfpxx'],
545                    'cflags': ['-mips3', '-Wa,-mips3'],
546                  }],
547                ],
548              }, {
549                # 'v8_target_arch!=target_arch'
550                # Target not built with an MIPS CXX compiler (simulator build).
551                'conditions': [
552                  ['mips_arch_variant=="r6"', {
553                    'defines': [
554                      '_MIPS_ARCH_MIPS32R6',
555                      'FPU_MODE_FP64',
556                    ],
557                  }],
558                  ['mips_arch_variant=="r2"', {
559                    'conditions': [
560                      [ 'mips_fpu_mode=="fp64"', {
561                        'defines': [
562                          '_MIPS_ARCH_MIPS32R2',
563                          'FPU_MODE_FP64',
564                        ],
565                      }],
566                      ['mips_fpu_mode=="fpxx"', {
567                        'defines': [
568                          '_MIPS_ARCH_MIPS32R2',
569                          'FPU_MODE_FPXX',
570                        ],
571                      }],
572                      ['mips_fpu_mode=="fp32"', {
573                        'defines': [
574                          '_MIPS_ARCH_MIPS32R2',
575                          'FPU_MODE_FP32',
576                        ],
577                      }],
578                    ],
579                  }],
580                  ['mips_arch_variant=="r1"', {
581                    'defines': [
582                      'FPU_MODE_FP32',
583                    ],
584                  }],
585                  ['mips_arch_variant=="rx"', {
586                    'defines': [
587                      '_MIPS_ARCH_MIPS32RX',
588                      'FPU_MODE_FPXX',
589                    ],
590                  }],
591                  ['mips_arch_variant=="loongson"', {
592                    'defines': [
593                      '_MIPS_ARCH_LOONGSON',
594                      'FPU_MODE_FP32',
595                    ],
596                  }],
597                ],
598              }],
599            ],
600          }], #_toolset=="target
601          ['_toolset=="host"', {
602            'conditions': [
603              ['mips_arch_variant=="rx"', {
604                'defines': [
605                  '_MIPS_ARCH_MIPS32RX',
606                  'FPU_MODE_FPXX',
607                ],
608              }],
609              ['mips_arch_variant=="r6"', {
610                'defines': [
611                  '_MIPS_ARCH_MIPS32R6',
612                  'FPU_MODE_FP64',
613                ],
614              }],
615              ['mips_arch_variant=="r2"', {
616                'conditions': [
617                  ['mips_fpu_mode=="fp64"', {
618                    'defines': [
619                      '_MIPS_ARCH_MIPS32R2',
620                      'FPU_MODE_FP64',
621                    ],
622                  }],
623                  ['mips_fpu_mode=="fpxx"', {
624                    'defines': [
625                      '_MIPS_ARCH_MIPS32R2',
626                      'FPU_MODE_FPXX',
627                    ],
628                  }],
629                  ['mips_fpu_mode=="fp32"', {
630                    'defines': [
631                      '_MIPS_ARCH_MIPS32R2',
632                      'FPU_MODE_FP32'
633                    ],
634                  }],
635                ],
636              }],
637              ['mips_arch_variant=="r1"', {
638                'defines': ['FPU_MODE_FP32',],
639              }],
640              ['mips_arch_variant=="loongson"', {
641                'defines': [
642                  '_MIPS_ARCH_LOONGSON',
643                  'FPU_MODE_FP32',
644                ],
645              }],
646            ]
647          }],
648        ],
649      }],  # v8_target_arch=="mipsel"
650      ['v8_target_arch=="mips64el"', {
651        'defines': [
652          'V8_TARGET_ARCH_MIPS64',
653        ],
654        'conditions': [
655          [ 'v8_can_use_fpu_instructions=="true"', {
656            'defines': [
657              'CAN_USE_FPU_INSTRUCTIONS',
658            ],
659          }],
660          [ 'v8_use_mips_abi_hardfloat=="true"', {
661            'defines': [
662              '__mips_hard_float=1',
663              'CAN_USE_FPU_INSTRUCTIONS',
664            ],
665          }, {
666            'defines': [
667              '__mips_soft_float=1'
668            ],
669          }],
670         ],
671        'target_conditions': [
672          ['_toolset=="target"', {
673            'conditions': [
674              ['v8_target_arch==target_arch and android_webview_build==0', {
675                'cflags': ['-EL'],
676                'ldflags': ['-EL'],
677                'conditions': [
678                  [ 'v8_use_mips_abi_hardfloat=="true"', {
679                    'cflags': ['-mhard-float'],
680                    'ldflags': ['-mhard-float'],
681                  }, {
682                    'cflags': ['-msoft-float'],
683                    'ldflags': ['-msoft-float'],
684                  }],
685                  ['mips_arch_variant=="r6"', {
686                    'defines': ['_MIPS_ARCH_MIPS64R6',],
687                    'cflags': ['-mips64r6', '-mabi=64', '-Wa,-mips64r6'],
688                    'ldflags': [
689                      '-mips64r6', '-mabi=64',
690                      '-Wl,--dynamic-linker=$(LDSO_PATH)',
691                      '-Wl,--rpath=$(LD_R_PATH)',
692                    ],
693                  }],
694                  ['mips_arch_variant=="r2"', {
695                    'defines': ['_MIPS_ARCH_MIPS64R2',],
696                    'cflags': ['-mips64r2', '-mabi=64', '-Wa,-mips64r2'],
697                    'ldflags': [
698                      '-mips64r2', '-mabi=64',
699                      '-Wl,--dynamic-linker=$(LDSO_PATH)',
700                      '-Wl,--rpath=$(LD_R_PATH)',
701                    ],
702                  }],
703                ],
704              }, {
705                # 'v8_target_arch!=target_arch'
706                # Target not built with an MIPS CXX compiler (simulator build).
707                'conditions': [
708                  ['mips_arch_variant=="r6"', {
709                    'defines': ['_MIPS_ARCH_MIPS64R6',],
710                  }],
711                  ['mips_arch_variant=="r2"', {
712                    'defines': ['_MIPS_ARCH_MIPS64R2',],
713                  }],
714                ],
715              }],
716            ],
717          }],  #'_toolset=="target"
718          ['_toolset=="host"', {
719            'conditions': [
720              ['mips_arch_variant=="r6"', {
721                'defines': ['_MIPS_ARCH_MIPS64R6',],
722              }],
723              ['mips_arch_variant=="r2"', {
724                'defines': ['_MIPS_ARCH_MIPS64R2',],
725              }],
726            ],
727          }],  #'_toolset=="host"
728        ],
729      }],  # v8_target_arch=="mips64el"
730      ['v8_target_arch=="x64"', {
731        'defines': [
732          'V8_TARGET_ARCH_X64',
733        ],
734        'xcode_settings': {
735          'ARCHS': [ 'x86_64' ],
736        },
737        'msvs_settings': {
738          'VCLinkerTool': {
739            'StackReserveSize': '2097152',
740          },
741        },
742        'msvs_configuration_platform': 'x64',
743      }],  # v8_target_arch=="x64"
744      ['v8_target_arch=="x32"', {
745        'defines': [
746          # x32 port shares the source code with x64 port.
747          'V8_TARGET_ARCH_X64',
748          'V8_TARGET_ARCH_32_BIT',
749        ],
750        'cflags': [
751          '-mx32',
752          # Inhibit warning if long long type is used.
753          '-Wno-long-long',
754        ],
755        'ldflags': [
756          '-mx32',
757        ],
758      }],  # v8_target_arch=="x32"
759      ['OS=="win"', {
760        'defines': [
761          'WIN32',
762        ],
763        # 4351: VS 2005 and later are warning us that they've fixed a bug
764        #       present in VS 2003 and earlier.
765        'msvs_disabled_warnings': [4351],
766        'msvs_configuration_attributes': {
767          'OutputDirectory': '<(DEPTH)\\build\\$(ConfigurationName)',
768          'IntermediateDirectory': '$(OutDir)\\obj\\$(ProjectName)',
769          'CharacterSet': '1',
770        },
771      }],
772      ['OS=="win" and v8_target_arch=="ia32"', {
773        'msvs_settings': {
774          'VCCLCompilerTool': {
775            # Ensure no surprising artifacts from 80bit double math with x86.
776            'AdditionalOptions': ['/arch:SSE2'],
777          },
778        },
779      }],
780      ['OS=="win" and v8_enable_prof==1', {
781        'msvs_settings': {
782          'VCLinkerTool': {
783            'GenerateMapFile': 'true',
784          },
785        },
786      }],
787      ['(OS=="linux" or OS=="freebsd"  or OS=="openbsd" or OS=="solaris" \
788         or OS=="netbsd" or OS=="mac" or OS=="android" or OS=="qnx") and \
789        (v8_target_arch=="arm" or v8_target_arch=="ia32" or \
790         v8_target_arch=="x87" or v8_target_arch=="mips" or \
791         v8_target_arch=="mipsel")', {
792        'target_conditions': [
793          ['_toolset=="host"', {
794            'conditions': [
795              ['host_cxx_is_biarch==1', {
796                'cflags': [ '-m32' ],
797                'ldflags': [ '-m32' ]
798              }],
799            ],
800            'xcode_settings': {
801              'ARCHS': [ 'i386' ],
802            },
803          }],
804          ['_toolset=="target"', {
805            'conditions': [
806              ['target_cxx_is_biarch==1 and nacl_target_arch!="nacl_x64"', {
807                'cflags': [ '-m32' ],
808                'ldflags': [ '-m32' ],
809              }],
810              # Enable feedback-directed optimisation when building in android.
811              [ 'android_webview_build == 1', {
812                'aosp_build_settings': {
813                  'LOCAL_FDO_SUPPORT': 'true',
814                },
815              }],
816            ],
817            'xcode_settings': {
818              'ARCHS': [ 'i386' ],
819            },
820          }],
821        ],
822      }],
823      ['(OS=="linux" or OS=="android") and \
824        (v8_target_arch=="x64" or v8_target_arch=="arm64")', {
825        'target_conditions': [
826          ['_toolset=="host"', {
827            'conditions': [
828              ['host_cxx_is_biarch==1', {
829                'cflags': [ '-m64' ],
830                'ldflags': [ '-m64' ]
831              }],
832             ],
833           }],
834           ['_toolset=="target"', {
835             'conditions': [
836               ['target_cxx_is_biarch==1', {
837                 'cflags': [ '-m64' ],
838                 'ldflags': [ '-m64' ],
839               }],
840               # Enable feedback-directed optimisation when building in android.
841               [ 'android_webview_build == 1', {
842                 'aosp_build_settings': {
843                   'LOCAL_FDO_SUPPORT': 'true',
844                 },
845               }],
846             ]
847           }],
848         ],
849      }],
850      ['OS=="linux" or OS=="freebsd" or OS=="openbsd" or OS=="solaris" \
851         or OS=="netbsd" or OS=="qnx"', {
852        'conditions': [
853          [ 'v8_no_strict_aliasing==1', {
854            'cflags': [ '-fno-strict-aliasing' ],
855          }],
856        ],  # conditions
857      }],
858      ['OS=="solaris"', {
859        'defines': [ '__C99FEATURES__=1' ],  # isinf() etc.
860      }],
861      ['OS=="freebsd" or OS=="openbsd"', {
862        'cflags': [ '-I/usr/local/include' ],
863      }],
864      ['OS=="netbsd"', {
865        'cflags': [ '-I/usr/pkg/include' ],
866      }],
867    ],  # conditions
868    'configurations': {
869      # Abstract configuration for v8_optimized_debug == 0.
870      'DebugBase0': {
871        'abstract': 1,
872        'msvs_settings': {
873          'VCCLCompilerTool': {
874            'Optimization': '0',
875            'conditions': [
876              ['component=="shared_library"', {
877                'RuntimeLibrary': '3',  # /MDd
878              }, {
879                'RuntimeLibrary': '1',  # /MTd
880              }],
881            ],
882          },
883          'VCLinkerTool': {
884            'LinkIncremental': '2',
885          },
886        },
887        'conditions': [
888          ['OS=="linux" or OS=="freebsd" or OS=="openbsd" or OS=="netbsd" or \
889            OS=="qnx"', {
890            'cflags!': [
891              '-O0',
892              '-O3',
893              '-O2',
894              '-O1',
895              '-Os',
896            ],
897            'cflags': [
898              '-fdata-sections',
899              '-ffunction-sections',
900            ],
901          }],
902          ['OS=="mac"', {
903            'xcode_settings': {
904               'GCC_OPTIMIZATION_LEVEL': '0',  # -O0
905            },
906          }],
907        ],
908      },  # DebugBase0
909      # Abstract configuration for v8_optimized_debug == 1.
910      'DebugBase1': {
911        'abstract': 1,
912        'msvs_settings': {
913          'VCCLCompilerTool': {
914            'Optimization': '1',
915            'InlineFunctionExpansion': '2',
916            'EnableIntrinsicFunctions': 'true',
917            'FavorSizeOrSpeed': '0',
918            'StringPooling': 'true',
919            'BasicRuntimeChecks': '0',
920            'conditions': [
921              ['component=="shared_library"', {
922                'RuntimeLibrary': '3',  # /MDd
923              }, {
924                'RuntimeLibrary': '1',  # /MTd
925              }],
926            ],
927          },
928          'VCLinkerTool': {
929            'LinkIncremental': '2',
930          },
931        },
932        'conditions': [
933          ['OS=="linux" or OS=="freebsd" or OS=="openbsd" or OS=="netbsd" or \
934            OS=="qnx"', {
935            'cflags!': [
936              '-O0',
937              '-O3', # TODO(2807) should be -O1.
938              '-O2',
939              '-Os',
940            ],
941            'cflags': [
942              '-fdata-sections',
943              '-ffunction-sections',
944              '-O1', # TODO(2807) should be -O3.
945            ],
946            'conditions': [
947              ['gcc_version==44 and clang==0', {
948                'cflags': [
949                  # Avoid crashes with gcc 4.4 in the v8 test suite.
950                  '-fno-tree-vrp',
951                ],
952              }],
953            ],
954          }],
955          ['OS=="mac"', {
956            'xcode_settings': {
957               'GCC_OPTIMIZATION_LEVEL': '3',  # -O3
958               'GCC_STRICT_ALIASING': 'YES',
959            },
960          }],
961        ],
962      },  # DebugBase1
963      # Abstract configuration for v8_optimized_debug == 2.
964      'DebugBase2': {
965        'abstract': 1,
966        'msvs_settings': {
967          'VCCLCompilerTool': {
968            'Optimization': '2',
969            'InlineFunctionExpansion': '2',
970            'EnableIntrinsicFunctions': 'true',
971            'FavorSizeOrSpeed': '0',
972            'StringPooling': 'true',
973            'BasicRuntimeChecks': '0',
974            'conditions': [
975              ['component=="shared_library"', {
976                'RuntimeLibrary': '3',  #/MDd
977              }, {
978                'RuntimeLibrary': '1',  #/MTd
979              }],
980              ['v8_target_arch=="x64"', {
981                # TODO(2207): remove this option once the bug is fixed.
982                'WholeProgramOptimization': 'true',
983              }],
984            ],
985          },
986          'VCLinkerTool': {
987            'LinkIncremental': '1',
988            'OptimizeReferences': '2',
989            'EnableCOMDATFolding': '2',
990          },
991        },
992        'conditions': [
993          ['OS=="linux" or OS=="freebsd" or OS=="openbsd" or OS=="netbsd" or \
994            OS=="qnx"', {
995            'cflags!': [
996              '-O0',
997              '-O1',
998              '-Os',
999            ],
1000            'cflags': [
1001              '-fdata-sections',
1002              '-ffunction-sections',
1003            ],
1004            'defines': [
1005              'OPTIMIZED_DEBUG'
1006            ],
1007            'conditions': [
1008              # TODO(crbug.com/272548): Avoid -O3 in NaCl
1009              ['nacl_target_arch=="none"', {
1010                'cflags': ['-O3'],
1011                'cflags!': ['-O2'],
1012                }, {
1013                'cflags': ['-O2'],
1014                'cflags!': ['-O3'],
1015              }],
1016              ['gcc_version==44 and clang==0', {
1017                'cflags': [
1018                  # Avoid crashes with gcc 4.4 in the v8 test suite.
1019                  '-fno-tree-vrp',
1020                ],
1021              }],
1022            ],
1023          }],
1024          ['OS=="mac"', {
1025            'xcode_settings': {
1026              'GCC_OPTIMIZATION_LEVEL': '3',  # -O3
1027              'GCC_STRICT_ALIASING': 'YES',
1028            },
1029          }],
1030        ],
1031      },  # DebugBase2
1032      # Common settings for the Debug configuration.
1033      'DebugBaseCommon': {
1034        'abstract': 1,
1035        'defines': [
1036          'ENABLE_DISASSEMBLER',
1037          'V8_ENABLE_CHECKS',
1038          'OBJECT_PRINT',
1039          'VERIFY_HEAP',
1040          'DEBUG'
1041        ],
1042        'conditions': [
1043          ['OS=="linux" or OS=="freebsd" or OS=="openbsd" or OS=="netbsd" or \
1044            OS=="qnx"', {
1045            'cflags': [ '-Woverloaded-virtual', '<(wno_array_bounds)', ],
1046          }],
1047          ['OS=="linux" and v8_enable_backtrace==1', {
1048            # Support for backtrace_symbols.
1049            'ldflags': [ '-rdynamic' ],
1050          }],
1051          ['OS=="android"', {
1052            'variables': {
1053              'android_full_debug%': 1,
1054            },
1055            'conditions': [
1056              ['android_full_debug==0', {
1057                # Disable full debug if we want a faster v8 in a debug build.
1058                # TODO(2304): pass DISABLE_DEBUG_ASSERT instead of hiding DEBUG.
1059                'defines!': [
1060                  'DEBUG',
1061                ],
1062              }],
1063            ],
1064          }],
1065        ],
1066      },  # DebugBaseCommon
1067      'Debug': {
1068        'inherit_from': ['DebugBaseCommon'],
1069        'conditions': [
1070          ['v8_optimized_debug==0', {
1071            'inherit_from': ['DebugBase0'],
1072          }],
1073          ['v8_optimized_debug==1', {
1074            'inherit_from': ['DebugBase1'],
1075          }],
1076          ['v8_optimized_debug==2', {
1077            'inherit_from': ['DebugBase2'],
1078          }],
1079        ],
1080      },  # Debug
1081      'Release': {
1082        'conditions': [
1083          ['OS=="linux" or OS=="freebsd" or OS=="openbsd" or OS=="netbsd"', {
1084            'cflags!': [
1085              '-Os',
1086            ],
1087            'cflags': [
1088              '-fdata-sections',
1089              '-ffunction-sections',
1090              '<(wno_array_bounds)',
1091            ],
1092            'conditions': [
1093              [ 'gcc_version==44 and clang==0', {
1094                'cflags': [
1095                  # Avoid crashes with gcc 4.4 in the v8 test suite.
1096                  '-fno-tree-vrp',
1097                ],
1098              }],
1099              # TODO(crbug.com/272548): Avoid -O3 in NaCl
1100              ['nacl_target_arch=="none"', {
1101                'cflags': ['-O3'],
1102                'cflags!': ['-O2'],
1103              }, {
1104                'cflags': ['-O2'],
1105                'cflags!': ['-O3'],
1106              }],
1107            ],
1108          }],
1109          ['OS=="android"', {
1110            'cflags!': [
1111              '-O3',
1112              '-Os',
1113            ],
1114            'cflags': [
1115              '-fdata-sections',
1116              '-ffunction-sections',
1117              '-O2',
1118            ],
1119            'conditions': [
1120              [ 'gcc_version==44 and clang==0', {
1121                'cflags': [
1122                  # Avoid crashes with gcc 4.4 in the v8 test suite.
1123                  '-fno-tree-vrp',
1124                ],
1125              }],
1126            ],
1127          }],
1128          ['OS=="mac"', {
1129            'xcode_settings': {
1130              'GCC_OPTIMIZATION_LEVEL': '3',  # -O3
1131
1132              # -fstrict-aliasing.  Mainline gcc
1133              # enables this at -O2 and above,
1134              # but Apple gcc does not unless it
1135              # is specified explicitly.
1136              'GCC_STRICT_ALIASING': 'YES',
1137            },
1138          }],  # OS=="mac"
1139          ['OS=="win"', {
1140            'msvs_settings': {
1141              'VCCLCompilerTool': {
1142                'Optimization': '2',
1143                'InlineFunctionExpansion': '2',
1144                'EnableIntrinsicFunctions': 'true',
1145                'FavorSizeOrSpeed': '0',
1146                'StringPooling': 'true',
1147                'conditions': [
1148                  ['component=="shared_library"', {
1149                    'RuntimeLibrary': '2',  #/MD
1150                  }, {
1151                    'RuntimeLibrary': '0',  #/MT
1152                  }],
1153                  ['v8_target_arch=="x64"', {
1154                    # TODO(2207): remove this option once the bug is fixed.
1155                    'WholeProgramOptimization': 'true',
1156                  }],
1157                ],
1158              },
1159              'VCLinkerTool': {
1160                'LinkIncremental': '1',
1161                'OptimizeReferences': '2',
1162                'EnableCOMDATFolding': '2',
1163              },
1164            },
1165          }],  # OS=="win"
1166        ],  # conditions
1167      },  # Release
1168    },  # configurations
1169  },  # target_defaults
1170}
1171