summaryrefslogtreecommitdiffstats
path: root/SConstruct
diff options
context:
space:
mode:
authorSteve Block <steveblock@google.com>2010-05-10 14:33:55 +0100
committerSteve Block <steveblock@google.com>2010-05-10 15:08:22 +0100
commit6ded16be15dd865a9b21ea304d5273c8be299c87 (patch)
treeb3661ae5d929e233f7024223f3fad0f2a284cd6e /SConstruct
parent6599b9dd3411791c9d89ab7efbfb4131e5664c48 (diff)
downloadandroid_external_v8-6ded16be15dd865a9b21ea304d5273c8be299c87.tar.gz
android_external_v8-6ded16be15dd865a9b21ea304d5273c8be299c87.tar.bz2
android_external_v8-6ded16be15dd865a9b21ea304d5273c8be299c87.zip
Update V8 to r4588
We're using WebKit r58033, as used by http://src.chromium.org/svn/releases/5.0.387.0/DEPS This requires http://v8.googlecode.com/svn/trunk@4465 but this version has a crashing bug for ARM. Instead we use http://v8.googlecode.com/svn/trunk@4588, which is used by http://src.chromium.org/svn/releases/6.0.399.0/DEPS Note that a trivial bug fix was required in arm/codegen-arm.cc. This is guarded with ANDROID. See http://code.google.com/p/v8/issues/detail?id=703 Change-Id: I459647a8286c4f8c7405f0c5581ecbf051a6f1e8
Diffstat (limited to 'SConstruct')
-rw-r--r--SConstruct117
1 files changed, 92 insertions, 25 deletions
diff --git a/SConstruct b/SConstruct
index 0b038039..c85ae1ae 100644
--- a/SConstruct
+++ b/SConstruct
@@ -1,4 +1,4 @@
-# Copyright 2008 the V8 project authors. All rights reserved.
+# Copyright 2010 the V8 project authors. All rights reserved.
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
@@ -42,19 +42,32 @@ ANDROID_TOP = os.environ.get('TOP')
if ANDROID_TOP is None:
ANDROID_TOP=""
+# ARM_TARGET_LIB is the path to the dynamic library to use on the target
+# machine if cross-compiling to an arm machine. You will also need to set
+# the additional cross-compiling environment variables to the cross compiler.
+ARM_TARGET_LIB = os.environ.get('ARM_TARGET_LIB')
+if ARM_TARGET_LIB:
+ ARM_LINK_FLAGS = ['-Wl,-rpath=' + ARM_TARGET_LIB + '/lib:' +
+ ARM_TARGET_LIB + '/usr/lib',
+ '-Wl,--dynamic-linker=' + ARM_TARGET_LIB +
+ '/lib/ld-linux.so.3']
+else:
+ ARM_LINK_FLAGS = []
+
# TODO: Sort these issues out properly but as a temporary solution for gcc 4.4
# on linux we need these compiler flags to avoid crashes in the v8 test suite
# and avoid dtoa.c strict aliasing issues
if os.environ.get('GCC_VERSION') == '44':
- GCC_EXTRA_CCFLAGS = ['-fno-tree-vrp']
- GCC_DTOA_EXTRA_CCFLAGS = ['-fno-strict-aliasing']
+ GCC_EXTRA_CCFLAGS = ['-fno-tree-vrp', '-fno-strict-aliasing']
+ GCC_DTOA_EXTRA_CCFLAGS = []
else:
GCC_EXTRA_CCFLAGS = []
GCC_DTOA_EXTRA_CCFLAGS = []
-ANDROID_FLAGS = ['-march=armv5te',
- '-mtune=xscale',
- '-msoft-float',
+ANDROID_FLAGS = ['-march=armv7-a',
+ '-mtune=cortex-a8',
+ '-mfloat-abi=softfp',
+ '-mfpu=vfp',
'-fpic',
'-mthumb-interwork',
'-funwind-tables',
@@ -69,6 +82,8 @@ ANDROID_FLAGS = ['-march=armv5te',
'-fomit-frame-pointer',
'-fno-strict-aliasing',
'-finline-limit=64',
+ '-DCAN_USE_VFP_INSTRUCTIONS=1',
+ '-DCAN_USE_ARMV7_INSTRUCTIONS=1',
'-MD']
ANDROID_INCLUDES = [ANDROID_TOP + '/bionic/libc/arch-arm/include',
@@ -90,20 +105,26 @@ ANDROID_LINKFLAGS = ['-nostdlib',
'-Wl,-z,nocopyreloc',
'-Wl,-rpath-link=' + ANDROID_TOP + '/out/target/product/generic/obj/lib',
ANDROID_TOP + '/out/target/product/generic/obj/lib/crtbegin_dynamic.o',
- ANDROID_TOP + '/prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/lib/gcc/arm-eabi/4.2.1/interwork/libgcc.a',
+ ANDROID_TOP + '/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/lib/gcc/arm-eabi/4.4.0/interwork/libgcc.a',
ANDROID_TOP + '/out/target/product/generic/obj/lib/crtend_android.o'];
LIBRARY_FLAGS = {
'all': {
'CPPPATH': [join(root_dir, 'src')],
- 'regexp:native': {
- 'CPPDEFINES': ['V8_NATIVE_REGEXP']
+ 'regexp:interpreted': {
+ 'CPPDEFINES': ['V8_INTERPRETED_REGEXP']
},
'mode:debug': {
'CPPDEFINES': ['V8_ENABLE_CHECKS']
},
+ 'vmstate:on': {
+ 'CPPDEFINES': ['ENABLE_VMSTATE_TRACKING'],
+ },
+ 'protectheap:on': {
+ 'CPPDEFINES': ['ENABLE_VMSTATE_TRACKING', 'ENABLE_HEAP_PROTECTION'],
+ },
'profilingsupport:on': {
- 'CPPDEFINES': ['ENABLE_LOGGING_AND_PROFILING'],
+ 'CPPDEFINES': ['ENABLE_VMSTATE_TRACKING', 'ENABLE_LOGGING_AND_PROFILING'],
},
'debuggersupport:on': {
'CPPDEFINES': ['ENABLE_DEBUGGER_SUPPORT'],
@@ -255,8 +276,16 @@ LIBRARY_FLAGS = {
},
'msvcltcg:on': {
'CCFLAGS': ['/GL'],
- 'LINKFLAGS': ['/LTCG'],
'ARFLAGS': ['/LTCG'],
+ 'pgo:off': {
+ 'LINKFLAGS': ['/LTCG'],
+ },
+ 'pgo:instrument': {
+ 'LINKFLAGS': ['/LTCG:PGI']
+ },
+ 'pgo:optimize': {
+ 'LINKFLAGS': ['/LTCG:PGO']
+ }
}
}
}
@@ -363,7 +392,6 @@ DTOA_EXTRA_FLAGS = {
CCTEST_EXTRA_FLAGS = {
'all': {
'CPPPATH': [join(root_dir, 'src')],
- 'LIBS': ['$LIBRARY']
},
'gcc': {
'all': {
@@ -393,13 +421,17 @@ CCTEST_EXTRA_FLAGS = {
'__ARM_ARCH_5E__', '__ARM_ARCH_5TE__'],
'CCFLAGS': ANDROID_FLAGS,
'CPPPATH': ANDROID_INCLUDES,
- 'LIBPATH': [ANDROID_TOP + '/out/target/product/generic/obj/lib'],
+ 'LIBPATH': [ANDROID_TOP + '/out/target/product/generic/obj/lib',
+ ANDROID_TOP + '/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/lib/gcc/arm-eabi/4.4.0/interwork'],
'LINKFLAGS': ANDROID_LINKFLAGS,
- 'LIBS': ['log', 'c', 'stdc++', 'm'],
+ 'LIBS': ['log', 'c', 'stdc++', 'm', 'gcc'],
'mode:release': {
'CPPDEFINES': ['SK_RELEASE', 'NDEBUG']
}
},
+ 'arch:arm': {
+ 'LINKFLAGS': ARM_LINK_FLAGS
+ },
},
'msvc': {
'all': {
@@ -423,7 +455,6 @@ CCTEST_EXTRA_FLAGS = {
SAMPLE_FLAGS = {
'all': {
'CPPPATH': [join(abspath('.'), 'include')],
- 'LIBS': ['$LIBRARY'],
},
'gcc': {
'all': {
@@ -457,13 +488,17 @@ SAMPLE_FLAGS = {
'__ARM_ARCH_5E__', '__ARM_ARCH_5TE__'],
'CCFLAGS': ANDROID_FLAGS,
'CPPPATH': ANDROID_INCLUDES,
- 'LIBPATH': [ANDROID_TOP + '/out/target/product/generic/obj/lib'],
+ 'LIBPATH': [ANDROID_TOP + '/out/target/product/generic/obj/lib',
+ ANDROID_TOP + '/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/lib/gcc/arm-eabi/4.4.0/interwork'],
'LINKFLAGS': ANDROID_LINKFLAGS,
- 'LIBS': ['log', 'c', 'stdc++', 'm'],
+ 'LIBS': ['log', 'c', 'stdc++', 'm', 'gcc'],
'mode:release': {
'CPPDEFINES': ['SK_RELEASE', 'NDEBUG']
}
},
+ 'arch:arm': {
+ 'LINKFLAGS': ARM_LINK_FLAGS
+ },
'arch:ia32': {
'CCFLAGS': ['-m32'],
'LINKFLAGS': ['-m32']
@@ -527,7 +562,15 @@ SAMPLE_FLAGS = {
},
'msvcltcg:on': {
'CCFLAGS': ['/GL'],
- 'LINKFLAGS': ['/LTCG'],
+ 'pgo:off': {
+ 'LINKFLAGS': ['/LTCG'],
+ },
+ },
+ 'pgo:instrument': {
+ 'LINKFLAGS': ['/LTCG:PGI']
+ },
+ 'pgo:optimize': {
+ 'LINKFLAGS': ['/LTCG:PGO']
}
},
'arch:ia32': {
@@ -574,9 +617,10 @@ D8_FLAGS = {
'LIBS': ['pthread'],
},
'os:android': {
- 'LIBPATH': [ANDROID_TOP + '/out/target/product/generic/obj/lib'],
+ 'LIBPATH': [ANDROID_TOP + '/out/target/product/generic/obj/lib',
+ ANDROID_TOP + '/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/lib/gcc/arm-eabi/4.4.0/interwork'],
'LINKFLAGS': ANDROID_LINKFLAGS,
- 'LIBS': ['log', 'c', 'stdc++', 'm'],
+ 'LIBS': ['log', 'c', 'stdc++', 'm', 'gcc'],
},
'os:win32': {
'LIBS': ['winmm', 'ws2_32'],
@@ -652,6 +696,16 @@ SIMPLE_OPTIONS = {
'default': 'static',
'help': 'the type of library to produce'
},
+ 'vmstate': {
+ 'values': ['on', 'off'],
+ 'default': 'off',
+ 'help': 'enable VM state tracking'
+ },
+ 'protectheap': {
+ 'values': ['on', 'off'],
+ 'default': 'off',
+ 'help': 'enable heap protection'
+ },
'profilingsupport': {
'values': ['on', 'off'],
'default': 'on',
@@ -711,6 +765,11 @@ SIMPLE_OPTIONS = {
'values': ['arm', 'thumb2', 'none'],
'default': 'none',
'help': 'generate thumb2 instructions instead of arm instructions (default)'
+ },
+ 'pgo': {
+ 'values': ['off', 'instrument', 'optimize'],
+ 'default': 'off',
+ 'help': 'select profile guided optimization variant',
}
}
@@ -798,6 +857,8 @@ def VerifyOptions(env):
Abort("Shared Object soname not applicable for Windows.")
if env['soname'] == 'on' and env['library'] == 'static':
Abort("Shared Object soname not applicable for static library.")
+ if env['os'] != 'win32' and env['pgo'] != 'off':
+ Abort("Profile guided optimization only supported on Windows.")
for (name, option) in SIMPLE_OPTIONS.iteritems():
if (not option.get('default')) and (name not in ARGUMENTS):
message = ("A value for option %s must be specified (%s)." %
@@ -883,7 +944,7 @@ class BuildContext(object):
env['ENV'] = self.env_overrides
-def PostprocessOptions(options):
+def PostprocessOptions(options, os):
# Adjust architecture if the simulator option has been set
if (options['simulator'] != 'none') and (options['arch'] != options['simulator']):
if 'arch' in ARGUMENTS:
@@ -894,6 +955,10 @@ def PostprocessOptions(options):
# Print a warning if profiling is enabled without profiling support
print "Warning: forcing profilingsupport on when prof is on"
options['profilingsupport'] = 'on'
+ if os == 'win32' and options['pgo'] != 'off' and options['msvcltcg'] == 'off':
+ if 'msvcltcg' in ARGUMENTS:
+ print "Warning: forcing msvcltcg on as it is required for pgo (%s)" % options['pgo']
+ options['msvcltcg'] = 'on'
if (options['armvariant'] == 'none' and options['arch'] == 'arm'):
options['armvariant'] = 'arm'
if (options['armvariant'] != 'none' and options['arch'] != 'arm'):
@@ -924,7 +989,7 @@ def BuildSpecific(env, mode, env_overrides):
options = {'mode': mode}
for option in SIMPLE_OPTIONS:
options[option] = env[option]
- PostprocessOptions(options)
+ PostprocessOptions(options, env['os'])
context = BuildContext(options, env_overrides, samples=SplitList(env['sample']))
@@ -961,7 +1026,6 @@ def BuildSpecific(env, mode, env_overrides):
if context.options['soname'] == 'on':
# When building shared object with SONAME version the library name.
library_name += '-' + version
- env['LIBRARY'] = library_name
# Generate library SONAME if required by the build.
if context.options['soname'] == 'on':
@@ -1001,8 +1065,9 @@ def BuildSpecific(env, mode, env_overrides):
context.d8_targets.append(shell)
for sample in context.samples:
- sample_env = Environment(LIBRARY=library_name)
+ sample_env = Environment()
sample_env.Replace(**context.flags['sample'])
+ sample_env.Prepend(LIBS=[library_name])
context.ApplyEnvOverrides(sample_env)
sample_object = sample_env.SConscript(
join('samples', 'SConscript'),
@@ -1015,7 +1080,9 @@ def BuildSpecific(env, mode, env_overrides):
sample_env.Depends(sample_program, library)
context.sample_targets.append(sample_program)
- cctest_program = env.SConscript(
+ cctest_env = env.Copy()
+ cctest_env.Prepend(LIBS=[library_name])
+ cctest_program = cctest_env.SConscript(
join('test', 'cctest', 'SConscript'),
build_dir=join('obj', 'test', target_id),
exports='context object_files',