Skip to content

Commit

Permalink
build: support building io.js as a static library
Browse files Browse the repository at this point in the history
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: #686
PR-URL: #1341
Reviewed-By: Ben Noordhuis <[email protected]>
  • Loading branch information
hoho authored and bnoordhuis committed Apr 11, 2015
1 parent 93a1a07 commit cd38a4a
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 14 deletions.
8 changes: 8 additions & 0 deletions configure
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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)
Expand Down
47 changes: 33 additions & 14 deletions node.gyp
Original file line number Diff line number Diff line change
Expand Up @@ -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',
Expand Down Expand Up @@ -76,7 +77,7 @@
'targets': [
{
'target_name': 'iojs',
'type': 'executable',
'type': '<(node_target_type)',

'dependencies': [
'node_js2c#host',
Expand Down Expand Up @@ -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': [
Expand Down Expand Up @@ -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',
],
}],
],
}],
],
Expand Down Expand Up @@ -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' ],
Expand Down

0 comments on commit cd38a4a

Please sign in to comment.