Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nodejs/node.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRasmus Andersson <rasmus@notion.se>2010-10-24 18:15:05 +0400
committerRyan Dahl <ry@tinyclouds.org>2010-11-14 01:29:59 +0300
commite5a0fbe500fa3b5f3e0c15f8d17a5d8026fac919 (patch)
treead6815929fb38a1753b84dcc3ec8394c88778948 /wscript
parentde6e88c4282d40bfc24093411d4c2857a1014d61 (diff)
Added support for cross compilation and also fixed DEST_CPU to represent the canonical symbols dictated by v8
Diffstat (limited to 'wscript')
-rw-r--r--wscript81
1 files changed, 68 insertions, 13 deletions
diff --git a/wscript b/wscript
index d87ad89b94f..28addfb9b73 100644
--- a/wscript
+++ b/wscript
@@ -13,13 +13,21 @@ import js2c
srcdir = '.'
blddir = 'build'
-
+supported_archs = ('arm', 'ia32', 'x64') # 'mips' supported by v8, but not node
jobs=1
if os.environ.has_key('JOBS'):
jobs = int(os.environ['JOBS'])
+def canonical_cpu_type(arch):
+ m = {'i386':'ia32', 'x86_64':'x64', 'amd64':'x64'}
+ if arch in m: arch = m[arch]
+ if not arch in supported_archs:
+ raise Exception("supported architectures are "+', '.join(supported_archs)+\
+ " but NOT '" + arch + "'.")
+ return arch
+
def set_options(opt):
# the gcc module provides a --debug-level option
opt.tool_options('compiler_cxx')
@@ -126,6 +134,23 @@ def set_options(opt):
)
+ opt.add_option( '--product-type'
+ , action='store'
+ , default='program'
+ , help='What kind of product to produce (program, cstaticlib '\
+ 'or cshlib) [default: %default]'
+ , dest='product_type'
+ )
+
+ opt.add_option( '--dest-cpu'
+ , action='store'
+ , default=None
+ , help='CPU architecture to build for. Valid values are: '+\
+ ', '.join(supported_archs)
+ , dest='dest_cpu'
+ )
+
+
def configure(conf):
@@ -189,6 +214,14 @@ def configure(conf):
else:
Options.options.use_openssl = conf.env["USE_OPENSSL"] = False
+ # normalize DEST_CPU from --dest-cpu, DEST_CPU or built-in value
+ if Options.options.dest_cpu and Options.options.dest_cpu:
+ conf.env['DEST_CPU'] = canonical_cpu_type(Options.options.dest_cpu)
+ elif 'DEST_CPU' in os.environ and os.environ['DEST_CPU']:
+ conf.env['DEST_CPU'] = canonical_cpu_type(os.environ['DEST_CPU'])
+ elif 'DEST_CPU' in conf.env and conf.env['DEST_CPU']:
+ conf.env['DEST_CPU'] = canonical_cpu_type(conf.env['DEST_CPU'])
+
conf.check(lib='rt', uselib_store='RT')
if sys.platform.startswith("sunos"):
@@ -265,6 +298,27 @@ def configure(conf):
if sys.platform.startswith("darwin"):
# used by platform_darwin_*.cc
conf.env.append_value('LINKFLAGS', ['-framework','Carbon'])
+ # cross compile for architecture specified by DEST_CPU
+ if 'DEST_CPU' in conf.env:
+ arch = conf.env['DEST_CPU']
+ # map supported_archs to GCC names:
+ arch_mappings = {'ia32': 'i386', 'x64': 'x86_64'}
+ if arch in arch_mappings:
+ arch = arch_mappings[arch]
+ flags = ['-arch', arch]
+ conf.env.append_value('CCFLAGS', flags)
+ conf.env.append_value('CXXFLAGS', flags)
+ conf.env.append_value('LINKFLAGS', flags)
+ if 'DEST_CPU' in conf.env:
+ arch = conf.env['DEST_CPU']
+ # TODO: -m32 is only available on 64 bit machines, so check host type
+ flags = None
+ if arch == 'ia32':
+ flags = '-m32'
+ if flags:
+ conf.env.append_value('CCFLAGS', flags)
+ conf.env.append_value('CXXFLAGS', flags)
+ conf.env.append_value('LINKFLAGS', flags)
# Needed for getaddrinfo in libeio
conf.env.append_value("CPPFLAGS", "-DX_STACKSIZE=%d" % (1024*64))
@@ -325,15 +379,10 @@ def v8_cmd(bld, variant):
# executable is statically linked together...
# XXX Change this when v8 defaults x86_64 to native builds
+ # Possible values are (arm, ia32, x64, mips).
arch = ""
- if bld.env['DEST_CPU'] == 'x86':
- arch = ""
- elif bld.env['DEST_CPU'] == 'x86_64':
- arch = "arch=x64"
- elif bld.env['DEST_CPU'] == 'arm':
- arch = "arch=arm"
- else:
- raise Exception("supported architectures are 'x86', 'x86_64', and 'arm', but NOT '" + bld.env['DEST_CPU'] + "'.")
+ if bld.env['DEST_CPU']:
+ arch = "arch="+bld.env['DEST_CPU']
if variant == "default":
mode = "release"
@@ -397,10 +446,13 @@ def build(bld):
Build.BuildContext.exec_command = exec_command
Options.options.jobs=jobs
+ product_type = Options.options.product_type
+ product_type_is_lib = product_type != 'program'
print "DEST_OS: " + bld.env['DEST_OS']
print "DEST_CPU: " + bld.env['DEST_CPU']
print "Parallel Jobs: " + str(Options.options.jobs)
+ print "Product type: " + product_type
bld.add_subdirs('deps/libeio')
@@ -471,16 +523,17 @@ def build(bld):
native_cc.rule = javascript_in_c
### node lib
- node = bld.new_task_gen("cxx", "program")
+ node = bld.new_task_gen("cxx", product_type)
node.name = "node"
node.target = "node"
node.uselib = 'RT EV OPENSSL CARES EXECINFO DL KVM SOCKET NSL'
node.add_objects = 'eio http_parser'
- node.install_path = '${PREFIX}/lib'
- node.install_path = '${PREFIX}/bin'
+ if product_type_is_lib:
+ node.install_path = '${PREFIX}/lib'
+ else:
+ node.install_path = '${PREFIX}/bin'
node.chmod = 0755
node.source = """
- src/node_main.cc
src/node.cc
src/node_buffer.cc
src/node_javascript.cc
@@ -499,6 +552,8 @@ def build(bld):
src/node_timer.cc
src/node_script.cc
"""
+ if not product_type_is_lib:
+ node.source = 'src/node_main.cc '+node.source
platform_file = "src/platform_%s.cc" % bld.env['DEST_OS']
if os.path.exists(join(cwd, platform_file)):