mirror of
https://github.com/nodejs/node.git
synced 2024-11-29 23:16:30 +01:00
48e5b350b3
This makes compiling v8_base much faster on Windows. Sharding is disabled because the header would have to be precompiled for each shard but is only once. The library is much smaller, so sharding is unnecessary. This is enabled by default, but disabled for CI and releases. PR-URL: https://github.com/nodejs/node/pull/21772 Reviewed-By: Rich Trott <rtrott@gmail.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Refael Ackermann <refack@gmail.com> Reviewed-By: Kyle Farnung <kfarnung@microsoft.com> Reviewed-By: Bartosz Sosnowski <bartosz@janeasystems.com>
510 lines
17 KiB
Python
510 lines
17 KiB
Python
{
|
|
'variables': {
|
|
'asan%': 0,
|
|
'werror': '', # Turn off -Werror in V8 build.
|
|
'visibility%': 'hidden', # V8's visibility setting
|
|
'target_arch%': 'ia32', # set v8's target architecture
|
|
'host_arch%': 'ia32', # set v8's host architecture
|
|
'want_separate_host_toolset%': 0, # V8 should not build target and host
|
|
'library%': 'static_library', # allow override to 'shared_library' for DLL/.so builds
|
|
'component%': 'static_library', # NB. these names match with what V8 expects
|
|
'msvs_multi_core_compile': '0', # we do enable multicore compiles, but not using the V8 way
|
|
'python%': 'python',
|
|
|
|
'node_shared%': 'false',
|
|
'force_dynamic_crt%': 0,
|
|
'node_use_v8_platform%': 'true',
|
|
'node_use_bundled_v8%': 'true',
|
|
'node_module_version%': '',
|
|
'node_with_ltcg%': '',
|
|
'node_use_pch%': 'false',
|
|
|
|
'node_tag%': '',
|
|
'uv_library%': 'static_library',
|
|
|
|
'openssl_fips%': '',
|
|
|
|
# Default to -O0 for debug builds.
|
|
'v8_optimized_debug%': 0,
|
|
|
|
# Reset this number to 0 on major V8 upgrades.
|
|
# Increment by one for each non-official patch applied to deps/v8.
|
|
'v8_embedder_string': '-node.12',
|
|
|
|
# Enable disassembler for `--print-code` v8 options
|
|
'v8_enable_disassembler': 1,
|
|
|
|
# Don't bake anything extra into the snapshot.
|
|
'v8_use_external_startup_data%': 0,
|
|
|
|
# Disable V8 untrusted code mitigations.
|
|
# See https://github.com/v8/v8/wiki/Untrusted-code-mitigations
|
|
'v8_untrusted_code_mitigations': 'false',
|
|
|
|
# Some STL containers (e.g. std::vector) do not preserve ABI compatibility
|
|
# between debug and non-debug mode.
|
|
'disable_glibcxx_debug': 1,
|
|
|
|
# Don't use ICU data file (icudtl.dat) from V8, we use our own.
|
|
'icu_use_data_file_flag%': 0,
|
|
|
|
'conditions': [
|
|
['GENERATOR=="ninja"', {
|
|
'obj_dir': '<(PRODUCT_DIR)/obj',
|
|
'conditions': [
|
|
[ 'build_v8_with_gn=="true"', {
|
|
'v8_base': '<(PRODUCT_DIR)/obj/deps/v8/gypfiles/v8_monolith.gen/gn/obj/libv8_monolith.a',
|
|
}, {
|
|
'v8_base': '<(PRODUCT_DIR)/obj/deps/v8/gypfiles/libv8_base.a',
|
|
}],
|
|
]
|
|
}, {
|
|
'obj_dir%': '<(PRODUCT_DIR)/obj.target',
|
|
'v8_base': '<(PRODUCT_DIR)/obj.target/deps/v8/gypfiles/libv8_base.a',
|
|
}],
|
|
['OS == "win"', {
|
|
'os_posix': 0,
|
|
'v8_postmortem_support%': 'false',
|
|
'obj_dir': '<(PRODUCT_DIR)/obj',
|
|
'v8_base': '<(PRODUCT_DIR)/lib/v8_libbase.lib',
|
|
}, {
|
|
'os_posix': 1,
|
|
'v8_postmortem_support%': 'true',
|
|
}],
|
|
['OS == "mac"', {
|
|
'obj_dir%': '<(PRODUCT_DIR)/obj.target',
|
|
'v8_base': '<(PRODUCT_DIR)/libv8_base.a',
|
|
}],
|
|
['build_v8_with_gn == "true"', {
|
|
'conditions': [
|
|
['GENERATOR == "ninja"', {
|
|
'v8_base': '<(PRODUCT_DIR)/obj/deps/v8/gypfiles/v8_monolith.gen/gn/obj/libv8_monolith.a',
|
|
}, {
|
|
'v8_base': '<(PRODUCT_DIR)/obj.target/v8_monolith/geni/gn/obj/libv8_monolith.a',
|
|
}],
|
|
],
|
|
}],
|
|
['openssl_fips != ""', {
|
|
'openssl_product': '<(STATIC_LIB_PREFIX)crypto<(STATIC_LIB_SUFFIX)',
|
|
}, {
|
|
'openssl_product': '<(STATIC_LIB_PREFIX)openssl<(STATIC_LIB_SUFFIX)',
|
|
}],
|
|
['OS=="mac"', {
|
|
'clang%': 1,
|
|
}, {
|
|
'clang%': 0,
|
|
}],
|
|
],
|
|
},
|
|
|
|
'target_defaults': {
|
|
'default_configuration': 'Release',
|
|
'configurations': {
|
|
'Debug': {
|
|
'variables': {
|
|
'v8_enable_handle_zapping': 1,
|
|
},
|
|
'defines': [ 'DEBUG', '_DEBUG', 'V8_ENABLE_CHECKS' ],
|
|
'cflags': [ '-g', '-O0' ],
|
|
'conditions': [
|
|
['target_arch=="x64"', {
|
|
'msvs_configuration_platform': 'x64',
|
|
}],
|
|
['OS=="aix"', {
|
|
'variables': {'real_os_name': '<!(uname -s)',},
|
|
'cflags': [ '-gxcoff' ],
|
|
'ldflags': [ '-Wl,-bbigtoc' ],
|
|
'conditions': [
|
|
['"<(real_os_name)"=="OS400"', {
|
|
'ldflags': [
|
|
'-Wl,-blibpath:/QOpenSys/pkgs/lib:/QOpenSys/usr/lib',
|
|
'-Wl,-brtl',
|
|
],
|
|
}],
|
|
],
|
|
}],
|
|
['OS == "android"', {
|
|
'cflags': [ '-fPIE' ],
|
|
'ldflags': [ '-fPIE', '-pie' ]
|
|
}],
|
|
['node_shared=="true"', {
|
|
'msvs_settings': {
|
|
'VCCLCompilerTool': {
|
|
'RuntimeLibrary': 3, # MultiThreadedDebugDLL (/MDd)
|
|
}
|
|
}
|
|
}],
|
|
['node_shared=="false"', {
|
|
'msvs_settings': {
|
|
'VCCLCompilerTool': {
|
|
'RuntimeLibrary': 1 # MultiThreadedDebug (/MTd)
|
|
}
|
|
}
|
|
}]
|
|
],
|
|
'msvs_settings': {
|
|
'VCCLCompilerTool': {
|
|
'Optimization': 0, # /Od, no optimization
|
|
'MinimalRebuild': 'false',
|
|
'OmitFramePointers': 'false',
|
|
'BasicRuntimeChecks': 3, # /RTC1
|
|
'AdditionalOptions': [
|
|
'/bigobj', # prevent error C1128 in VS2015
|
|
'/MP', # compile across multiple CPUs
|
|
],
|
|
},
|
|
'VCLinkerTool': {
|
|
'LinkIncremental': 2, # enable incremental linking
|
|
},
|
|
},
|
|
'xcode_settings': {
|
|
'GCC_OPTIMIZATION_LEVEL': '0', # stop gyp from defaulting to -Os
|
|
},
|
|
},
|
|
'Release': {
|
|
'variables': {
|
|
'v8_enable_handle_zapping': 0,
|
|
},
|
|
'cflags': [ '-O3' ],
|
|
'conditions': [
|
|
['target_arch=="x64"', {
|
|
'msvs_configuration_platform': 'x64',
|
|
}],
|
|
['OS=="solaris"', {
|
|
# pull in V8's postmortem metadata
|
|
'ldflags': [ '-Wl,-z,allextract' ]
|
|
}],
|
|
['OS!="mac" and OS!="win"', {
|
|
'cflags': [ '-fno-omit-frame-pointer' ],
|
|
}],
|
|
['OS=="linux"', {
|
|
'variables': {
|
|
'lto': ' -flto=4 -fuse-linker-plugin -ffat-lto-objects ',
|
|
},
|
|
'conditions': [
|
|
['enable_lto=="true"', {
|
|
'cflags': ['<(lto)'],
|
|
'ldflags': ['<(lto)'],
|
|
},],
|
|
],
|
|
},],
|
|
['OS == "android"', {
|
|
'cflags': [ '-fPIE' ],
|
|
'ldflags': [ '-fPIE', '-pie' ]
|
|
}],
|
|
['node_shared=="true"', {
|
|
'msvs_settings': {
|
|
'VCCLCompilerTool': {
|
|
'RuntimeLibrary': 2 # MultiThreadedDLL (/MD)
|
|
}
|
|
}
|
|
}],
|
|
['node_shared=="false"', {
|
|
'msvs_settings': {
|
|
'VCCLCompilerTool': {
|
|
'RuntimeLibrary': 0 # MultiThreaded (/MT)
|
|
}
|
|
}
|
|
}],
|
|
['node_with_ltcg=="true"', {
|
|
'msvs_settings': {
|
|
'VCCLCompilerTool': {
|
|
'WholeProgramOptimization': 'true' # /GL, whole program optimization, needed for LTCG
|
|
},
|
|
'VCLibrarianTool': {
|
|
'AdditionalOptions': [
|
|
'/LTCG:INCREMENTAL', # link time code generation
|
|
]
|
|
},
|
|
'VCLinkerTool': {
|
|
'OptimizeReferences': 2, # /OPT:REF
|
|
'EnableCOMDATFolding': 2, # /OPT:ICF
|
|
'LinkIncremental': 1, # disable incremental linking
|
|
'AdditionalOptions': [
|
|
'/LTCG:INCREMENTAL', # incremental link-time code generation
|
|
]
|
|
}
|
|
}
|
|
}, {
|
|
'msvs_settings': {
|
|
'VCCLCompilerTool': {
|
|
'WholeProgramOptimization': 'false'
|
|
},
|
|
'VCLinkerTool': {
|
|
'LinkIncremental': 2 # enable incremental linking
|
|
}
|
|
}
|
|
}]
|
|
],
|
|
'msvs_settings': {
|
|
'VCCLCompilerTool': {
|
|
'Optimization': 3, # /Ox, full optimization
|
|
'FavorSizeOrSpeed': 1, # /Ot, favor speed over size
|
|
'InlineFunctionExpansion': 2, # /Ob2, inline anything eligible
|
|
'OmitFramePointers': 'true',
|
|
'EnableFunctionLevelLinking': 'true',
|
|
'EnableIntrinsicFunctions': 'true',
|
|
'RuntimeTypeInfo': 'false',
|
|
'AdditionalOptions': [
|
|
'/MP', # compile across multiple CPUs
|
|
],
|
|
}
|
|
}
|
|
}
|
|
},
|
|
# Forcibly disable -Werror. We support a wide range of compilers, it's
|
|
# simply not feasible to squelch all warnings, never mind that the
|
|
# libraries in deps/ are not under our control.
|
|
'cflags!': ['-Werror'],
|
|
'msvs_settings': {
|
|
'VCCLCompilerTool': {
|
|
'StringPooling': 'true', # pool string literals
|
|
'DebugInformationFormat': 3, # Generate a PDB
|
|
'WarningLevel': 3,
|
|
'BufferSecurityCheck': 'true',
|
|
'ExceptionHandling': 0, # /EHsc
|
|
'SuppressStartupBanner': 'true',
|
|
# Disable warnings:
|
|
# - "C4251: class needs to have dll-interface"
|
|
# - "C4275: non-DLL-interface used as base for DLL-interface"
|
|
# Over 10k of these warnings are generated when compiling node,
|
|
# originating from v8.h. Most of them are false positives.
|
|
# See also: https://github.com/nodejs/node/pull/15570
|
|
# TODO: re-enable when Visual Studio fixes these upstream.
|
|
#
|
|
# - "C4267: conversion from 'size_t' to 'int'"
|
|
# Many any originate from our dependencies, and their sheer number
|
|
# drowns out other, more legitimate warnings.
|
|
'DisableSpecificWarnings': ['4251', '4275', '4267'],
|
|
'WarnAsError': 'false',
|
|
},
|
|
'VCLinkerTool': {
|
|
'conditions': [
|
|
['target_arch=="ia32"', {
|
|
'TargetMachine' : 1, # /MACHINE:X86
|
|
'target_conditions': [
|
|
['_type=="executable"', {
|
|
'AdditionalOptions': [ '/SubSystem:Console,"5.01"' ],
|
|
}],
|
|
],
|
|
}],
|
|
['target_arch=="x64"', {
|
|
'TargetMachine' : 17, # /MACHINE:AMD64
|
|
'target_conditions': [
|
|
['_type=="executable"', {
|
|
'AdditionalOptions': [ '/SubSystem:Console,"5.02"' ],
|
|
}],
|
|
],
|
|
}],
|
|
],
|
|
'GenerateDebugInformation': 'true',
|
|
'GenerateMapFile': 'true', # /MAP
|
|
'MapExports': 'true', # /MAPINFO:EXPORTS
|
|
'RandomizedBaseAddress': 2, # enable ASLR
|
|
'DataExecutionPrevention': 2, # enable DEP
|
|
'AllowIsolation': 'true',
|
|
'SuppressStartupBanner': 'true',
|
|
},
|
|
},
|
|
'msvs_disabled_warnings': [4351, 4355, 4800],
|
|
'conditions': [
|
|
['asan == 1 and OS != "mac"', {
|
|
'cflags+': [
|
|
'-fno-omit-frame-pointer',
|
|
'-fsanitize=address',
|
|
'-DLEAK_SANITIZER'
|
|
],
|
|
'cflags!': [ '-fomit-frame-pointer' ],
|
|
'ldflags': [ '-fsanitize=address' ],
|
|
}],
|
|
['asan == 1 and OS == "mac"', {
|
|
'xcode_settings': {
|
|
'OTHER_CFLAGS+': [
|
|
'-fno-omit-frame-pointer',
|
|
'-gline-tables-only',
|
|
'-fsanitize=address',
|
|
'-DLEAK_SANITIZER'
|
|
],
|
|
'OTHER_CFLAGS!': [
|
|
'-fomit-frame-pointer',
|
|
],
|
|
},
|
|
'target_conditions': [
|
|
['_type!="static_library"', {
|
|
'xcode_settings': {'OTHER_LDFLAGS': ['-fsanitize=address']},
|
|
}],
|
|
],
|
|
}],
|
|
['OS == "win"', {
|
|
'msvs_cygwin_shell': 0, # prevent actions from trying to use cygwin
|
|
'defines': [
|
|
'WIN32',
|
|
# we don't really want VC++ warning us about
|
|
# how dangerous C functions are...
|
|
'_CRT_SECURE_NO_DEPRECATE',
|
|
# ... or that C implementations shouldn't use
|
|
# POSIX names
|
|
'_CRT_NONSTDC_NO_DEPRECATE',
|
|
# Make sure the STL doesn't try to use exceptions
|
|
'_HAS_EXCEPTIONS=0',
|
|
'BUILDING_V8_SHARED=1',
|
|
'BUILDING_UV_SHARED=1',
|
|
],
|
|
}],
|
|
[ 'OS in "linux freebsd openbsd solaris aix"', {
|
|
'cflags': [ '-pthread' ],
|
|
'ldflags': [ '-pthread' ],
|
|
}],
|
|
[ 'OS in "linux freebsd openbsd solaris android aix cloudabi"', {
|
|
'cflags': [ '-Wall', '-Wextra', '-Wno-unused-parameter', ],
|
|
'cflags_cc': [ '-fno-rtti', '-fno-exceptions', '-std=gnu++1y' ],
|
|
'ldflags': [ '-rdynamic' ],
|
|
'target_conditions': [
|
|
# The 1990s toolchain on SmartOS can't handle thin archives.
|
|
['_type=="static_library" and OS=="solaris"', {
|
|
'standalone_static_library': 1,
|
|
}],
|
|
['OS=="openbsd"', {
|
|
'cflags': [ '-I/usr/local/include' ],
|
|
'ldflags': [ '-Wl,-z,wxneeded' ],
|
|
}],
|
|
],
|
|
'conditions': [
|
|
[ 'target_arch=="ia32"', {
|
|
'cflags': [ '-m32' ],
|
|
'ldflags': [ '-m32' ],
|
|
}],
|
|
[ 'target_arch=="x32"', {
|
|
'cflags': [ '-mx32' ],
|
|
'ldflags': [ '-mx32' ],
|
|
}],
|
|
[ 'target_arch=="x64"', {
|
|
'cflags': [ '-m64' ],
|
|
'ldflags': [ '-m64' ],
|
|
}],
|
|
[ 'target_arch=="ppc" and OS!="aix"', {
|
|
'cflags': [ '-m32' ],
|
|
'ldflags': [ '-m32' ],
|
|
}],
|
|
[ 'target_arch=="ppc64" and OS!="aix"', {
|
|
'cflags': [ '-m64', '-mminimal-toc' ],
|
|
'ldflags': [ '-m64' ],
|
|
}],
|
|
[ 'target_arch=="s390"', {
|
|
'cflags': [ '-m31', '-march=z196' ],
|
|
'ldflags': [ '-m31', '-march=z196' ],
|
|
}],
|
|
[ 'target_arch=="s390x"', {
|
|
'cflags': [ '-m64', '-march=z196' ],
|
|
'ldflags': [ '-m64', '-march=z196' ],
|
|
}],
|
|
[ 'OS=="solaris"', {
|
|
'cflags': [ '-pthreads' ],
|
|
'ldflags': [ '-pthreads' ],
|
|
'cflags!': [ '-pthread' ],
|
|
'ldflags!': [ '-pthread' ],
|
|
}],
|
|
[ 'OS=="aix"', {
|
|
'variables': {'real_os_name': '<!(uname -s)',},
|
|
'conditions': [
|
|
[ 'target_arch=="ppc"', {
|
|
'ldflags': [ '-Wl,-bmaxdata:0x60000000/dsa' ],
|
|
}],
|
|
[ 'target_arch=="ppc64"', {
|
|
'cflags': [ '-maix64' ],
|
|
'ldflags': [ '-maix64' ],
|
|
}],
|
|
['"<(real_os_name)"=="OS400"', {
|
|
'ldflags': [
|
|
'-Wl,-blibpath:/QOpenSys/pkgs/lib:/QOpenSys/usr/lib',
|
|
'-Wl,-brtl',
|
|
],
|
|
}],
|
|
],
|
|
'ldflags': [ '-Wl,-bbigtoc' ],
|
|
'ldflags!': [ '-rdynamic' ],
|
|
}],
|
|
[ 'node_shared=="true"', {
|
|
'cflags': [ '-fPIC' ],
|
|
}],
|
|
],
|
|
}],
|
|
['OS=="android"', {
|
|
'target_conditions': [
|
|
['_toolset=="target"', {
|
|
'defines': [ '_GLIBCXX_USE_C99_MATH' ],
|
|
'libraries': [ '-llog' ],
|
|
}],
|
|
],
|
|
}],
|
|
['OS=="mac"', {
|
|
'defines': ['_DARWIN_USE_64_BIT_INODE=1'],
|
|
'xcode_settings': {
|
|
'ALWAYS_SEARCH_USER_PATHS': 'NO',
|
|
'GCC_CW_ASM_SYNTAX': 'NO', # No -fasm-blocks
|
|
'GCC_DYNAMIC_NO_PIC': 'NO', # No -mdynamic-no-pic
|
|
# (Equivalent to -fPIC)
|
|
'GCC_ENABLE_CPP_EXCEPTIONS': 'NO', # -fno-exceptions
|
|
'GCC_ENABLE_CPP_RTTI': 'NO', # -fno-rtti
|
|
'GCC_ENABLE_PASCAL_STRINGS': 'NO', # No -mpascal-strings
|
|
'GCC_THREADSAFE_STATICS': 'NO', # -fno-threadsafe-statics
|
|
'PREBINDING': 'NO', # No -Wl,-prebind
|
|
'MACOSX_DEPLOYMENT_TARGET': '10.7', # -mmacosx-version-min=10.7
|
|
'USE_HEADERMAP': 'NO',
|
|
'OTHER_CFLAGS': [
|
|
'-fno-strict-aliasing',
|
|
],
|
|
'WARNING_CFLAGS': [
|
|
'-Wall',
|
|
'-Wendif-labels',
|
|
'-W',
|
|
'-Wno-unused-parameter',
|
|
],
|
|
},
|
|
'target_conditions': [
|
|
['_type!="static_library"', {
|
|
'xcode_settings': {
|
|
'OTHER_LDFLAGS': [
|
|
'-Wl,-no_pie',
|
|
'-Wl,-search_paths_first',
|
|
],
|
|
},
|
|
}],
|
|
],
|
|
'conditions': [
|
|
['target_arch=="ia32"', {
|
|
'xcode_settings': {'ARCHS': ['i386']},
|
|
}],
|
|
['target_arch=="x64"', {
|
|
'xcode_settings': {'ARCHS': ['x86_64']},
|
|
}],
|
|
['clang==1', {
|
|
'xcode_settings': {
|
|
'GCC_VERSION': 'com.apple.compilers.llvm.clang.1_0',
|
|
'CLANG_CXX_LANGUAGE_STANDARD': 'gnu++1y', # -std=gnu++1y
|
|
'CLANG_CXX_LIBRARY': 'libc++',
|
|
},
|
|
}],
|
|
],
|
|
}],
|
|
['OS=="freebsd" and node_use_dtrace=="true"', {
|
|
'libraries': [ '-lelf' ],
|
|
}],
|
|
['OS=="freebsd"', {
|
|
'conditions': [
|
|
['"0" < llvm_version < "4.0"', {
|
|
# Use this flag because on FreeBSD std::pairs copy constructor is non-trivial.
|
|
# Doesn't apply to llvm 4.0 (FreeBSD 11.1) or later.
|
|
# Refs: https://lists.freebsd.org/pipermail/freebsd-toolchain/2016-March/002094.html
|
|
# Refs: https://svnweb.freebsd.org/ports/head/www/node/Makefile?revision=444555&view=markup
|
|
'cflags': [ '-D_LIBCPP_TRIVIAL_PAIR_COPY_CTOR=1' ],
|
|
}],
|
|
],
|
|
'ldflags': [
|
|
'-Wl,--export-dynamic',
|
|
],
|
|
}]
|
|
],
|
|
}
|
|
}
|