mirror of
https://github.com/zebrajr/node.git
synced 2026-01-15 12:15:26 +00:00
build: configure node, v8, cares and openssl
This commit is contained in:
265
configure-gyp
265
configure-gyp
@@ -9,95 +9,228 @@ root_dir = os.path.dirname(__file__)
|
||||
sys.path.insert(0, os.path.join(root_dir, 'deps', 'v8', 'tools'))
|
||||
import utils # GuessArchitecture
|
||||
|
||||
# parse our options
|
||||
parser = optparse.OptionParser()
|
||||
|
||||
parser.add_option("--debug",
|
||||
action="store_true",
|
||||
dest="debug",
|
||||
help="Also build debug build")
|
||||
|
||||
parser.add_option("--prefix",
|
||||
action="store",
|
||||
dest="prefix",
|
||||
help="Select the install prefix (defaults to /usr/local)")
|
||||
|
||||
parser.add_option("--without-ssl",
|
||||
action="store_true",
|
||||
dest="without_ssl",
|
||||
help="Build without SSL")
|
||||
|
||||
parser.add_option("--without-snapshot",
|
||||
action="store_true",
|
||||
dest="without_snapshot",
|
||||
help="Build without snapshotting V8 libraries. You might want to set"
|
||||
" this for cross-compiling. [Default: False]")
|
||||
|
||||
parser.add_option("--shared-v8",
|
||||
action="store_true",
|
||||
dest="shared_v8",
|
||||
help="Link to a shared V8 DLL instead of static linking")
|
||||
|
||||
parser.add_option("--shared-v8-includes",
|
||||
action="store",
|
||||
dest="shared_v8_includes",
|
||||
help="Directory containing V8 header files")
|
||||
|
||||
parser.add_option("--shared-v8-libpath",
|
||||
action="store",
|
||||
dest="shared_v8_libpath",
|
||||
help="A directory to search for the shared V8 DLL")
|
||||
|
||||
parser.add_option("--shared-v8-libname",
|
||||
action="store",
|
||||
dest="shared_v8_libname",
|
||||
help="Alternative lib name to link to (default: 'v8')")
|
||||
|
||||
parser.add_option("--openssl-includes",
|
||||
action="store",
|
||||
dest="openssl_includes",
|
||||
help="A directory to search for the OpenSSL includes")
|
||||
|
||||
parser.add_option("--openssl-libpath",
|
||||
action="store",
|
||||
dest="openssl_libpath",
|
||||
help="A directory to search for the OpenSSL libraries")
|
||||
|
||||
parser.add_option("--no-ssl2",
|
||||
action="store_true",
|
||||
dest="no_ssl2",
|
||||
help="Disable OpenSSL v2")
|
||||
|
||||
parser.add_option("--shared-cares",
|
||||
action="store_true",
|
||||
dest="shared_cares",
|
||||
help="Link to a shared C-Ares DLL instead of static linking")
|
||||
|
||||
parser.add_option("--shared-cares-includes",
|
||||
action="store",
|
||||
dest="shared_cares_includes",
|
||||
help="Directory containing C-Ares header files")
|
||||
|
||||
parser.add_option("--shared-cares-libpath",
|
||||
action="store",
|
||||
dest="shared_cares_libpath",
|
||||
help="A directory to search for the shared C-Ares DLL")
|
||||
|
||||
parser.add_option("--with-dtrace",
|
||||
action="store_true",
|
||||
dest="with_dtrace",
|
||||
help="Build with DTrace (experimental)")
|
||||
|
||||
# CHECKME does this still work with recent releases of V8?
|
||||
parser.add_option("--gdb",
|
||||
action="store_true",
|
||||
dest="gdb",
|
||||
help="add gdb support")
|
||||
|
||||
parser.add_option("--dest-cpu",
|
||||
action="store",
|
||||
dest="dest_cpu",
|
||||
help="CPU architecture to build for. Valid values are: arm, ia32, x64")
|
||||
|
||||
(options, args) = parser.parse_args()
|
||||
|
||||
|
||||
def pkg_config(pkg):
|
||||
cmd = os.popen('pkg-config --libs %s' % pkg, 'r')
|
||||
libs = cmd.readline().strip()
|
||||
ret = cmd.close()
|
||||
if (ret): return 0
|
||||
if (ret): return None
|
||||
|
||||
cmd = os.popen('pkg-config --cflags %s' % pkg, 'r')
|
||||
cflags = cmd.readline().strip()
|
||||
ret = cmd.close()
|
||||
if (ret): return 0
|
||||
if (ret): return None
|
||||
|
||||
return (libs, cflags)
|
||||
|
||||
# parse our options
|
||||
parser = optparse.OptionParser()
|
||||
|
||||
parser.add_option("--debug", action="store_true", dest="debug",
|
||||
default=False, help="Also build debug build")
|
||||
|
||||
parser.add_option("--prefix", action="store", dest="prefix",
|
||||
help="Select the install prefix (defaults to /usr/local)")
|
||||
def uname(switch):
|
||||
f = os.popen('uname %s' % switch)
|
||||
s = f.read().strip()
|
||||
f.close()
|
||||
return s
|
||||
|
||||
|
||||
# TODO options to support for backwards compatibility
|
||||
#
|
||||
# --without-snapshot
|
||||
# Build without snapshotting V8 libraries. You might want to set this for
|
||||
# cross-compiling. [Default: False]
|
||||
#
|
||||
# --without-ssl
|
||||
# Build without SSL
|
||||
#
|
||||
# --shared-v8
|
||||
# Link to a shared V8 DLL instead of static linking
|
||||
#
|
||||
# --shared-v8-includes=SHARED_V8_INCLUDES
|
||||
# Directory containing V8 header files
|
||||
#
|
||||
# --shared-v8-libpath=SHARED_V8_LIBPATH
|
||||
# A directory to search for the shared V8 DLL
|
||||
#
|
||||
# --shared-v8-libname=SHARED_V8_LIBNAME
|
||||
# Alternative lib name to link to (default: 'v8')
|
||||
#
|
||||
# --openssl-includes=OPENSSL_INCLUDES
|
||||
# A directory to search for the OpenSSL includes
|
||||
#
|
||||
# --openssl-libpath=OPENSSL_LIBPATH
|
||||
# A directory to search for the OpenSSL libraries
|
||||
#
|
||||
# --no-ssl2
|
||||
# Disable OpenSSL v2
|
||||
#
|
||||
# --gdb
|
||||
# add gdb support
|
||||
#
|
||||
# --shared-cares
|
||||
# Link to a shared C-Ares DLL instead of static linking
|
||||
#
|
||||
# --shared-cares-includes=SHARED_CARES_INCLUDES
|
||||
# Directory containing C-Ares header files
|
||||
#
|
||||
# --shared-cares-libpath=SHARED_CARES_LIBPATH
|
||||
# A directory to search for the shared C-Ares DLL
|
||||
#
|
||||
# --with-dtrace
|
||||
# Build with DTrace (experimental)
|
||||
#
|
||||
# --dest-cpu=DEST_CPU
|
||||
# CPU architecture to build for. Valid values are: arm, ia32, x64
|
||||
def host_arch():
|
||||
"""Host architecture. One of arm, ia32 or x64."""
|
||||
arch = uname('-p')
|
||||
|
||||
if arch == 'unknown':
|
||||
arch = uname('-m')
|
||||
|
||||
return {
|
||||
'arm': 'arm',
|
||||
'x86': 'ia32',
|
||||
'i386': 'ia32',
|
||||
'x86_64': 'x64',
|
||||
}.get(arch, 'ia32')
|
||||
|
||||
|
||||
(options, args) = parser.parse_args()
|
||||
def target_arch():
|
||||
# TODO act on options.dest_cpu
|
||||
return host_arch()
|
||||
|
||||
|
||||
def configure_node(o):
|
||||
# TODO add gdb and dest_cpu
|
||||
o['variables']['node_debug'] = 'true' if options.debug else 'false'
|
||||
o['variables']['node_prefix'] = options.prefix if options.prefix else ''
|
||||
o['variables']['node_use_dtrace'] = 'true' if options.with_dtrace else 'false'
|
||||
o['variables']['host_arch'] = host_arch()
|
||||
o['variables']['target_arch'] = target_arch()
|
||||
|
||||
|
||||
def configure_libz(o):
|
||||
o['libraries'] += ['-lz']
|
||||
|
||||
|
||||
def configure_v8(o):
|
||||
o['variables']['v8_use_snapshot'] = 'true' if not options.without_snapshot else 'false'
|
||||
o['variables']['node_shared_v8'] = 'true' if options.shared_v8 else 'false'
|
||||
|
||||
# assume shared_v8 if one of these is set?
|
||||
if options.shared_v8_libpath:
|
||||
o['libraries'] += ['-L%s' % options.shared_v8_libpath]
|
||||
if options.shared_v8_libname:
|
||||
o['libraries'] += ['-l%s' % options.shared_v8_libname]
|
||||
if options.shared_v8_includes:
|
||||
o['include_dirs'] += [options.shared_v8_includes]
|
||||
|
||||
|
||||
def configure_cares(o):
|
||||
o['variables']['node_shared_cares'] = 'true' if options.shared_cares else 'false'
|
||||
|
||||
# assume shared_cares if one of these is set?
|
||||
if options.shared_cares_libpath:
|
||||
o['libraries'] += ['-L%s' % options.shared_cares_libpath]
|
||||
if options.shared_cares_includes:
|
||||
o['include_dirs'] += [options.shared_cares_includes]
|
||||
|
||||
|
||||
def configure_openssl(o):
|
||||
o['variables']['node_use_openssl'] = 'false' if options.without_ssl else 'true'
|
||||
|
||||
if options.without_ssl:
|
||||
return
|
||||
|
||||
if options.no_ssl2:
|
||||
o['defines'] += ['OPENSSL_NO_SSL2=1']
|
||||
|
||||
out = pkg_config('openssl')
|
||||
(libs, cflags) = out if out else ('', '')
|
||||
|
||||
if options.openssl_libpath:
|
||||
o['libraries'] += ['-L%s' % options.openssl_libpath, '-lssl', '-lcrypto']
|
||||
else:
|
||||
o['libraries'] += libs.split()
|
||||
|
||||
if options.openssl_includes:
|
||||
o['include_dirs'] += [options.openssl_includes]
|
||||
else:
|
||||
o['cflags'] += cflags.split()
|
||||
|
||||
if libs or cflags or options.openssl_libpath or options.openssl_includes:
|
||||
o['variables']['node_use_system_openssl'] = 'true'
|
||||
else:
|
||||
o['variables']['node_use_system_openssl'] = 'false'
|
||||
|
||||
|
||||
print "configure options:", options
|
||||
|
||||
output = {
|
||||
'variables': {
|
||||
'node_debug': 'true' if options.debug else 'false',
|
||||
'node_prefix': options.prefix if options.prefix else ''
|
||||
}
|
||||
'variables': {},
|
||||
'include_dirs': [],
|
||||
'libraries': [],
|
||||
'defines': [],
|
||||
'cflags': [],
|
||||
}
|
||||
|
||||
out = pkg_config('openssl')
|
||||
if out:
|
||||
output['variables']['node_use_openssl'] = 'true'
|
||||
output['variables']['openssl_libs'] = '-lssl -lcrypto -lz' #out[0]
|
||||
output['variables']['openssl_cflags'] = out[1]
|
||||
configure_node(output)
|
||||
configure_libz(output)
|
||||
configure_v8(output)
|
||||
configure_cares(output)
|
||||
configure_openssl(output)
|
||||
|
||||
# variables should be a root level element,
|
||||
# move everything else to target_defaults
|
||||
variables = output['variables']
|
||||
del output['variables']
|
||||
output = {
|
||||
'variables': variables,
|
||||
'target_defaults': output
|
||||
}
|
||||
|
||||
fn = os.path.join(root_dir, 'options.gypi')
|
||||
print "creating ", fn
|
||||
|
||||
9
node.gyp
9
node.gyp
@@ -51,6 +51,10 @@
|
||||
],
|
||||
},
|
||||
|
||||
'includes': [
|
||||
'./options.gypi'
|
||||
],
|
||||
|
||||
'targets': [
|
||||
{
|
||||
'target_name': 'node',
|
||||
@@ -136,7 +140,10 @@
|
||||
[ 'node_use_openssl=="true"', {
|
||||
'defines': [ 'HAVE_OPENSSL=1' ],
|
||||
'sources': [ 'src/node_crypto.cc' ],
|
||||
'dependencies': [ './deps/openssl/openssl.gyp:openssl' ]
|
||||
'conditions': [
|
||||
[ 'node_use_system_openssl=="false"', {
|
||||
'dependencies': [ './deps/openssl/openssl.gyp:openssl' ],
|
||||
}]]
|
||||
}, {
|
||||
'defines': [ 'HAVE_OPENSSL=0' ]
|
||||
}],
|
||||
|
||||
Reference in New Issue
Block a user