mirror of
https://github.com/nodejs/node.git
synced 2024-11-21 10:59:27 +00:00
build: support building io.js as a static library
One static library could not be bundled into another, that's why it's necessary to skip `-force_load` and `--whole-archive` linker options to build io.js itself as a static library. `node_target_type` variable has been added to node.gyp, along with `--enable-static` option in configure script. Fixes: https://github.com/iojs/io.js/issues/686 PR-URL: https://github.com/iojs/io.js/pull/1341 Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
This commit is contained in:
parent
93a1a07ef4
commit
cd38a4af8f
8
configure
vendored
8
configure
vendored
@ -295,6 +295,11 @@ parser.add_option('--xcode',
|
||||
dest='use_xcode',
|
||||
help='generate build files for use with xcode')
|
||||
|
||||
parser.add_option('--enable-static',
|
||||
action='store_true',
|
||||
dest='enable_static',
|
||||
help='build as static library')
|
||||
|
||||
(options, args) = parser.parse_args()
|
||||
|
||||
# set up auto-download list
|
||||
@ -589,6 +594,9 @@ def configure_node(o):
|
||||
if options.v8_options:
|
||||
o['variables']['node_v8_options'] = options.v8_options.replace('"', '\\"')
|
||||
|
||||
if options.enable_static:
|
||||
o['variables']['node_target_type'] = 'static_library'
|
||||
|
||||
|
||||
def configure_libz(o):
|
||||
o['variables']['node_shared_zlib'] = b(options.shared_zlib)
|
||||
|
47
node.gyp
47
node.gyp
@ -12,6 +12,7 @@
|
||||
'node_use_openssl%': 'true',
|
||||
'node_shared_openssl%': 'false',
|
||||
'node_v8_options%': '',
|
||||
'node_target_type%': 'executable',
|
||||
'library_files': [
|
||||
'src/node.js',
|
||||
'lib/_debug_agent.js',
|
||||
@ -76,7 +77,7 @@
|
||||
'targets': [
|
||||
{
|
||||
'target_name': 'iojs',
|
||||
'type': 'executable',
|
||||
'type': '<(node_target_type)',
|
||||
|
||||
'dependencies': [
|
||||
'node_js2c#host',
|
||||
@ -183,6 +184,12 @@
|
||||
],
|
||||
|
||||
'conditions': [
|
||||
# No node_main.cc for anything except executable
|
||||
[ 'node_target_type!="executable"', {
|
||||
'sources!': [
|
||||
'src/node_main.cc',
|
||||
],
|
||||
}],
|
||||
[ 'v8_enable_i18n_support==1', {
|
||||
'defines': [ 'NODE_HAVE_I18N_SUPPORT=1' ],
|
||||
'dependencies': [
|
||||
@ -215,15 +222,22 @@
|
||||
'./deps/openssl/openssl.gyp:openssl-cli',
|
||||
],
|
||||
# Do not let unused OpenSSL symbols to slip away
|
||||
'xcode_settings': {
|
||||
'OTHER_LDFLAGS': [
|
||||
'-Wl,-force_load,<(PRODUCT_DIR)/libopenssl.a',
|
||||
],
|
||||
},
|
||||
'conditions': [
|
||||
['OS in "linux freebsd"', {
|
||||
'ldflags': [
|
||||
'-Wl,--whole-archive <(PRODUCT_DIR)/libopenssl.a -Wl,--no-whole-archive',
|
||||
# -force_load or --whole-archive are not applicable for
|
||||
# the static library
|
||||
[ 'node_target_type!="static_library"', {
|
||||
'xcode_settings': {
|
||||
'OTHER_LDFLAGS': [
|
||||
'-Wl,-force_load,<(PRODUCT_DIR)/libopenssl.a',
|
||||
],
|
||||
},
|
||||
'conditions': [
|
||||
['OS in "linux freebsd"', {
|
||||
'ldflags': [
|
||||
'-Wl,--whole-archive <(PRODUCT_DIR)/libopenssl.a',
|
||||
'-Wl,--no-whole-archive',
|
||||
],
|
||||
}],
|
||||
],
|
||||
}],
|
||||
],
|
||||
@ -304,11 +318,16 @@
|
||||
} ],
|
||||
[ 'v8_postmortem_support=="true"', {
|
||||
'dependencies': [ 'deps/v8/tools/gyp/v8.gyp:postmortem-metadata' ],
|
||||
'xcode_settings': {
|
||||
'OTHER_LDFLAGS': [
|
||||
'-Wl,-force_load,<(V8_BASE)',
|
||||
],
|
||||
},
|
||||
'conditions': [
|
||||
# -force_load is not applicable for the static library
|
||||
[ 'node_target_type!="static_library"', {
|
||||
'xcode_settings': {
|
||||
'OTHER_LDFLAGS': [
|
||||
'-Wl,-force_load,<(V8_BASE)',
|
||||
],
|
||||
},
|
||||
}],
|
||||
],
|
||||
}],
|
||||
[ 'node_shared_zlib=="false"', {
|
||||
'dependencies': [ 'deps/zlib/zlib.gyp:zlib' ],
|
||||
|
Loading…
Reference in New Issue
Block a user