diff options
author | Steve Block <steveblock@google.com> | 2010-05-10 14:33:55 +0100 |
---|---|---|
committer | Steve Block <steveblock@google.com> | 2010-05-10 15:08:22 +0100 |
commit | 6ded16be15dd865a9b21ea304d5273c8be299c87 (patch) | |
tree | b3661ae5d929e233f7024223f3fad0f2a284cd6e /SConstruct | |
parent | 6599b9dd3411791c9d89ab7efbfb4131e5664c48 (diff) | |
download | android_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-- | SConstruct | 117 |
1 files changed, 92 insertions, 25 deletions
@@ -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', |