tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

config.gypi (22552B)


      1 # This Source Code Form is subject to the terms of the Mozilla Public
      2 # License, v. 2.0. If a copy of the MPL was not distributed with this
      3 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
      4 {
      5   'variables': {
      6     'module%': '',
      7     'variables': {
      8       'variables': {
      9         'variables': {
     10           'python%': 'python3',
     11         },
     12         # chromium uses pymod_do_main, but gyp doesn't set a sensible
     13         # Python sys.path (gyp_chromium does).
     14         'python%': '<(python)',
     15         'host_arch%': '<!("<(python)" <(DEPTH)/coreconf/detect_host_arch.py)',
     16       },
     17       'python%': '<(python)',
     18       'host_arch%': '<(host_arch)',
     19       'conditions': [
     20         ['OS=="android"', {
     21           'target_arch%': 'arm',
     22         }, 'OS=="ios"', {
     23           'target_arch%': 'arm64',
     24         }, {
     25           # Default architecture we're building for is the architecture we're
     26           # building on.
     27           'target_arch%': '<(host_arch)',
     28         }],
     29         ['OS=="linux"', {
     30           # FIPS-140 LOWHASH
     31           'freebl_name': 'freeblpriv3',
     32         }, {
     33           'freebl_name': 'freebl3',
     34         }],
     35         ['OS=="mac"', {
     36           'use_system_sqlite%': 1,
     37         },{
     38           'use_system_sqlite%': 0,
     39         }],
     40         ['OS=="mac" or OS=="ios" or OS=="solaris" or OS=="win"', {
     41           'cc_use_gnu_ld%': 0,
     42         }, {
     43           'cc_use_gnu_ld%': 1,
     44         }],
     45         ['OS=="win"', {
     46           'use_system_zlib%': 0,
     47           'nspr_libs%': ['libnspr4.lib', 'libplc4.lib', 'libplds4.lib'],
     48           'zlib_libs%': [],
     49           #TODO
     50           'moz_debug_flags%': '',
     51           'dll_prefix': '',
     52           'dll_suffix': 'dll',
     53         }, {
     54           'use_system_zlib%': 1,
     55           'nspr_libs%': ['-lplds4', '-lplc4', '-lnspr4'],
     56           'zlib_libs%': ['-lz'],
     57           'dll_prefix': 'lib',
     58           'conditions': [
     59             ['OS=="mac" or OS=="ios"', {
     60               'moz_debug_flags%': '-gdwarf-2 -gfull',
     61               'dll_suffix': 'dylib',
     62             }, {
     63               'moz_debug_flags%': '-gdwarf-2',
     64               'dll_suffix': 'so',
     65             }],
     66           ],
     67         }],
     68         ['"<(GENERATOR)"=="ninja"', {
     69           'cc_is_clang%': '<!("<(python)" <(DEPTH)/coreconf/check_cc.py clang)',
     70         }, {
     71           'cc_is_clang%': '0',
     72         }],
     73         ['"<(GENERATOR)"=="ninja"', {
     74           'cc_is_gcc%': '<!("<(python)" <(DEPTH)/coreconf/check_cc.py gcc)',
     75         }, {
     76           'cc_is_gcc%': '0',
     77         }],
     78         ['"<(GENERATOR)"=="ninja"', {
     79           'cc_is_cc%': '<!("<(python)" <(DEPTH)/coreconf/check_cc.py cc)',
     80         }, {
     81           'cc_is_cc%': '0',
     82         }],
     83       ],
     84     },
     85     # Copy conditionally-set variables out one scope.
     86     'python%': '<(python)',
     87     'host_arch%': '<(host_arch)',
     88     'target_arch%': '<(target_arch)',
     89     'use_system_zlib%': '<(use_system_zlib)',
     90     'zlib_libs%': ['<@(zlib_libs)'],
     91     'moz_debug_flags%': '<(moz_debug_flags)',
     92     'nspr_libs%': ['<@(nspr_libs)'],
     93     'nspr_lib_dir%': '<(nspr_lib_dir)',
     94     'nspr_include_dir%': '<(nspr_include_dir)',
     95     'use_system_sqlite%': '<(use_system_sqlite)',
     96     'sqlite_libs%': ['-lsqlite3'],
     97     'dll_prefix': '<(dll_prefix)',
     98     'dll_suffix': '<(dll_suffix)',
     99     'freebl_name': '<(freebl_name)',
    100     'cc_is_clang%': '<(cc_is_clang)',
    101     'cc_is_gcc%': '<(cc_is_gcc)',
    102     'cc_use_gnu_ld%': '<(cc_use_gnu_ld)',
    103     # Some defaults
    104     'disable_arm_hw_aes%': 0,
    105     'disable_arm_hw_sha1%': 0,
    106     'disable_arm_hw_sha2%': 0,
    107     'disable_intel_hw_sha%': 0,
    108     'disable_tests%': 0,
    109     'disable_chachapoly%': 0,
    110     'disable_dsa%': 0,
    111     'disable_deprecated_seed%': 0,
    112     'disable_deprecated_rc2%': 0,
    113     'disable_dbm%': 1,
    114     'disable_libpkix%': 1,
    115     'disable_kyber%' : 0,
    116     'disable_werror%': 0,
    117     'disable_altivec%': 0,
    118     'disable_crypto_vsx%': 0,
    119     'disable_arm32_neon%': 0,
    120     'mozilla_client%': 0,
    121     'comm_client%': 0,
    122     'moz_fold_libs%': 0,
    123     'moz_folded_library_name%': '',
    124     'sanitizer_flags%': 0,
    125     'static_libs%': 0,
    126     'no_zdefs%': 0,
    127     'fuzz%': 0,
    128     'fuzz_tls%': 0,
    129     'fuzz_oss%': 0,
    130     'sign_libs%': 1,
    131     'use_pprof%': 0,
    132     'ct_verif%': 0,
    133     'emit_llvm%': 0,
    134     'nss_public_dist_dir%': '<(nss_dist_dir)/public',
    135     'nss_private_dist_dir%': '<(nss_dist_dir)/private',
    136     # This is only needed when building with --mozpkix-only and might not work
    137     # on all machines.
    138     'nss_include_dir%': '/usr/include/nss',
    139     'only_dev_random%': 1,
    140     'disable_fips%': 1,
    141     'fips_module_id%': '',
    142     'mozpkix_only%': 0,
    143     'mozilla_central%': 0,
    144     'coverage%': 0,
    145     'softfp_cflags%': '',
    146     'enable_draft_hpke%': 0,
    147     'disable_ckbi%': 0,
    148     'ppc_abi%': 0,
    149     'use_pkcs5_pbkd2_params2_only%': 0,
    150     'nss_use_pkcs5_pbkd2_params2_only%': 0,
    151     'softoken_use_pkcs5_pbkd2_params2_only%': 0,
    152   },
    153   'target_defaults': {
    154     # Settings specific to targets should go here.
    155     # This is mostly for linking to libraries.
    156     'variables': {
    157       'mapfile%': '',
    158       'static_libs%': 0,
    159       'debug_optimization_level%': '0',
    160       'release_optimization_level%': '2',
    161     },
    162     'standalone_static_library': 0,
    163     'include_dirs': [
    164       '<(nspr_include_dir)',
    165       '<(nss_dist_dir)/private/<(module)',
    166     ],
    167     'conditions': [
    168       [ 'mozpkix_only==1 and OS=="linux"', {
    169         'include_dirs': [
    170           '<(nss_include_dir)',
    171         ],
    172       }],
    173       [ 'disable_fips==0', {
    174         'defines': [
    175           'NSS_ENABLE_FIPS_INDICATORS',
    176         ],
    177       }],
    178       [ 'disable_fips==1', {
    179         'defines': [
    180           'NSS_FIPS_DISABLED',
    181           'NSS_NO_INIT_SUPPORT',
    182         ],
    183       }],
    184       [ 'fips_module_id!=""', {
    185         'defines': [
    186           'NSS_FIPS_MODULE_ID="<(fips_module_id)"'
    187         ],
    188       }],
    189       [ 'OS!="android" and OS!="mac" and OS!="ios" and OS!="win"', {
    190         'libraries': [
    191           '-lpthread',
    192         ],
    193       }],
    194       [ 'OS=="linux"', {
    195         'libraries': [
    196           '-ldl',
    197           '-lc',
    198         ],
    199       }],
    200       [ 'OS=="android"', {
    201         'libraries': [
    202           '-llog',
    203         ],
    204       }],
    205       [ 'fuzz==1', {
    206         'variables': {
    207           'debug_optimization_level%': '3',
    208         },
    209       }],
    210       [ 'target_arch=="ia32" or target_arch=="x64"', {
    211         'defines': [
    212           'NSS_X86_OR_X64',
    213         ],
    214         # For Windows.
    215         'msvs_settings': {
    216           'VCCLCompilerTool': {
    217             'PreprocessorDefinitions': [
    218               'NSS_X86_OR_X64',
    219             ],
    220           },
    221         },
    222       }],
    223       [ 'target_arch=="ia32"', {
    224         'defines': [
    225           'NSS_X86',
    226         ],
    227         # For Windows.
    228         'msvs_settings': {
    229           'VCCLCompilerTool': {
    230             'PreprocessorDefinitions': [
    231               'NSS_X86',
    232             ],
    233           },
    234         },
    235       }],
    236       [ 'target_arch=="arm64" or target_arch=="aarch64" or target_arch=="sparc64" or target_arch=="ppc64" or target_arch=="ppc64le" or target_arch=="s390x" or target_arch=="mips64" or target_arch=="e2k" or target_arch=="riscv64" or target_arch=="loongarch64"', {
    237         'defines': [
    238           'NSS_USE_64',
    239         ],
    240       }],
    241       [ 'target_arch=="x64"', {
    242         'defines': [
    243           'NSS_X64',
    244           'NSS_USE_64',
    245         ],
    246         # For Windows.
    247         'msvs_settings': {
    248           'VCCLCompilerTool': {
    249             'PreprocessorDefinitions': [
    250               'NSS_X64',
    251               'NSS_USE_64',
    252             ],
    253           },
    254         },
    255       }],
    256     ],
    257     'target_conditions': [
    258       # If we want to properly export a static library, and copy it to lib,
    259       # we need to mark it as a 'standalone_static_library'. Otherwise,
    260       # the relative paths in the thin archive will break linking.
    261       [ '_type=="shared_library"', {
    262         'product_dir': '<(nss_dist_obj_dir)/lib'
    263       }, '_type=="executable"', {
    264         'product_dir': '<(nss_dist_obj_dir)/bin'
    265       }, 'static_libs==1 or _standalone_static_library==1', {
    266         'product_dir': '<(nss_dist_obj_dir)/lib'
    267       }],
    268       # mapfile handling
    269       [ 'mapfile!=""', {
    270         # Work around a gyp bug. Fixed upstream but not in Ubuntu packages:
    271         # https://chromium.googlesource.com/external/gyp/+/b85ad3e578da830377dbc1843aa4fbc5af17a192%5E%21/
    272         'sources': [
    273           '<(DEPTH)/coreconf/empty.c',
    274         ],
    275         'xcode_settings': {
    276           'OTHER_LDFLAGS': [
    277             '-exported_symbols_list',
    278             '<(INTERMEDIATE_DIR)/out.>(mapfile)',
    279           ],
    280         },
    281         'conditions': [
    282           [ 'cc_use_gnu_ld==1', {
    283             'ldflags': [
    284               '-Wl,--version-script,<(INTERMEDIATE_DIR)/out.>(mapfile)',
    285             ],
    286           }],
    287           [ 'cc_use_gnu_ld!=1 and OS=="win"', {
    288             # On Windows, .def files are used directly as sources.
    289             'sources': [
    290               '>(mapfile)',
    291             ],
    292           }, {
    293             # On other platforms, .def files need processing.
    294             'sources': [
    295               '<(INTERMEDIATE_DIR)/out.>(mapfile)',
    296             ],
    297             'actions': [{
    298               'action_name': 'generate_mapfile',
    299               'inputs': [
    300                 '>(mapfile)',
    301               ],
    302               'outputs': [
    303                 '<(INTERMEDIATE_DIR)/out.>(mapfile)',
    304               ],
    305               'action': ['<@(process_map_file)'],
    306             }],
    307           }]
    308         ],
    309       }, 'static_libs==1 and _type=="shared_library"', {
    310         # When linking a shared lib against a static one, XCode doesn't
    311         # export the latter's symbols by default. -all_load fixes that.
    312         'xcode_settings': {
    313           'OTHER_LDFLAGS': [
    314             '-all_load',
    315           ],
    316         },
    317       }],
    318       [ '_type=="shared_library" or _type=="executable"', {
    319         'libraries': [
    320           '<@(nspr_libs)',
    321         ],
    322         'library_dirs': [
    323           '<(nspr_lib_dir)',
    324         ],
    325       }],
    326       # Shared library specific settings.
    327       [ '_type=="shared_library"', {
    328         'conditions': [
    329           [ 'cc_use_gnu_ld==1', {
    330             'ldflags': [
    331               '-Wl,--gc-sections',
    332             ],
    333             'conditions': [
    334               ['no_zdefs==0', {
    335                 'ldflags': [
    336                   '-Wl,-z,defs',
    337                 ],
    338               }],
    339             ],
    340           }],
    341         ],
    342         'xcode_settings': {
    343           'DYLIB_INSTALL_NAME_BASE': '@executable_path',
    344           'DYLIB_COMPATIBILITY_VERSION': '1',
    345           'DYLIB_CURRENT_VERSION': '1',
    346           'OTHER_LDFLAGS': [
    347             '-headerpad_max_install_names',
    348           ],
    349         },
    350         'msvs_settings': {
    351           'VCLinkerTool': {
    352             'SubSystem': '2',
    353           },
    354         },
    355       }],
    356       [ '_type=="static_library" and static_libs==1', {
    357         'standalone_static_library': 1,
    358       }],
    359     ],
    360     'default_configuration': 'Debug',
    361     'configurations': {
    362       # Common settings for Debug+Release should go here.
    363       'Common': {
    364         'abstract': 1,
    365         'defines': [
    366           'USE_UTIL_DIRECTLY',
    367           'NO_NSPR_10_SUPPORT',
    368           'SSL_DISABLE_DEPRECATED_CIPHER_SUITE_NAMES',
    369         ],
    370         'msvs_configuration_attributes': {
    371           'OutputDirectory': '$(SolutionDir)$(ConfigurationName)',
    372           'IntermediateDirectory': '$(OutDir)\\obj\\$(ProjectName)',
    373         },
    374         'msvs_settings': {
    375           'VCCLCompilerTool': {
    376             'AdditionalIncludeDirectories': ['<(nspr_include_dir)'],
    377           },
    378         },
    379         'xcode_settings': {
    380           'CLANG_CXX_LANGUAGE_STANDARD': 'c++0x',
    381           'OTHER_CFLAGS': [
    382             '-fPIC',
    383             '-fno-common',
    384             '-pipe',
    385           ],
    386         },
    387         'conditions': [
    388           [ 'OS=="linux" or OS=="android"', {
    389             'defines': [
    390               'LINUX2_1',
    391               'LINUX',
    392               'linux',
    393               '_DEFAULT_SOURCE', # for <endian.h> functions, strdup, realpath, and getentropy
    394               '_BSD_SOURCE', # for the above in glibc <= 2.19
    395               '_POSIX_SOURCE', # for <signal.h>
    396               'SDB_MEASURE_USE_TEMP_DIR', # use tmpdir for the access calls
    397             ],
    398           }],
    399           [ 'OS=="dragonfly" or OS=="freebsd"', {
    400             'defines': [
    401               'FREEBSD',
    402             ],
    403           }],
    404           [ 'OS=="netbsd"', {
    405             'defines': [
    406               'NETBSD',
    407             ],
    408           }],
    409           [ 'OS=="openbsd"', {
    410             'defines': [
    411               'OPENBSD',
    412             ],
    413           }],
    414           ['OS=="mac" or OS=="ios" or OS=="dragonfly" or OS=="freebsd" or OS=="netbsd" or OS=="openbsd"', {
    415             'defines': [
    416               'HAVE_BSD_FLOCK',
    417             ],
    418           }],
    419           [ 'OS!="win"', {
    420             'defines': [
    421               'HAVE_STRERROR',
    422               'XP_UNIX',
    423               '_REENTRANT',
    424             ],
    425           }],
    426           [ 'OS!="mac" and OS!="ios" and OS!="solaris" and OS!="win"', {
    427             'ldflags': [
    428               '-z', 'noexecstack',
    429             ],
    430           }],
    431           [ 'OS!="mac" and OS!="ios" and OS!="win"', {
    432             'cflags': [
    433               '-fPIC',
    434               '-pipe',
    435               '-ffunction-sections',
    436               '-fdata-sections',
    437             ],
    438             'cflags_c': [
    439               '-std=c99',
    440             ],
    441             'cflags_cc': [
    442               '-std=c++11',
    443             ],
    444             'conditions': [
    445               [ 'target_arch=="ia32"', {
    446                 'cflags': ['-m32'],
    447                 'ldflags': ['-m32'],
    448               }],
    449               [ 'target_arch=="x64"', {
    450                 'cflags': ['-m64'],
    451                 'ldflags': ['-m64'],
    452               }],
    453             ],
    454           }],
    455           [ 'use_pprof==1 and OS!="android" and OS!="win"', {
    456             'conditions': [
    457               [ 'OS=="mac" or OS=="ios"', {
    458                 'xcode_settings': {
    459                   'OTHER_LDFLAGS': [ '-lprofiler' ],
    460                 },
    461               }, {
    462                 'ldflags': [ '-lprofiler' ],
    463               }],
    464               [ 'OS!="linux"', {
    465                 'library_dirs': [
    466                   '/usr/local/lib/',
    467                 ],
    468               }],
    469             ],
    470           }],
    471           [ 'disable_werror==0 and OS!="android" and OS!="win"', {
    472             'cflags': [
    473               '<!@("<(python)" <(DEPTH)/coreconf/werror.py)',
    474             ],
    475             'xcode_settings': {
    476               'OTHER_CFLAGS': [
    477                 '<!@("<(python)" <(DEPTH)/coreconf/werror.py)',
    478               ],
    479             },
    480           }],
    481           [ 'fuzz_tls==1', {
    482             'cflags': [
    483               '-Wno-unused-function',
    484               '-Wno-unused-variable',
    485             ],
    486             'xcode_settings': {
    487               'OTHER_CFLAGS': [
    488                 '-Wno-unused-function',
    489                 '-Wno-unused-variable',
    490               ],
    491             },
    492           }],
    493           [ 'sanitizer_flags!=0', {
    494             'cflags': ['<@(sanitizer_flags)'],
    495             'ldflags': ['<@(sanitizer_flags)'],
    496             'xcode_settings': {
    497               'OTHER_CFLAGS': ['<@(sanitizer_flags)'],
    498               # We want to pass -fsanitize=... to our final link call,
    499               # but not to libtool. OTHER_LDFLAGS is passed to both.
    500               # To trick GYP into doing what we want, we'll piggyback on
    501               # LIBRARY_SEARCH_PATHS, producing "-L/usr/lib -fsanitize=...".
    502               # The -L/usr/lib is redundant but innocuous: it's a default path.
    503               'LIBRARY_SEARCH_PATHS': ['/usr/lib <(sanitizer_flags)'],
    504             },
    505           }],
    506           [ 'emit_llvm==1', {
    507             'cflags': ['-flto'],
    508             'ldflags': ['-flto', '-fuse-ld=gold', '-Wl,-plugin-opt=save-temps'],
    509           }],
    510           [ 'OS=="android" and mozilla_client==0', {
    511             'defines': [
    512               'NO_SYSINFO',
    513               'NO_FORK_CHECK',
    514               'ANDROID',
    515             ],
    516           }],
    517           [ 'OS=="mac" or OS=="ios"', {
    518             'defines': [
    519               'DARWIN',
    520             ],
    521             'conditions': [
    522               [ 'target_arch=="ia32"', {
    523                 'xcode_settings': {
    524                   'ARCHS': ['i386'],
    525                 },
    526               }],
    527               [ 'target_arch=="x64"', {
    528                 'xcode_settings': {
    529                   'ARCHS': ['x86_64'],
    530                 },
    531               }],
    532               [ 'target_arch=="arm64"', {
    533                 'xcode_settings': {
    534                   'ARCHS': ['arm64'],
    535                 },
    536               }],
    537             ],
    538           }],
    539           [ 'OS=="ios"', {
    540             'xcode_settings': {
    541               'IPHONEOS_DEPLOYMENT_TARGET': '<(iphone_deployment_target)',
    542             },
    543           }],
    544           [ 'OS=="win"', {
    545             'defines': [
    546               '_WINDOWS',
    547               '_CRT_SECURE_NO_WARNINGS',
    548               '_CRT_NONSTDC_NO_WARNINGS',
    549             ],
    550             'cflags': [
    551               '-W3',
    552               '-w44267', # Disable C4267: conversion from 'size_t' to 'type', possible loss of data
    553               '-w44244', # Disable C4244: conversion from 'type1' to 'type2', possible loss of data
    554               '-w44018', # Disable C4018: 'expression' : signed/unsigned mismatch
    555               '-w44312', # Disable C4312: 'type cast': conversion from 'type1' to 'type2' of greater size
    556             ],
    557             'conditions': [
    558               [ 'disable_werror==0', {
    559                 'cflags': ['-WX']
    560               }],
    561               [ 'target_arch=="ia32"', {
    562                 'msvs_configuration_platform': 'Win32',
    563                 'msvs_settings': {
    564                   'VCLinkerTool': {
    565                     'MinimumRequiredVersion': '5.01',  # XP.
    566                     'TargetMachine': '1',
    567                     'ImageHasSafeExceptionHandlers': 'false',
    568                   },
    569                   'VCCLCompilerTool': {
    570                     'PreprocessorDefinitions': [
    571                       'WIN32',
    572                     ],
    573                     'AdditionalOptions': [ '/EHsc' ],
    574                   },
    575                 },
    576               }],
    577               [ 'target_arch=="x64"', {
    578                 'msvs_configuration_platform': 'x64',
    579                 'msvs_settings': {
    580                   'VCLinkerTool': {
    581                     'TargetMachine': '17', # x86-64
    582                   },
    583                   'VCCLCompilerTool': {
    584                     'PreprocessorDefinitions': [
    585                       'WIN64',
    586                       '_AMD64_',
    587                     ],
    588                     'AdditionalOptions': [ '/EHsc' ],
    589                   },
    590                 },
    591               }],
    592             ],
    593           }],
    594           [ 'disable_dbm==1', {
    595             'defines': [
    596               'NSS_DISABLE_DBM',
    597             ],
    598           }],
    599           [ 'disable_libpkix==1', {
    600             'defines': [
    601               'NSS_DISABLE_LIBPKIX',
    602             ],
    603           }],
    604           [ 'disable_dsa==1', {
    605             'defines': [
    606               'NSS_DISABLE_DSA',
    607             ],
    608           }],
    609           [ 'disable_deprecated_seed==1', {
    610             'defines': [
    611               'NSS_DISABLE_DEPRECATED_SEED',
    612             ],
    613           }],
    614           [ 'disable_deprecated_rc2==1', {
    615             'defines': [
    616               'NSS_DISABLE_DEPRECATED_RC2',
    617             ],
    618           }],
    619           [ 'disable_kyber==1', {
    620             'defines': [
    621               'NSS_DISABLE_KYBER',
    622             ],
    623           }],
    624 
    625           [ 'use_pkcs5_pbkd2_params2_only==1', {
    626             'defines': [
    627               'NSS_USE_PKCS5_PBKD2_PARAMS2_ONLY',
    628               'SOFTOKEN_USE_PKCS5_PBKD2_PARAMS2_ONLY',
    629             ],
    630           }],
    631           [ 'nss_use_pkcs5_pbkd2_params2_only==1', {
    632             'defines': [
    633               'NSS_USE_PKCS5_PBKD2_PARAMS2_ONLY',
    634             ],
    635           }],
    636           [ 'softoken_use_pkcs5_pbkd2_params2_only==1', {
    637             'defines': [
    638               'SOFTOKEN_USE_PKCS5_PBKD2_PARAMS2_ONLY',
    639             ],
    640           }],
    641         ],
    642       },
    643       # Common settings for debug should go here.
    644       'Debug': {
    645         'inherit_from': ['Common'],
    646         'conditions': [
    647           [ 'OS!="mac" and OS!="ios" and OS!="win"', {
    648             'cflags': [
    649               '-g',
    650               '<(moz_debug_flags)',
    651             ],
    652           }]
    653         ],
    654         #TODO: DEBUG_$USER
    655         'defines': ['DEBUG'],
    656         'cflags': [ '-O<(debug_optimization_level)' ],
    657         'xcode_settings': {
    658           'COPY_PHASE_STRIP': 'NO',
    659           'GCC_OPTIMIZATION_LEVEL': '<(debug_optimization_level)',
    660           'GCC_GENERATE_DEBUGGING_SYMBOLS': 'YES',
    661         },
    662         'msvs_settings': {
    663           'VCCLCompilerTool': {
    664             'Optimization': '<(debug_optimization_level)',
    665             'BasicRuntimeChecks': '3',
    666             'RuntimeLibrary': '2', # /MD
    667             'DebugInformationFormat': '3',
    668           },
    669           'VCLinkerTool': {
    670             'LinkIncremental': '1',
    671             'GenerateDebugInformation' : 'true',
    672           },
    673           'VCResourceCompilerTool': {
    674             'PreprocessorDefinitions': ['DEBUG'],
    675           },
    676         },
    677       },
    678       # Common settings for release should go here.
    679       'Release': {
    680         'inherit_from': ['Common'],
    681         'defines': ['NDEBUG'],
    682         'cflags': [ '-O<(release_optimization_level)' ],
    683         'xcode_settings': {
    684           'DEAD_CODE_STRIPPING': 'YES',  # -Wl,-dead_strip
    685           'GCC_OPTIMIZATION_LEVEL': '<(release_optimization_level)',
    686         },
    687         'msvs_settings': {
    688           'VCCLCompilerTool': {
    689             'Optimization': '<(release_optimization_level)',
    690             'RuntimeLibrary': '2', # /MD
    691           },
    692           'VCLinkerTool': {
    693             'LinkIncremental': '1',
    694           },
    695         },
    696       },
    697       'conditions': [
    698         [ 'OS=="win"', {
    699           # The gyp ninja backend requires these.
    700           # TODO: either we should support building both 32/64-bit as
    701           # configurations from the same gyp build, or we should fix
    702           # upstream gyp to not require these.
    703           'Debug_x64': {
    704             'inherit_from': ['Debug'],
    705           },
    706           'Release_x64': {
    707             'inherit_from': ['Release'],
    708           },
    709         }],
    710       ],
    711     },
    712   },
    713   'conditions': [
    714     [ 'cc_use_gnu_ld==1 or OS=="solaris"', {
    715       'variables': {
    716         'process_map_file': ['/bin/sh', '-c', '/usr/bin/env grep -v ";-" >(mapfile) | sed -e "s,;+,," -e "s; DATA ;;" -e "s,;;,," -e "s,;.*,;," > >@(_outputs)'],
    717       },
    718     }],
    719     [ 'OS=="mac" or OS=="ios"', {
    720       'variables': {
    721         'process_map_file': ['/bin/sh', '-c', '/usr/bin/grep -v ";+" >(mapfile) | grep -v ";-" | sed -e "s; DATA ;;" -e "s,;;,," -e "s,;.*,," -e "s,^,_," > >@(_outputs)'],
    722       },
    723     }],
    724   ],
    725 }