mirror of
https://github.com/nodejs/node.git
synced 2024-11-30 23:43:09 +01:00
f878f9414e
Refine the static and shared lib build process in order to integrate static and shared lib verfication into CI. When building both static and shared lib, we still build node executable now and it uses the shared and static lib. Signed-off-by: Yihong Wang <yh.wang@ibm.com> Fixes: https://github.com/nodejs/node/issues/14158 PR-URL: https://github.com/nodejs/node/pull/17604 Reviewed-By: Bartosz Sosnowski <bartosz@janeasystems.com> Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: Daniel Bevenius <daniel.bevenius@gmail.com>
271 lines
7.7 KiB
Python
271 lines
7.7 KiB
Python
{
|
|
# 'force_load' means to include the static libs into the shared lib or
|
|
# executable. Therefore, it is enabled when building:
|
|
# 1. The executable and it uses static lib (cctest and node)
|
|
# 2. The shared lib
|
|
# Linker optimizes out functions that are not used. When force_load=true,
|
|
# --whole-archive,force_load and /WHOLEARCHIVE are used to include
|
|
# all obj files in static libs into the executable or shared lib.
|
|
'variables': {
|
|
'variables': {
|
|
'variables': {
|
|
'force_load%': 'true',
|
|
'current_type%': '<(_type)',
|
|
},
|
|
'force_load%': '<(force_load)',
|
|
'conditions': [
|
|
['current_type=="static_library"', {
|
|
'force_load': 'false',
|
|
}],
|
|
[ 'current_type=="executable" and node_target_type=="shared_library"', {
|
|
'force_load': 'false',
|
|
}]
|
|
],
|
|
},
|
|
'force_load%': '<(force_load)',
|
|
},
|
|
'conditions': [
|
|
[ 'node_shared=="false"', {
|
|
'msvs_settings': {
|
|
'VCManifestTool': {
|
|
'EmbedManifest': 'true',
|
|
'AdditionalManifestFiles': 'src/res/node.exe.extra.manifest'
|
|
}
|
|
},
|
|
}, {
|
|
'defines': [
|
|
'NODE_SHARED_MODE',
|
|
],
|
|
}],
|
|
[ 'node_enable_d8=="true"', {
|
|
'dependencies': [ 'deps/v8/src/d8.gyp:d8' ],
|
|
}],
|
|
[ 'node_use_bundled_v8=="true"', {
|
|
'dependencies': [
|
|
'deps/v8/src/v8.gyp:v8',
|
|
'deps/v8/src/v8.gyp:v8_libplatform'
|
|
],
|
|
}],
|
|
[ 'node_use_v8_platform=="true"', {
|
|
'defines': [
|
|
'NODE_USE_V8_PLATFORM=1',
|
|
],
|
|
}, {
|
|
'defines': [
|
|
'NODE_USE_V8_PLATFORM=0',
|
|
],
|
|
}],
|
|
[ 'node_tag!=""', {
|
|
'defines': [ 'NODE_TAG="<(node_tag)"' ],
|
|
}],
|
|
[ 'node_v8_options!=""', {
|
|
'defines': [ 'NODE_V8_OPTIONS="<(node_v8_options)"'],
|
|
}],
|
|
[ 'node_release_urlbase!=""', {
|
|
'defines': [
|
|
'NODE_RELEASE_URLBASE="<(node_release_urlbase)"',
|
|
]
|
|
}],
|
|
[
|
|
'debug_http2==1', {
|
|
'defines': [ 'NODE_DEBUG_HTTP2=1' ]
|
|
}],
|
|
[ 'v8_enable_i18n_support==1', {
|
|
'defines': [ 'NODE_HAVE_I18N_SUPPORT=1' ],
|
|
'dependencies': [
|
|
'<(icu_gyp_path):icui18n',
|
|
'<(icu_gyp_path):icuuc',
|
|
],
|
|
'conditions': [
|
|
[ 'icu_small=="true"', {
|
|
'defines': [ 'NODE_HAVE_SMALL_ICU=1' ],
|
|
}]],
|
|
}],
|
|
[ 'node_use_bundled_v8=="true" and \
|
|
node_enable_v8_vtunejit=="true" and (target_arch=="x64" or \
|
|
target_arch=="ia32" or target_arch=="x32")', {
|
|
'defines': [ 'NODE_ENABLE_VTUNE_PROFILING' ],
|
|
'dependencies': [
|
|
'deps/v8/src/third_party/vtune/v8vtune.gyp:v8_vtune'
|
|
],
|
|
}],
|
|
[ 'node_no_browser_globals=="true"', {
|
|
'defines': [ 'NODE_NO_BROWSER_GLOBALS' ],
|
|
} ],
|
|
[ 'node_use_bundled_v8=="true" and v8_postmortem_support=="true"', {
|
|
'dependencies': [ 'deps/v8/src/v8.gyp:postmortem-metadata' ],
|
|
'conditions': [
|
|
# -force_load is not applicable for the static library
|
|
[ 'force_load=="true"', {
|
|
'xcode_settings': {
|
|
'OTHER_LDFLAGS': [
|
|
'-Wl,-force_load,<(V8_BASE)',
|
|
],
|
|
},
|
|
}],
|
|
],
|
|
}],
|
|
[ 'node_shared_zlib=="false"', {
|
|
'dependencies': [ 'deps/zlib/zlib.gyp:zlib' ],
|
|
}],
|
|
|
|
[ 'node_shared_http_parser=="false"', {
|
|
'dependencies': [ 'deps/http_parser/http_parser.gyp:http_parser' ],
|
|
}],
|
|
|
|
[ 'node_shared_cares=="false"', {
|
|
'dependencies': [ 'deps/cares/cares.gyp:cares' ],
|
|
}],
|
|
|
|
[ 'node_shared_libuv=="false"', {
|
|
'dependencies': [ 'deps/uv/uv.gyp:libuv' ],
|
|
}],
|
|
|
|
[ 'node_shared_nghttp2=="false"', {
|
|
'dependencies': [ 'deps/nghttp2/nghttp2.gyp:nghttp2' ],
|
|
}],
|
|
|
|
[ 'OS=="mac"', {
|
|
# linking Corefoundation is needed since certain OSX debugging tools
|
|
# like Instruments require it for some features
|
|
'libraries': [ '-framework CoreFoundation' ],
|
|
'defines!': [
|
|
'NODE_PLATFORM="mac"',
|
|
],
|
|
'defines': [
|
|
# we need to use node's preferred "darwin" rather than gyp's preferred "mac"
|
|
'NODE_PLATFORM="darwin"',
|
|
],
|
|
}],
|
|
[ 'OS=="freebsd"', {
|
|
'libraries': [
|
|
'-lutil',
|
|
'-lkvm',
|
|
],
|
|
}],
|
|
[ 'OS=="aix"', {
|
|
'defines': [
|
|
'_LINUX_SOURCE_COMPAT',
|
|
],
|
|
'conditions': [
|
|
[ 'force_load=="true"', {
|
|
|
|
'actions': [
|
|
{
|
|
'action_name': 'expfile',
|
|
'inputs': [
|
|
'<(OBJ_DIR)'
|
|
],
|
|
'outputs': [
|
|
'<(PRODUCT_DIR)/node.exp'
|
|
],
|
|
'action': [
|
|
'sh', 'tools/create_expfile.sh',
|
|
'<@(_inputs)', '<@(_outputs)'
|
|
],
|
|
}
|
|
],
|
|
'ldflags': ['-Wl,-bE:<(PRODUCT_DIR)/node.exp', '-Wl,-brtl'],
|
|
}],
|
|
],
|
|
}],
|
|
[ 'OS=="solaris"', {
|
|
'libraries': [
|
|
'-lkstat',
|
|
'-lumem',
|
|
],
|
|
'defines!': [
|
|
'NODE_PLATFORM="solaris"',
|
|
],
|
|
'defines': [
|
|
# we need to use node's preferred "sunos"
|
|
# rather than gyp's preferred "solaris"
|
|
'NODE_PLATFORM="sunos"',
|
|
],
|
|
}],
|
|
[ '(OS=="freebsd" or OS=="linux") and node_shared=="false"'
|
|
' and coverage=="false" and force_load=="true"', {
|
|
'ldflags': [ '-Wl,-z,noexecstack',
|
|
'-Wl,--whole-archive <(V8_BASE)',
|
|
'-Wl,--no-whole-archive' ]
|
|
}],
|
|
[ '(OS=="freebsd" or OS=="linux") and node_shared=="false"'
|
|
' and coverage=="true" and force_load=="true"', {
|
|
'ldflags': [ '-Wl,-z,noexecstack',
|
|
'-Wl,--whole-archive <(V8_BASE)',
|
|
'-Wl,--no-whole-archive',
|
|
'--coverage',
|
|
'-g',
|
|
'-O0' ],
|
|
'cflags': [ '--coverage',
|
|
'-g',
|
|
'-O0' ],
|
|
'cflags!': [ '-O3' ]
|
|
}],
|
|
[ 'OS=="mac" and node_shared=="false" and coverage=="true"', {
|
|
'xcode_settings': {
|
|
'OTHER_LDFLAGS': [
|
|
'--coverage',
|
|
],
|
|
'OTHER_CFLAGS+': [
|
|
'--coverage',
|
|
'-g',
|
|
'-O0'
|
|
],
|
|
}
|
|
}],
|
|
[ 'OS=="sunos"', {
|
|
'ldflags': [ '-Wl,-M,/usr/lib/ld/map.noexstk' ],
|
|
}],
|
|
|
|
[ 'node_use_openssl=="true"', {
|
|
'defines': [ 'HAVE_OPENSSL=1' ],
|
|
'conditions': [
|
|
['openssl_fips != ""', {
|
|
'defines': [ 'NODE_FIPS_MODE' ],
|
|
}],
|
|
[ 'node_shared_openssl=="false"', {
|
|
'dependencies': [
|
|
'./deps/openssl/openssl.gyp:openssl',
|
|
|
|
# For tests
|
|
'./deps/openssl/openssl.gyp:openssl-cli',
|
|
],
|
|
'conditions': [
|
|
# -force_load or --whole-archive are not applicable for
|
|
# the static library
|
|
[ 'force_load=="true"', {
|
|
'xcode_settings': {
|
|
'OTHER_LDFLAGS': [
|
|
'-Wl,-force_load,<(PRODUCT_DIR)/<(OPENSSL_PRODUCT)',
|
|
],
|
|
},
|
|
'conditions': [
|
|
['OS in "linux freebsd" and node_shared=="false"', {
|
|
'ldflags': [
|
|
'-Wl,--whole-archive,'
|
|
'<(OBJ_DIR)/deps/openssl/'
|
|
'<(OPENSSL_PRODUCT)',
|
|
'-Wl,--no-whole-archive',
|
|
],
|
|
}],
|
|
# openssl.def is based on zlib.def, zlib symbols
|
|
# are always exported.
|
|
['use_openssl_def==1', {
|
|
'sources': ['<(SHARED_INTERMEDIATE_DIR)/openssl.def'],
|
|
}],
|
|
['OS=="win" and use_openssl_def==0', {
|
|
'sources': ['deps/zlib/win32/zlib.def'],
|
|
}],
|
|
],
|
|
}],
|
|
],
|
|
}]]
|
|
|
|
}, {
|
|
'defines': [ 'HAVE_OPENSSL=0' ]
|
|
}],
|
|
|
|
],
|
|
}
|