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