• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright 2012 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# Definitions to be used when building stand-alone V8 binaries.
29
30{
31  # We need to include toolchain.gypi here for third-party sources that don't
32  # directly include it themselves.
33  'includes': ['toolchain.gypi'],
34  'variables': {
35    'component%': 'static_library',
36    'clang_xcode%': 0,
37    # Track where uninitialized memory originates from. From fastest to
38    # slowest: 0 - no tracking, 1 - track only the initial allocation site, 2
39    # - track the chain of stores leading from allocation site to use site.
40    'msan_track_origins%': 2,
41    'visibility%': 'hidden',
42    'v8_enable_backtrace%': 0,
43    'v8_enable_i18n_support%': 1,
44    'v8_deprecation_warnings': 1,
45    'v8_imminent_deprecation_warnings': 1,
46    'msvs_multi_core_compile%': '1',
47    'mac_deployment_target%': '10.5',
48    'release_extra_cflags%': '',
49    'variables': {
50      'variables': {
51        'variables': {
52          'conditions': [
53            ['OS=="linux" or OS=="freebsd" or OS=="openbsd" or \
54               OS=="netbsd" or OS=="mac" or OS=="qnx" or OS=="aix"', {
55              # This handles the Unix platforms we generally deal with.
56              # Anything else gets passed through, which probably won't work
57              # very well; such hosts should pass an explicit target_arch
58              # to gyp.
59              'host_arch%': '<!pymod_do_main(detect_v8_host_arch)',
60            }, {
61              # OS!="linux" and OS!="freebsd" and OS!="openbsd" and
62              # OS!="netbsd" and OS!="mac" and OS!="aix"
63              'host_arch%': 'ia32',
64            }],
65          ],
66        },
67        'host_arch%': '<(host_arch)',
68        'target_arch%': '<(host_arch)',
69        'base_dir%': '<!(cd <(DEPTH) && python -c "import os; print os.getcwd()")',
70
71        # Instrument for code coverage with gcov.
72        'coverage%': 0,
73      },
74      'base_dir%': '<(base_dir)',
75      'host_arch%': '<(host_arch)',
76      'target_arch%': '<(target_arch)',
77      'v8_target_arch%': '<(target_arch)',
78      'coverage%': '<(coverage)',
79      'asan%': 0,
80      'lsan%': 0,
81      'msan%': 0,
82      'tsan%': 0,
83      # Enable coverage gathering instrumentation in sanitizer tools. This flag
84      # also controls coverage granularity (1 for function-level, 2 for
85      # block-level, 3 for edge-level).
86      'sanitizer_coverage%': 0,
87      # Use libc++ (buildtools/third_party/libc++ and
88      # buildtools/third_party/libc++abi) instead of stdlibc++ as standard
89      # library. This is intended to be used for instrumented builds.
90      'use_custom_libcxx%': 0,
91
92      'clang_dir%': '<(base_dir)/third_party/llvm-build/Release+Asserts',
93
94      'use_lto%': 0,
95
96      # Control Flow Integrity for virtual calls and casts.
97      # See http://clang.llvm.org/docs/ControlFlowIntegrity.html
98      'cfi_vptr%': 0,
99      'cfi_diag%': 0,
100
101      'cfi_blacklist%': '<(base_dir)/tools/cfi/blacklist.txt',
102
103      # Set to 1 to enable fast builds.
104      # TODO(machenbach): Only configured for windows.
105      'fastbuild%': 0,
106
107      # goma settings.
108      # 1 to use goma.
109      # If no gomadir is set, it uses the default gomadir.
110      'use_goma%': 0,
111      'gomadir%': '',
112
113      'conditions': [
114        # Set default gomadir.
115        ['OS=="win"', {
116          'gomadir': 'c:\\goma\\goma-win',
117        }, {
118          'gomadir': '<!(/bin/echo -n ${HOME}/goma)',
119        }],
120        ['host_arch!="ppc" and host_arch!="ppc64" and host_arch!="ppc64le" and host_arch!="s390" and host_arch!="s390x" and \
121          coverage==0', {
122          'host_clang%': 1,
123        }, {
124          'host_clang%': 0,
125        }],
126        # linux_use_bundled_gold: whether to use the gold linker binary checked
127        # into third_party/binutils.  Force this off via GYP_DEFINES when you
128        # are using a custom toolchain and need to control -B in ldflags.
129        # Do not use 32-bit gold on 32-bit hosts as it runs out address space
130        # for component=static_library builds.
131        ['(OS=="linux" or OS=="android") and (target_arch=="x64" or target_arch=="arm" or (target_arch=="ia32" and host_arch=="x64"))', {
132          'linux_use_bundled_gold%': 1,
133        }, {
134          'linux_use_bundled_gold%': 0,
135        }],
136
137        # TODO(machenbach): Remove the conditions as more configurations are
138        # supported.
139        ['OS=="linux" or OS=="win"', {
140          'test_isolation_mode%': 'check',
141        }, {
142          'test_isolation_mode%': 'noop',
143        }],
144      ],
145    },
146    'base_dir%': '<(base_dir)',
147    'clang_dir%': '<(clang_dir)',
148    'host_arch%': '<(host_arch)',
149    'host_clang%': '<(host_clang)',
150    'target_arch%': '<(target_arch)',
151    'v8_target_arch%': '<(v8_target_arch)',
152    'werror%': '-Werror',
153    'use_goma%': '<(use_goma)',
154    'gomadir%': '<(gomadir)',
155    'asan%': '<(asan)',
156    'lsan%': '<(lsan)',
157    'msan%': '<(msan)',
158    'tsan%': '<(tsan)',
159    'sanitizer_coverage%': '<(sanitizer_coverage)',
160    'use_custom_libcxx%': '<(use_custom_libcxx)',
161    'linux_use_bundled_gold%': '<(linux_use_bundled_gold)',
162    'use_lto%': '<(use_lto)',
163    'cfi_vptr%': '<(cfi_vptr)',
164    'cfi_diag%': '<(cfi_diag)',
165    'cfi_blacklist%': '<(cfi_blacklist)',
166    'test_isolation_mode%': '<(test_isolation_mode)',
167    'fastbuild%': '<(fastbuild)',
168    'coverage%': '<(coverage)',
169
170    # Add a simple extras solely for the purpose of the cctests
171    'v8_extra_library_files': ['../test/cctest/test-extra.js'],
172    'v8_experimental_extra_library_files': ['../test/cctest/test-experimental-extra.js'],
173
174    # .gyp files or targets should set v8_code to 1 if they build V8 specific
175    # code, as opposed to external code.  This variable is used to control such
176    # things as the set of warnings to enable, and whether warnings are treated
177    # as errors.
178    'v8_code%': 0,
179
180    # Speeds up Debug builds:
181    # 0 - Compiler optimizations off (debuggable) (default). This may
182    #     be 5x slower than Release (or worse).
183    # 1 - Turn on optimizations and disable slow DCHECKs, but leave
184    #     V8_ENABLE_CHECKS and most other assertions enabled.  This may cause
185    #     some v8 tests to fail in the Debug configuration.  This roughly
186    #     matches the performance of a Release build and can be used by
187    #     embedders that need to build their own code as debug but don't want
188    #     or need a debug version of V8. This should produce near-release
189    #     speeds.
190    'v8_optimized_debug%': 0,
191
192    # Use external files for startup data blobs:
193    # the JS builtins sources and the start snapshot.
194    # Embedders that don't use standalone.gypi will need to add
195    # their own default value.
196    'v8_use_external_startup_data%': 1,
197
198    # Relative path to icu.gyp from this file.
199    'icu_gyp_path': '../third_party/icu/icu.gyp',
200
201    'conditions': [
202      ['(v8_target_arch=="arm" and host_arch!="arm") or \
203        (v8_target_arch=="arm64" and host_arch!="arm64") or \
204        (v8_target_arch=="mipsel" and host_arch!="mipsel") or \
205        (v8_target_arch=="mips64el" and host_arch!="mips64el") or \
206        (v8_target_arch=="x64" and host_arch!="x64") or \
207        (OS=="android" or OS=="qnx")', {
208        'want_separate_host_toolset': 1,
209      }, {
210        'want_separate_host_toolset': 0,
211      }],
212      ['OS == "win"', {
213        'os_posix%': 0,
214      }, {
215        'os_posix%': 1,
216      }],
217      ['OS=="win" and use_goma==1', {
218        # goma doesn't support pch yet.
219        'chromium_win_pch': 0,
220        # goma doesn't support PDB yet.
221        'fastbuild%': 1,
222      }],
223      ['((v8_target_arch=="ia32" or v8_target_arch=="x64" or v8_target_arch=="x87") and \
224        (OS=="linux" or OS=="mac")) or (v8_target_arch=="ppc64" and OS=="linux")', {
225        'v8_enable_gdbjit%': 1,
226      }, {
227        'v8_enable_gdbjit%': 0,
228      }],
229      ['(OS=="linux" or OS=="mac") and (target_arch=="ia32" or target_arch=="x64") and \
230        (v8_target_arch!="x87" and v8_target_arch!="x32") and coverage==0', {
231        'clang%': 1,
232      }, {
233        'clang%': 0,
234      }],
235      ['asan==1 or lsan==1 or msan==1 or tsan==1', {
236        'clang%': 1,
237        'use_allocator%': 'none',
238      }],
239      ['asan==1 and OS=="linux"', {
240        'use_custom_libcxx%': 1,
241      }],
242      ['tsan==1', {
243        'use_custom_libcxx%': 1,
244      }],
245      ['msan==1', {
246        # Use a just-built, MSan-instrumented libc++ instead of the system-wide
247        # libstdc++. This is required to avoid false positive reports whenever
248        # the C++ standard library is used.
249        'use_custom_libcxx%': 1,
250      }],
251      ['cfi_vptr==1', {
252        'use_lto%': 1,
253      }],
254      ['OS=="android"', {
255        # Location of Android NDK.
256        'variables': {
257          'variables': {
258            # The Android toolchain needs to use the absolute path to the NDK
259            # because it is used at different levels in the GYP files.
260            'android_ndk_root%': '<(base_dir)/third_party/android_tools/ndk/',
261            'android_host_arch%': "<!(uname -m | sed -e 's/i[3456]86/x86/')",
262            'host_os%': "<!(uname -s | sed -e 's/Linux/linux/;s/Darwin/mac/')",
263          },
264
265          # Copy conditionally-set variables out one scope.
266          'android_ndk_root%': '<(android_ndk_root)',
267          'host_os%': '<(host_os)',
268
269          'conditions': [
270            ['target_arch == "ia32"', {
271              'android_toolchain%': '<(android_ndk_root)/toolchains/x86-4.9/prebuilt/<(host_os)-<(android_host_arch)/bin',
272              'android_target_arch%': 'x86',
273              'android_target_platform%': '16',
274            }],
275            ['target_arch == "x64"', {
276              'android_toolchain%': '<(android_ndk_root)/toolchains/x86_64-4.9/prebuilt/<(host_os)-<(android_host_arch)/bin',
277              'android_target_arch%': 'x86_64',
278              'android_target_platform%': '21',
279            }],
280            ['target_arch=="arm"', {
281              'android_toolchain%': '<(android_ndk_root)/toolchains/arm-linux-androideabi-4.9/prebuilt/<(host_os)-<(android_host_arch)/bin',
282              'android_target_arch%': 'arm',
283              'android_target_platform%': '16',
284              'arm_version%': 7,
285            }],
286            ['target_arch == "arm64"', {
287              'android_toolchain%': '<(android_ndk_root)/toolchains/aarch64-linux-android-4.9/prebuilt/<(host_os)-<(android_host_arch)/bin',
288              'android_target_arch%': 'arm64',
289              'android_target_platform%': '21',
290              'arm_version%': 'default',
291            }],
292            ['target_arch == "mipsel"', {
293              'android_toolchain%': '<(android_ndk_root)/toolchains/mipsel-linux-android-4.9/prebuilt/<(host_os)-<(android_host_arch)/bin',
294              'android_target_arch%': 'mips',
295              'android_target_platform%': '16',
296            }],
297            ['target_arch == "mips64el"', {
298              'android_toolchain%': '<(android_ndk_root)/toolchains/mips64el-linux-android-4.9/prebuilt/<(host_os)-<(android_host_arch)/bin',
299              'android_target_arch%': 'mips64',
300              'android_target_platform%': '21',
301            }],
302          ],
303        },
304
305        # Copy conditionally-set variables out one scope.
306        'android_target_arch%': '<(android_target_arch)',
307        'android_target_platform%': '<(android_target_platform)',
308        'android_toolchain%': '<(android_toolchain)',
309        'arm_version%': '<(arm_version)',
310        'host_os%': '<(host_os)',
311
312        'conditions': [
313          ['android_ndk_root==""', {
314            'variables': {
315              'android_sysroot': '<(android_toolchain)/sysroot/',
316              'android_stlport': '<(android_toolchain)/sources/cxx-stl/stlport/',
317            },
318            'android_include': '<(android_sysroot)/usr/include',
319            'conditions': [
320              ['target_arch=="x64"', {
321                'android_lib': '<(android_sysroot)/usr/lib64',
322              }, {
323                'android_lib': '<(android_sysroot)/usr/lib',
324              }],
325            ],
326            'android_stlport_include': '<(android_stlport)/stlport',
327            'android_stlport_libs': '<(android_stlport)/libs',
328          }, {
329            'variables': {
330              'android_sysroot': '<(android_ndk_root)/platforms/android-<(android_target_platform)/arch-<(android_target_arch)',
331              'android_stlport': '<(android_ndk_root)/sources/cxx-stl/stlport/',
332            },
333            'android_include': '<(android_sysroot)/usr/include',
334            'conditions': [
335              ['target_arch=="x64"', {
336                'android_lib': '<(android_sysroot)/usr/lib64',
337              }, {
338                'android_lib': '<(android_sysroot)/usr/lib',
339              }],
340            ],
341            'android_stlport_include': '<(android_stlport)/stlport',
342            'android_stlport_libs': '<(android_stlport)/libs',
343          }],
344        ],
345        'android_stlport_library': 'stlport_static',
346      }],  # OS=="android"
347      ['host_clang==1', {
348        'host_cc': '<(clang_dir)/bin/clang',
349        'host_cxx': '<(clang_dir)/bin/clang++',
350      }, {
351        'host_cc': '<!(which gcc)',
352        'host_cxx': '<!(which g++)',
353      }],
354    ],
355    # Default ARM variable settings.
356    'arm_version%': 'default',
357    'arm_fpu%': 'vfpv3',
358    'arm_float_abi%': 'default',
359    'arm_thumb': 'default',
360
361    # Default MIPS variable settings.
362    'mips_arch_variant%': 'r2',
363    # Possible values fp32, fp64, fpxx.
364    # fp32 - 32 32-bit FPU registers are available, doubles are placed in
365    #        register pairs.
366    # fp64 - 32 64-bit FPU registers are available.
367    # fpxx - compatibility mode, it chooses fp32 or fp64 depending on runtime
368    #        detection
369    'mips_fpu_mode%': 'fp32',
370  },
371  'target_defaults': {
372    'variables': {
373      'v8_code%': '<(v8_code)',
374      'conditions':[
375        ['OS=="android"', {
376          'host_os%': '<(host_os)',
377        }],
378      ],
379    },
380    'default_configuration': 'Debug',
381    'configurations': {
382      'DebugBaseCommon': {
383        'conditions': [
384          ['OS=="aix"', {
385            'cflags': [ '-g', '-Og', '-gxcoff' ],
386          }, {
387            'cflags': [ '-g', '-O0' ],
388          }],
389        ],
390      },
391      'Optdebug': {
392        'inherit_from': [ 'DebugBaseCommon', 'DebugBase1' ],
393      },
394      'Debug': {
395        # Xcode insists on this empty entry.
396      },
397      'Release': {
398        'cflags+': ['<@(release_extra_cflags)'],
399      },
400      'conditions': [
401        ['OS=="win"', {
402          'Optdebug_x64': {
403            'inherit_from': ['Optdebug'],
404          },
405          'Debug_x64': {
406            'inherit_from': ['Debug'],
407          },
408          'Release_x64': {
409            'inherit_from': ['Release'],
410          },
411        }],
412      ],
413    },
414    'conditions':[
415      ['clang==0', {
416        'cflags+': ['-Wno-sign-compare',],
417      }],
418      ['clang==1 or host_clang==1', {
419        # This is here so that all files get recompiled after a clang roll and
420        # when turning clang on or off.
421        # (defines are passed via the command line, and build systems rebuild
422        # things when their commandline changes). Nothing should ever read this
423        # define.
424        'defines': ['CR_CLANG_REVISION=<!(python <(DEPTH)/tools/clang/scripts/update.py --print-revision)'],
425        'conditions': [
426          ['host_clang==1', {
427            'target_conditions': [
428              ['_toolset=="host"', {
429                'cflags+': [
430                  '-Wno-format-pedantic',
431                 ],
432              }],
433           ],
434          }],
435          ['clang==1', {
436            'target_conditions': [
437              ['_toolset=="target"', {
438                'cflags+': [
439                  '-Wno-format-pedantic',
440                 ],
441              }],
442           ],
443          }],
444        ],
445      }],
446      ['fastbuild!=0', {
447        'conditions': [
448          ['OS=="win" and fastbuild==1', {
449            'msvs_settings': {
450              'VCLinkerTool': {
451                # This tells the linker to generate .pdbs, so that
452                # we can get meaningful stack traces.
453                'GenerateDebugInformation': 'true',
454              },
455              'VCCLCompilerTool': {
456                # No debug info to be generated by compiler.
457                'DebugInformationFormat': '0',
458              },
459            },
460          }],
461        ],
462      }],  # fastbuild!=0
463    ],
464    'target_conditions': [
465      ['v8_code == 0', {
466        'defines!': [
467          'DEBUG',
468        ],
469        'conditions': [
470          ['os_posix == 1 and OS != "mac"', {
471            # We don't want to get warnings from third-party code,
472            # so remove any existing warning-enabling flags like -Wall.
473            'cflags!': [
474              '-pedantic',
475              '-Wall',
476              '-Werror',
477              '-Wextra',
478              '-Wshorten-64-to-32',
479            ],
480            'cflags+': [
481              # Clang considers the `register` keyword as deprecated, but
482              # ICU uses it all over the place.
483              '-Wno-deprecated-register',
484              # ICU uses its own deprecated functions.
485              '-Wno-deprecated-declarations',
486              # ICU prefers `a && b || c` over `(a && b) || c`.
487              '-Wno-logical-op-parentheses',
488              # ICU has some `unsigned < 0` checks.
489              '-Wno-tautological-compare',
490              # uresdata.c has switch(RES_GET_TYPE(x)) code. The
491              # RES_GET_TYPE macro returns an UResType enum, but some switch
492              # statement contains case values that aren't part of that
493              # enum (e.g. URES_TABLE32 which is in UResInternalType). This
494              # is on purpose.
495              '-Wno-switch',
496            ],
497            'cflags_cc!': [
498              '-Wnon-virtual-dtor',
499            ],
500          }],
501          ['OS == "mac"', {
502            'xcode_settings': {
503              'GCC_TREAT_WARNINGS_AS_ERRORS': 'NO',    # -Werror
504            },
505          }],
506          ['OS == "win"', {
507            'msvs_settings': {
508              'VCCLCompilerTool': {
509                'WarnAsError': 'false',
510              },
511            },
512          }],
513        ],
514      }],
515    ],
516  },
517  'conditions': [
518    ['os_posix==1 and OS!="mac"', {
519      'target_defaults': {
520        'conditions': [
521          # Common options for AddressSanitizer, LeakSanitizer,
522          # ThreadSanitizer, MemorySanitizer and CFI builds.
523          ['asan==1 or lsan==1 or tsan==1 or msan==1 or cfi_vptr==1', {
524            'target_conditions': [
525              ['_toolset=="target"', {
526                'cflags': [
527                  '-fno-omit-frame-pointer',
528                  '-gline-tables-only',
529                ],
530                'cflags!': [
531                  '-fomit-frame-pointer',
532                ],
533              }],
534            ],
535          }],
536          ['asan==1', {
537            'target_conditions': [
538              ['_toolset=="target"', {
539                'cflags': [
540                  '-fsanitize=address',
541                ],
542                'ldflags': [
543                  '-fsanitize=address',
544                ],
545                'defines': [
546                  'ADDRESS_SANITIZER',
547                ],
548              }],
549            ],
550          }],
551          ['lsan==1', {
552            'target_conditions': [
553              ['_toolset=="target"', {
554                'cflags': [
555                  '-fsanitize=leak',
556                ],
557                'ldflags': [
558                  '-fsanitize=leak',
559                ],
560                'defines': [
561                  'LEAK_SANITIZER',
562                ],
563              }],
564            ],
565          }],
566          ['tsan==1', {
567            'target_conditions': [
568              ['_toolset=="target"', {
569                'cflags': [
570                  '-fsanitize=thread',
571                ],
572                'ldflags': [
573                  '-fsanitize=thread',
574                ],
575                'defines': [
576                  'THREAD_SANITIZER',
577                ],
578              }],
579            ],
580          }],
581          ['msan==1', {
582            'target_conditions': [
583              ['_toolset=="target"', {
584                'cflags': [
585                  '-fsanitize=memory',
586                  '-fsanitize-memory-track-origins=<(msan_track_origins)',
587                  '-fPIC',
588                ],
589                'ldflags': [
590                  '-fsanitize=memory',
591                  '-pie',
592                ],
593                'defines': [
594                  'MEMORY_SANITIZER',
595                ],
596              }],
597            ],
598          }],
599          ['use_custom_libcxx==1', {
600            'dependencies': [
601              '<(DEPTH)/buildtools/third_party/libc++/libc++.gyp:libcxx_proxy',
602            ],
603          }],
604          ['sanitizer_coverage!=0', {
605            'target_conditions': [
606              ['_toolset=="target"', {
607                'cflags': [
608                  '-fsanitize-coverage=<(sanitizer_coverage)',
609                ],
610                'defines': [
611                  'SANITIZER_COVERAGE',
612                ],
613              }],
614            ],
615          }],
616          ['linux_use_bundled_gold==1 and not (clang==0 and use_lto==1)', {
617            # Put our binutils, which contains gold in the search path. We pass
618            # the path to gold to the compiler. gyp leaves unspecified what the
619            # cwd is when running the compiler, so the normal gyp path-munging
620            # fails us. This hack gets the right path.
621            #
622            # Disabled when using GCC LTO because GCC also uses the -B search
623            # path at link time to find "as", and our bundled "as" can only
624            # target x86.
625            'ldflags': [
626              # Note, Chromium allows ia32 host arch as well, we limit this to
627              # x64 in v8.
628              '-B<(base_dir)/third_party/binutils/Linux_x64/Release/bin',
629            ],
630          }],
631        ],
632      },
633    }],
634    ['OS=="mac"', {
635      'target_defaults': {
636       'conditions': [
637          ['asan==1', {
638            'xcode_settings': {
639              # FIXME(machenbach): This is outdated compared to common.gypi.
640              'OTHER_CFLAGS+': [
641                '-fno-omit-frame-pointer',
642                '-gline-tables-only',
643                '-fsanitize=address',
644                '-w',  # http://crbug.com/162783
645              ],
646              'OTHER_CFLAGS!': [
647                '-fomit-frame-pointer',
648              ],
649              'defines': [
650                'ADDRESS_SANITIZER',
651              ],
652            },
653            'dependencies': [
654              '<(DEPTH)/build/mac/asan.gyp:asan_dynamic_runtime',
655            ],
656            'target_conditions': [
657              ['_type!="static_library"', {
658                'xcode_settings': {'OTHER_LDFLAGS': ['-fsanitize=address']},
659              }],
660            ],
661          }],
662          ['sanitizer_coverage!=0', {
663            'target_conditions': [
664              ['_toolset=="target"', {
665                'cflags': [
666                  '-fsanitize-coverage=<(sanitizer_coverage)',
667                ],
668                'defines': [
669                  'SANITIZER_COVERAGE',
670                ],
671              }],
672            ],
673          }],
674        ],
675      },  # target_defaults
676    }],  # OS=="mac"
677    ['OS=="linux" or OS=="freebsd" or OS=="openbsd" or OS=="solaris" \
678       or OS=="netbsd" or OS=="aix"', {
679      'target_defaults': {
680        'cflags': [
681          '-Wall',
682          '<(werror)',
683          '-Wno-unused-parameter',
684          '-Wno-long-long',
685          '-pthread',
686          '-pedantic',
687          # Don't warn about the "struct foo f = {0};" initialization pattern.
688          '-Wno-missing-field-initializers',
689          '-Wno-gnu-zero-variadic-macro-arguments',
690        ],
691        'cflags_cc': [
692          '-Wnon-virtual-dtor',
693          '-fno-exceptions',
694          '-fno-rtti',
695          '-std=gnu++0x',
696        ],
697        'ldflags': [ '-pthread', ],
698        'conditions': [
699          # Don't warn about TRACE_EVENT_* macros with zero arguments passed to
700          # ##__VA_ARGS__. C99 strict mode prohibits having zero variadic macro
701          # arguments in gcc.
702          [ 'clang==0', {
703            'cflags!' : [
704              '-pedantic' ,
705              # Don't warn about unrecognized command line option.
706              '-Wno-gnu-zero-variadic-macro-arguments',
707            ],
708          }],
709          [ 'clang==1 and (v8_target_arch=="x64" or v8_target_arch=="arm64" \
710            or v8_target_arch=="mips64el")', {
711            'cflags': [ '-Wshorten-64-to-32' ],
712          }],
713          [ 'host_arch=="ppc64" and OS!="aix"', {
714            'cflags': [ '-mminimal-toc' ],
715          }],
716          [ 'visibility=="hidden" and v8_enable_backtrace==0', {
717            'cflags': [ '-fvisibility=hidden' ],
718          }],
719          [ 'component=="shared_library"', {
720            'cflags': [ '-fPIC', ],
721          }],
722          [ 'coverage==1', {
723            'cflags!': [ '-O3', '-O2', '-O1', ],
724            'cflags': [ '-fprofile-arcs', '-ftest-coverage', '-O0'],
725            'ldflags': [ '-fprofile-arcs'],
726          }],
727        ],
728      },
729    }],
730    # 'OS=="linux" or OS=="freebsd" or OS=="openbsd" or OS=="solaris"
731    #  or OS=="netbsd"'
732    ['OS=="qnx"', {
733      'target_defaults': {
734        'cflags': [
735          '-Wall',
736          '<(werror)',
737          '-Wno-unused-parameter',
738          # Don't warn about the "struct foo f = {0};" initialization pattern.
739          '-Wno-missing-field-initializers',
740          '-Wno-gnu-zero-variadic-macro-arguments',
741        ],
742        'cflags_cc': [
743          '-Wnon-virtual-dtor',
744          '-fno-exceptions',
745          '-fno-rtti',
746          '-std=gnu++0x',
747        ],
748        'conditions': [
749          [ 'visibility=="hidden"', {
750            'cflags': [ '-fvisibility=hidden' ],
751          }],
752          [ 'component=="shared_library"', {
753            'cflags': [ '-fPIC' ],
754          }],
755        ],
756        'target_conditions': [
757          [ '_toolset=="host" and host_os=="linux"', {
758            'cflags': [ '-pthread' ],
759            'ldflags': [ '-pthread' ],
760            'libraries': [ '-lrt' ],
761          }],
762          [ '_toolset=="target"', {
763            'cflags': [ '-Wno-psabi' ],
764            'libraries': [ '-lbacktrace', '-lsocket', '-lm' ],
765          }],
766        ],
767      },
768    }],  # OS=="qnx"
769    ['OS=="win"', {
770      'target_defaults': {
771        'defines': [
772          '_CRT_SECURE_NO_DEPRECATE',
773          '_CRT_NONSTDC_NO_DEPRECATE',
774          '_USING_V110_SDK71_',
775        ],
776        'conditions': [
777          ['component=="static_library"', {
778            'defines': [
779              '_HAS_EXCEPTIONS=0',
780            ],
781          }],
782        ],
783        'msvs_cygwin_dirs': ['<(DEPTH)/third_party/cygwin'],
784        'msvs_disabled_warnings': [
785          # C4091: 'typedef ': ignored on left of 'X' when no variable is
786          #                    declared.
787          # This happens in a number of Windows headers. Dumb.
788          4091,
789
790          # C4127: conditional expression is constant
791          # This warning can in theory catch dead code and other problems, but
792          # triggers in far too many desirable cases where the conditional
793          # expression is either set by macros or corresponds some legitimate
794          # compile-time constant expression (due to constant template args,
795          # conditionals comparing the sizes of different types, etc.).  Some of
796          # these can be worked around, but it's not worth it.
797          4127,
798
799          # C4351: new behavior: elements of array 'array' will be default
800          #        initialized
801          # This is a silly "warning" that basically just alerts you that the
802          # compiler is going to actually follow the language spec like it's
803          # supposed to, instead of not following it like old buggy versions
804          # did.  There's absolutely no reason to turn this on.
805          4351,
806
807          # C4355: 'this': used in base member initializer list
808          # It's commonly useful to pass |this| to objects in a class'
809          # initializer list.  While this warning can catch real bugs, most of
810          # the time the constructors in question don't attempt to call methods
811          # on the passed-in pointer (until later), and annotating every legit
812          # usage of this is simply more hassle than the warning is worth.
813          4355,
814
815          # C4503: 'identifier': decorated name length exceeded, name was
816          #        truncated
817          # This only means that some long error messages might have truncated
818          # identifiers in the presence of lots of templates.  It has no effect
819          # on program correctness and there's no real reason to waste time
820          # trying to prevent it.
821          4503,
822
823          # Warning C4589 says: "Constructor of abstract class ignores
824          # initializer for virtual base class." Disable this warning because it
825          # is flaky in VS 2015 RTM. It triggers on compiler generated
826          # copy-constructors in some cases.
827          4589,
828
829          # C4611: interaction between 'function' and C++ object destruction is
830          #        non-portable
831          # This warning is unavoidable when using e.g. setjmp/longjmp.  MSDN
832          # suggests using exceptions instead of setjmp/longjmp for C++, but
833          # Chromium code compiles without exception support.  We therefore have
834          # to use setjmp/longjmp for e.g. JPEG decode error handling, which
835          # means we have to turn off this warning (and be careful about how
836          # object destruction happens in such cases).
837          4611,
838
839          # TODO(jochen): These warnings are level 4. They will be slowly
840          # removed as code is fixed.
841          4100, # Unreferenced formal parameter
842          4121, # Alignment of a member was sensitive to packing
843          4244, # Conversion from 'type1' to 'type2', possible loss of data
844          4302, # Truncation from 'type 1' to 'type 2'
845          4309, # Truncation of constant value
846          4311, # Pointer truncation from 'type' to 'type'
847          4312, # Conversion from 'type1' to 'type2' of greater size
848          4505, # Unreferenced local function has been removed
849          4510, # Default constructor could not be generated
850          4512, # Assignment operator could not be generated
851          4610, # Object can never be instantiated
852          4800, # Forcing value to bool.
853          4838, # Narrowing conversion. Doesn't seem to be very useful.
854          4995, # 'X': name was marked as #pragma deprecated
855          4996, # 'X': was declared deprecated (for GetVersionEx).
856
857          # These are variable shadowing warnings that are new in VS2015. We
858          # should work through these at some point -- they may be removed from
859          # the RTM release in the /W4 set.
860          4456, 4457, 4458, 4459,
861        ],
862        'msvs_settings': {
863          'VCCLCompilerTool': {
864            'MinimalRebuild': 'false',
865            'BufferSecurityCheck': 'true',
866            'EnableFunctionLevelLinking': 'true',
867            'RuntimeTypeInfo': 'false',
868            'WarningLevel': '3',
869            'WarnAsError': 'true',
870            'DebugInformationFormat': '3',
871            'Detect64BitPortabilityProblems': 'false',
872            'conditions': [
873              [ 'msvs_multi_core_compile', {
874                'AdditionalOptions': ['/MP'],
875              }],
876              ['component=="shared_library"', {
877                'ExceptionHandling': '1',  # /EHsc
878              }, {
879                'ExceptionHandling': '0',
880              }],
881            ],
882          },
883          'VCLibrarianTool': {
884            'AdditionalOptions': ['/ignore:4221'],
885            'conditions': [
886              ['v8_target_arch=="x64"', {
887                'TargetMachine': '17',  # x64
888              }, {
889                'TargetMachine': '1',  # ia32
890              }],
891            ],
892          },
893          'VCLinkerTool': {
894            'AdditionalDependencies': [
895              'ws2_32.lib',
896            ],
897            'GenerateDebugInformation': 'true',
898            'MapFileName': '$(OutDir)\\$(TargetName).map',
899            'ImportLibrary': '$(OutDir)\\lib\\$(TargetName).lib',
900            'FixedBaseAddress': '1',
901            # LinkIncremental values:
902            #   0 == default
903            #   1 == /INCREMENTAL:NO
904            #   2 == /INCREMENTAL
905            'LinkIncremental': '1',
906            # SubSystem values:
907            #   0 == not set
908            #   1 == /SUBSYSTEM:CONSOLE
909            #   2 == /SUBSYSTEM:WINDOWS
910            'SubSystem': '1',
911
912            'conditions': [
913              ['v8_enable_i18n_support==1', {
914                'AdditionalDependencies': [
915                  'advapi32.lib',
916                ],
917              }],
918              ['v8_target_arch=="x64"', {
919                'MinimumRequiredVersion': '5.02',  # Server 2003.
920                'TargetMachine': '17',  # x64
921              }, {
922                'MinimumRequiredVersion': '5.01',  # XP.
923                'TargetMachine': '1',  # ia32
924              }],
925            ],
926          },
927        },
928      },
929    }],  # OS=="win"
930    ['OS=="mac"', {
931      'xcode_settings': {
932        'SDKROOT': 'macosx',
933        'SYMROOT': '<(DEPTH)/xcodebuild',
934      },
935      'target_defaults': {
936        'xcode_settings': {
937          'ALWAYS_SEARCH_USER_PATHS': 'NO',
938          'GCC_C_LANGUAGE_STANDARD': 'c99',         # -std=c99
939          'GCC_CW_ASM_SYNTAX': 'NO',                # No -fasm-blocks
940          'GCC_DYNAMIC_NO_PIC': 'NO',               # No -mdynamic-no-pic
941                                                    # (Equivalent to -fPIC)
942          'GCC_ENABLE_CPP_EXCEPTIONS': 'NO',        # -fno-exceptions
943          'GCC_ENABLE_CPP_RTTI': 'NO',              # -fno-rtti
944          'GCC_ENABLE_PASCAL_STRINGS': 'NO',        # No -mpascal-strings
945          # GCC_INLINES_ARE_PRIVATE_EXTERN maps to -fvisibility-inlines-hidden
946          'GCC_INLINES_ARE_PRIVATE_EXTERN': 'YES',
947          'GCC_SYMBOLS_PRIVATE_EXTERN': 'YES',      # -fvisibility=hidden
948          'GCC_THREADSAFE_STATICS': 'NO',           # -fno-threadsafe-statics
949          'GCC_WARN_NON_VIRTUAL_DESTRUCTOR': 'YES', # -Wnon-virtual-dtor
950          # MACOSX_DEPLOYMENT_TARGET maps to -mmacosx-version-min
951          'MACOSX_DEPLOYMENT_TARGET': '<(mac_deployment_target)',
952          'PREBINDING': 'NO',                       # No -Wl,-prebind
953          'SYMROOT': '<(DEPTH)/xcodebuild',
954          'USE_HEADERMAP': 'NO',
955          'OTHER_CFLAGS': [
956            '-fno-strict-aliasing',
957          ],
958          'WARNING_CFLAGS': [
959            '-Wall',
960            '-Wendif-labels',
961            '-Wno-unused-parameter',
962            # Don't warn about the "struct foo f = {0};" initialization pattern.
963            '-Wno-missing-field-initializers',
964            '-Wno-gnu-zero-variadic-macro-arguments',
965          ],
966        },
967        'conditions': [
968          ['werror==""', {
969            'xcode_settings': {'GCC_TREAT_WARNINGS_AS_ERRORS': 'NO'},
970          }, {
971            'xcode_settings': {'GCC_TREAT_WARNINGS_AS_ERRORS': 'YES'},
972          }],
973          ['clang==1', {
974            'xcode_settings': {
975              'GCC_VERSION': 'com.apple.compilers.llvm.clang.1_0',
976              'CLANG_CXX_LANGUAGE_STANDARD': 'gnu++0x',  # -std=gnu++0x
977            },
978            'conditions': [
979              ['v8_target_arch=="x64" or v8_target_arch=="arm64" \
980                or v8_target_arch=="mips64el"', {
981                'xcode_settings': {'WARNING_CFLAGS': ['-Wshorten-64-to-32']},
982              }],
983            ],
984          }],
985        ],
986        'target_conditions': [
987          ['_type!="static_library"', {
988            'xcode_settings': {'OTHER_LDFLAGS': ['-Wl,-search_paths_first']},
989          }],
990        ],  # target_conditions
991      },  # target_defaults
992    }],  # OS=="mac"
993    ['OS=="android"', {
994      'target_defaults': {
995        'defines': [
996          'ANDROID',
997          'V8_ANDROID_LOG_STDOUT',
998        ],
999        'configurations': {
1000          'Release': {
1001            'cflags': [
1002              '-fomit-frame-pointer',
1003            ],
1004          },  # Release
1005        },  # configurations
1006        'cflags': [ '-Wno-abi', '-Wall', '-W', '-Wno-unused-parameter'],
1007        'cflags_cc': [ '-Wnon-virtual-dtor', '-fno-rtti', '-fno-exceptions',
1008                       # Note: Using -std=c++0x will define __STRICT_ANSI__, which
1009                       # in turn will leave out some template stuff for 'long
1010                       # long'.  What we want is -std=c++11, but this is not
1011                       # supported by GCC 4.6 or Xcode 4.2
1012                       '-std=gnu++0x' ],
1013        'target_conditions': [
1014          ['_toolset=="target"', {
1015            'cflags!': [
1016              '-pthread',  # Not supported by Android toolchain.
1017            ],
1018            'cflags': [
1019              '-ffunction-sections',
1020              '-funwind-tables',
1021              '-fstack-protector',
1022              '-fno-short-enums',
1023              '-finline-limit=64',
1024              '-Wa,--noexecstack',
1025              # Note: This include is in cflags to ensure that it comes after
1026              # all of the includes.
1027              '-I<(android_include)',
1028              '-I<(android_stlport_include)',
1029            ],
1030            'cflags_cc': [
1031              '-Wno-error=non-virtual-dtor',  # TODO(michaelbai): Fix warnings.
1032            ],
1033            'defines': [
1034              'ANDROID',
1035              #'__GNU_SOURCE=1',  # Necessary for clone()
1036              'USE_STLPORT=1',
1037              '_STLP_USE_PTR_SPECIALIZATIONS=1',
1038              'HAVE_OFF64_T',
1039              'HAVE_SYS_UIO_H',
1040              'ANDROID_BINSIZE_HACK', # Enable temporary hacks to reduce binsize.
1041            ],
1042            'ldflags!': [
1043              '-pthread',  # Not supported by Android toolchain.
1044            ],
1045            'ldflags': [
1046              '-nostdlib',
1047              '-Wl,--no-undefined',
1048              '-Wl,-rpath-link=<(android_lib)',
1049              '-L<(android_lib)',
1050            ],
1051            'libraries!': [
1052                '-lrt',  # librt is built into Bionic.
1053                # Not supported by Android toolchain.
1054                # Where do these come from?  Can't find references in
1055                # any Chromium gyp or gypi file.  Maybe they come from
1056                # gyp itself?
1057                '-lpthread', '-lnss3', '-lnssutil3', '-lsmime3', '-lplds4', '-lplc4', '-lnspr4',
1058              ],
1059              'libraries': [
1060                '-l<(android_stlport_library)',
1061                # Manually link the libgcc.a that the cross compiler uses.
1062                '<!(<(android_toolchain)/*-gcc -print-libgcc-file-name)',
1063                '-lc',
1064                '-ldl',
1065                '-lstdc++',
1066                '-lm',
1067            ],
1068            'conditions': [
1069              ['target_arch == "arm"', {
1070                'ldflags': [
1071                  # Enable identical code folding to reduce size.
1072                  '-Wl,--icf=safe',
1073                ],
1074              }],
1075              ['target_arch=="arm" and arm_version==7', {
1076                'cflags': [
1077                  '-march=armv7-a',
1078                  '-mtune=cortex-a8',
1079                  '-mfpu=vfp3',
1080                ],
1081                'ldflags': [
1082                  '-L<(android_stlport_libs)/armeabi-v7a',
1083                ],
1084              }],
1085              ['target_arch=="arm" and arm_version < 7', {
1086                'ldflags': [
1087                  '-L<(android_stlport_libs)/armeabi',
1088                ],
1089              }],
1090              ['target_arch=="x64"', {
1091                'ldflags': [
1092                  '-L<(android_stlport_libs)/x86_64',
1093                ],
1094              }],
1095              ['target_arch=="arm64"', {
1096                'ldflags': [
1097                  '-L<(android_stlport_libs)/arm64-v8a',
1098                ],
1099              }],
1100              ['target_arch=="ia32" or target_arch=="x87"', {
1101                # The x86 toolchain currently has problems with stack-protector.
1102                'cflags!': [
1103                  '-fstack-protector',
1104                ],
1105                'cflags': [
1106                  '-fno-stack-protector',
1107                ],
1108                'ldflags': [
1109                  '-L<(android_stlport_libs)/x86',
1110                ],
1111              }],
1112              ['target_arch=="mipsel"', {
1113                # The mips toolchain currently has problems with stack-protector.
1114                'cflags!': [
1115                  '-fstack-protector',
1116                  '-U__linux__'
1117                ],
1118                'cflags': [
1119                  '-fno-stack-protector',
1120                ],
1121                'ldflags': [
1122                  '-L<(android_stlport_libs)/mips',
1123                ],
1124              }],
1125              ['(target_arch=="arm" or target_arch=="arm64" or target_arch=="x64" or target_arch=="ia32") and component!="shared_library"', {
1126                'cflags': [
1127                  '-fPIE',
1128                ],
1129                'ldflags': [
1130                  '-pie',
1131                ],
1132              }],
1133            ],
1134            'target_conditions': [
1135              ['_type=="executable"', {
1136                'conditions': [
1137                  ['target_arch=="arm64" or target_arch=="x64"', {
1138                    'ldflags': [
1139                      '-Wl,-dynamic-linker,/system/bin/linker64',
1140                    ],
1141                  }, {
1142                    'ldflags': [
1143                      '-Wl,-dynamic-linker,/system/bin/linker',
1144                    ],
1145                  }]
1146                ],
1147                'ldflags': [
1148                  '-Bdynamic',
1149                  '-Wl,-z,nocopyreloc',
1150                  # crtbegin_dynamic.o should be the last item in ldflags.
1151                  '<(android_lib)/crtbegin_dynamic.o',
1152                ],
1153                'libraries': [
1154                  # crtend_android.o needs to be the last item in libraries.
1155                  # Do not add any libraries after this!
1156                  '<(android_lib)/crtend_android.o',
1157                ],
1158              }],
1159              ['_type=="shared_library"', {
1160                'ldflags': [
1161                  '-Wl,-shared,-Bsymbolic',
1162                  '<(android_lib)/crtbegin_so.o',
1163                ],
1164              }],
1165              ['_type=="static_library"', {
1166                'ldflags': [
1167                  # Don't export symbols from statically linked libraries.
1168                  '-Wl,--exclude-libs=ALL',
1169                ],
1170              }],
1171            ],
1172          }],  # _toolset=="target"
1173          # Settings for building host targets using the system toolchain.
1174          ['_toolset=="host"', {
1175            'cflags': [ '-pthread' ],
1176            'ldflags': [ '-pthread' ],
1177            'ldflags!': [
1178              '-Wl,-z,noexecstack',
1179              '-Wl,--gc-sections',
1180              '-Wl,-O1',
1181              '-Wl,--as-needed',
1182            ],
1183          }],
1184        ],  # target_conditions
1185      },  # target_defaults
1186    }],  # OS=="android"
1187    ['OS=="android" and clang==0', {
1188      # Hardcode the compiler names in the Makefile so that
1189      # it won't depend on the environment at make time.
1190      'make_global_settings': [
1191        ['CC', '<!(/bin/echo -n <(android_toolchain)/*-gcc)'],
1192        ['CXX', '<!(/bin/echo -n <(android_toolchain)/*-g++)'],
1193        ['CC.host', '<(host_cc)'],
1194        ['CXX.host', '<(host_cxx)'],
1195      ],
1196    }],
1197    ['clang!=1 and host_clang==1 and target_arch!="ia32" and target_arch!="x64"', {
1198      'make_global_settings': [
1199        ['CC.host', '<(clang_dir)/bin/clang'],
1200        ['CXX.host', '<(clang_dir)/bin/clang++'],
1201      ],
1202    }],
1203    ['clang==0 and host_clang==1 and target_arch!="ia32" and target_arch!="x64"', {
1204      'target_conditions': [
1205        ['_toolset=="host"', {
1206          'cflags_cc': [ '-std=gnu++11', ],
1207        }],
1208      ],
1209      'target_defaults': {
1210        'target_conditions': [
1211          ['_toolset=="host"', { 'cflags!': [ '-Wno-unused-local-typedefs' ]}],
1212        ],
1213      },
1214    }],
1215    ['clang==1 and "<(GENERATOR)"=="ninja"', {
1216      # See http://crbug.com/110262
1217      'target_defaults': {
1218        'cflags': [ '-fcolor-diagnostics' ],
1219        'xcode_settings': { 'OTHER_CFLAGS': [ '-fcolor-diagnostics' ] },
1220      },
1221    }],
1222    ['clang==1 and ((OS!="mac" and OS!="ios") or clang_xcode==0) '
1223        'and OS!="win" and "<(GENERATOR)"=="make"', {
1224      'make_global_settings': [
1225        ['CC', '<(clang_dir)/bin/clang'],
1226        ['CXX', '<(clang_dir)/bin/clang++'],
1227        ['CC.host', '$(CC)'],
1228        ['CXX.host', '$(CXX)'],
1229      ],
1230    }],
1231    ['clang==1 and ((OS!="mac" and OS!="ios") or clang_xcode==0) '
1232        'and OS!="win" and "<(GENERATOR)"=="ninja"', {
1233      'make_global_settings': [
1234        ['CC', '<(clang_dir)/bin/clang'],
1235        ['CXX', '<(clang_dir)/bin/clang++'],
1236        ['CC.host', '$(CC)'],
1237        ['CXX.host', '$(CXX)'],
1238      ],
1239    }],
1240    ['clang==1 and OS=="win"', {
1241      'make_global_settings': [
1242        # On Windows, gyp's ninja generator only looks at CC.
1243        ['CC', '<(clang_dir)/bin/clang-cl'],
1244      ],
1245    }],
1246    ['OS=="linux" and target_arch=="arm" and host_arch!="arm" and clang==0 and "<(GENERATOR)"=="ninja"', {
1247      # Set default ARM cross tools on linux.  These can be overridden
1248      # using CC,CXX,CC.host and CXX.host environment variables.
1249      'make_global_settings': [
1250        ['CC', '<!(which arm-linux-gnueabihf-gcc)'],
1251        ['CXX', '<!(which arm-linux-gnueabihf-g++)'],
1252        ['CC.host', '<(host_cc)'],
1253        ['CXX.host', '<(host_cxx)'],
1254      ],
1255    }],
1256    # TODO(yyanagisawa): supports GENERATOR==make
1257    #  make generator doesn't support CC_wrapper without CC
1258    #  in make_global_settings yet.
1259    ['use_goma==1 and ("<(GENERATOR)"=="ninja" or clang==1)', {
1260      'make_global_settings': [
1261       ['CC_wrapper', '<(gomadir)/gomacc'],
1262       ['CXX_wrapper', '<(gomadir)/gomacc'],
1263       ['CC.host_wrapper', '<(gomadir)/gomacc'],
1264       ['CXX.host_wrapper', '<(gomadir)/gomacc'],
1265      ],
1266    }],
1267    ['use_lto==1', {
1268      'target_defaults': {
1269        'target_conditions': [
1270          ['_toolset=="target"', {
1271            'cflags': [
1272              '-flto',
1273            ],
1274          }],
1275        ],
1276      },
1277    }],
1278    ['use_lto==1 and clang==0', {
1279      'target_defaults': {
1280        'target_conditions': [
1281          ['_toolset=="target"', {
1282            'cflags': [
1283              '-ffat-lto-objects',
1284            ],
1285          }],
1286        ],
1287      },
1288    }],
1289    ['use_lto==1 and clang==1', {
1290      'target_defaults': {
1291        'target_conditions': [
1292          ['_toolset=="target"', {
1293            'arflags': [
1294              '--plugin', '<(clang_dir)/lib/LLVMgold.so',
1295            ],
1296            # Apply a lower optimization level with lto. Chromium does this
1297            # for non-official builds only - a differentiation that doesn't
1298            # exist in v8.
1299            'ldflags': [
1300              '-Wl,--plugin-opt,O1',
1301            ],
1302          }],
1303        ],
1304      },
1305    }],
1306    ['use_lto==1 and clang==0', {
1307      'target_defaults': {
1308        'target_conditions': [
1309          ['_toolset=="target"', {
1310            'ldflags': [
1311              '-flto=32',
1312            ],
1313          }],
1314        ],
1315      },
1316    }],
1317    ['use_lto==1 and clang==1', {
1318      'target_defaults': {
1319        'target_conditions': [
1320          ['_toolset=="target"', {
1321            'ldflags': [
1322              '-flto',
1323            ],
1324          }],
1325        ],
1326      },
1327    }],
1328    ['cfi_diag==1', {
1329      'target_defaults': {
1330        'target_conditions': [
1331          ['_toolset=="target"', {
1332            'cflags': [
1333              '-fno-sanitize-trap=cfi',
1334              '-fno-sanitize-recover=cfi',
1335            ],
1336            'cflags_cc!': [
1337              '-fno-rtti',
1338            ],
1339            'cflags!': [
1340              '-fno-rtti',
1341            ],
1342            'ldflags': [
1343              '-fno-sanitize-trap=cfi',
1344              '-fno-sanitize-recover=cfi',
1345            ],
1346          }],
1347        ],
1348      },
1349    }],
1350    ['cfi_vptr==1', {
1351      'target_defaults': {
1352        'target_conditions': [
1353          ['_toolset=="target"', {
1354            'cflags': [
1355              '-fsanitize=cfi-vcall',
1356              '-fsanitize=cfi-derived-cast',
1357              '-fsanitize=cfi-unrelated-cast',
1358              '-fsanitize-blacklist=<(cfi_blacklist)',
1359            ],
1360            'ldflags': [
1361              '-fsanitize=cfi-vcall',
1362              '-fsanitize=cfi-derived-cast',
1363              '-fsanitize=cfi-unrelated-cast',
1364            ],
1365          }],
1366        ],
1367      },
1368    }],
1369  ],
1370}
1371