Commit 18c742f1 authored by lrn@chromium.org's avatar lrn@chromium.org

Introduce scons target to build preparser libraray and proof-of-concept command line process.

The target doesn't compile yet, due to v8 dependencies introduced by isolates.

Review URL: http://codereview.chromium.org/6772002

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@7404 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent b3cec2be
...@@ -504,17 +504,139 @@ SAMPLE_FLAGS = { ...@@ -504,17 +504,139 @@ SAMPLE_FLAGS = {
'LIBS': ['pthread'], 'LIBS': ['pthread'],
}, },
'os:freebsd': { 'os:freebsd': {
'LIBPATH' : ['/usr/local/lib'], 'LIBPATH' : ['/usr/local/lib'],
'LIBS': ['execinfo', 'pthread'] 'LIBS': ['execinfo', 'pthread']
}, },
'os:solaris': { 'os:solaris': {
'LIBPATH' : ['/usr/local/lib'], 'LIBPATH' : ['/usr/local/lib'],
'LIBS': ['m', 'pthread', 'socket', 'nsl', 'rt'], 'LIBS': ['m', 'pthread', 'socket', 'nsl', 'rt'],
'LINKFLAGS': ['-mt'] 'LINKFLAGS': ['-mt']
}, },
'os:openbsd': { 'os:openbsd': {
'LIBPATH' : ['/usr/local/lib'], 'LIBPATH' : ['/usr/local/lib'],
'LIBS': ['execinfo', 'pthread'] 'LIBS': ['execinfo', 'pthread']
},
'os:win32': {
'LIBS': ['winmm', 'ws2_32']
},
'os:android': {
'CPPDEFINES': ['ANDROID', '__ARM_ARCH_5__', '__ARM_ARCH_5T__',
'__ARM_ARCH_5E__', '__ARM_ARCH_5TE__'],
'CCFLAGS': ANDROID_FLAGS,
'CPPPATH': ANDROID_INCLUDES,
'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', 'gcc'],
'mode:release': {
'CPPDEFINES': ['SK_RELEASE', 'NDEBUG']
}
},
'arch:arm': {
'LINKFLAGS': ARM_LINK_FLAGS
},
'arch:ia32': {
'CCFLAGS': ['-m32'],
'LINKFLAGS': ['-m32']
},
'arch:x64': {
'CCFLAGS': ['-m64'],
'LINKFLAGS': ['-m64']
},
'arch:mips': {
'CPPDEFINES': ['V8_TARGET_ARCH_MIPS'],
'simulator:none': {
'CCFLAGS': ['-EL', '-mips32r2', '-Wa,-mips32r2', '-fno-inline'],
'LINKFLAGS': ['-EL'],
'LDFLAGS': ['-EL']
}
},
'simulator:arm': {
'CCFLAGS': ['-m32'],
'LINKFLAGS': ['-m32']
},
'simulator:mips': {
'CCFLAGS': ['-m32'],
'LINKFLAGS': ['-m32']
},
'mode:release': {
'CCFLAGS': ['-O2']
},
'mode:debug': {
'CCFLAGS': ['-g', '-O0'],
'CPPDEFINES': ['DEBUG']
},
},
'msvc': {
'all': {
'LIBS': ['winmm', 'ws2_32']
},
'verbose:off': {
'CCFLAGS': ['/nologo'],
'LINKFLAGS': ['/NOLOGO']
},
'verbose:on': {
'LINKFLAGS': ['/VERBOSE']
},
'library:shared': {
'CPPDEFINES': ['USING_V8_SHARED']
},
'prof:on': {
'LINKFLAGS': ['/MAP']
},
'mode:release': {
'CCFLAGS': ['/O2'],
'LINKFLAGS': ['/OPT:REF', '/OPT:ICF'],
'msvcrt:static': {
'CCFLAGS': ['/MT']
},
'msvcrt:shared': {
'CCFLAGS': ['/MD']
},
'msvcltcg:on': {
'CCFLAGS': ['/GL'],
'pgo:off': {
'LINKFLAGS': ['/LTCG'],
},
},
'pgo:instrument': {
'LINKFLAGS': ['/LTCG:PGI']
},
'pgo:optimize': {
'LINKFLAGS': ['/LTCG:PGO']
}
},
'arch:ia32': {
'CPPDEFINES': ['V8_TARGET_ARCH_IA32', 'WIN32'],
'LINKFLAGS': ['/MACHINE:X86']
},
'arch:x64': {
'CPPDEFINES': ['V8_TARGET_ARCH_X64', 'WIN32'],
'LINKFLAGS': ['/MACHINE:X64', '/STACK:2091752']
},
'mode:debug': {
'CCFLAGS': ['/Od'],
'LINKFLAGS': ['/DEBUG'],
'CPPDEFINES': ['DEBUG'],
'msvcrt:static': {
'CCFLAGS': ['/MTd']
},
'msvcrt:shared': {
'CCFLAGS': ['/MDd']
}
}
}
}
PREPARSER_FLAGS = {
'all': {
'CPPPATH': [join(abspath('.'), 'include'), join(abspath('.'), 'src')]
},
'gcc': {
'all': {
'LIBPATH': ['.'],
'CCFLAGS': ['-fno-rtti', '-fno-exceptions']
}, },
'os:win32': { 'os:win32': {
'LIBS': ['winmm', 'ws2_32'] 'LIBS': ['winmm', 'ws2_32']
...@@ -994,6 +1116,7 @@ class BuildContext(object): ...@@ -994,6 +1116,7 @@ class BuildContext(object):
self.options = options self.options = options
self.env_overrides = env_overrides self.env_overrides = env_overrides
self.samples = samples self.samples = samples
self.preparser_targets = []
self.use_snapshot = (options['snapshot'] != 'off') self.use_snapshot = (options['snapshot'] != 'off')
self.build_snapshot = (options['snapshot'] == 'on') self.build_snapshot = (options['snapshot'] == 'on')
self.flags = None self.flags = None
...@@ -1124,6 +1247,7 @@ def BuildSpecific(env, mode, env_overrides): ...@@ -1124,6 +1247,7 @@ def BuildSpecific(env, mode, env_overrides):
dtoa_flags = context.AddRelevantFlags(library_flags, DTOA_EXTRA_FLAGS) dtoa_flags = context.AddRelevantFlags(library_flags, DTOA_EXTRA_FLAGS)
cctest_flags = context.AddRelevantFlags(v8_flags, CCTEST_EXTRA_FLAGS) cctest_flags = context.AddRelevantFlags(v8_flags, CCTEST_EXTRA_FLAGS)
sample_flags = context.AddRelevantFlags(user_environ, SAMPLE_FLAGS) sample_flags = context.AddRelevantFlags(user_environ, SAMPLE_FLAGS)
preparser_flags = context.AddRelevantFlags(user_environ, PREPARSER_FLAGS)
d8_flags = context.AddRelevantFlags(library_flags, D8_FLAGS) d8_flags = context.AddRelevantFlags(library_flags, D8_FLAGS)
context.flags = { context.flags = {
...@@ -1132,13 +1256,15 @@ def BuildSpecific(env, mode, env_overrides): ...@@ -1132,13 +1256,15 @@ def BuildSpecific(env, mode, env_overrides):
'dtoa': dtoa_flags, 'dtoa': dtoa_flags,
'cctest': cctest_flags, 'cctest': cctest_flags,
'sample': sample_flags, 'sample': sample_flags,
'd8': d8_flags 'd8': d8_flags,
'preparser': preparser_flags
} }
# Generate library base name. # Generate library base name.
target_id = mode target_id = mode
suffix = SUFFIXES[target_id] suffix = SUFFIXES[target_id]
library_name = 'v8' + suffix library_name = 'v8' + suffix
preparser_library_name = 'v8preparser' + suffix
version = GetVersion() version = GetVersion()
if context.options['soname'] == 'on': if context.options['soname'] == 'on':
# When building shared object with SONAME version the library name. # When building shared object with SONAME version the library name.
...@@ -1152,7 +1278,7 @@ def BuildSpecific(env, mode, env_overrides): ...@@ -1152,7 +1278,7 @@ def BuildSpecific(env, mode, env_overrides):
env['SONAME'] = soname env['SONAME'] = soname
# Build the object files by invoking SCons recursively. # Build the object files by invoking SCons recursively.
(object_files, shell_files, mksnapshot) = env.SConscript( (object_files, shell_files, mksnapshot, preparser_files) = env.SConscript(
join('src', 'SConscript'), join('src', 'SConscript'),
build_dir=join('obj', target_id), build_dir=join('obj', target_id),
exports='context', exports='context',
...@@ -1167,13 +1293,20 @@ def BuildSpecific(env, mode, env_overrides): ...@@ -1167,13 +1293,20 @@ def BuildSpecific(env, mode, env_overrides):
context.ApplyEnvOverrides(env) context.ApplyEnvOverrides(env)
if context.options['library'] == 'static': if context.options['library'] == 'static':
library = env.StaticLibrary(library_name, object_files) library = env.StaticLibrary(library_name, object_files)
preparser_library = env.StaticLibrary(preparser_library_name,
preparser_files)
else: else:
# There seems to be a glitch in the way scons decides where to put # There seems to be a glitch in the way scons decides where to put
# PDB files when compiling using MSVC so we specify it manually. # PDB files when compiling using MSVC so we specify it manually.
# This should not affect any other platforms. # This should not affect any other platforms.
pdb_name = library_name + '.dll.pdb' pdb_name = library_name + '.dll.pdb'
library = env.SharedLibrary(library_name, object_files, PDB=pdb_name) library = env.SharedLibrary(library_name, object_files, PDB=pdb_name)
preparser_pdb_name = preparser_library_name + '.dll.pdb';
preparser_library = env.SharedLibrary(preparser_library_name,
preparser_files,
PDB=preparser_pdb_name)
context.library_targets.append(library) context.library_targets.append(library)
context.library_targets.append(preparser_library)
d8_env = Environment() d8_env = Environment()
d8_env.Replace(**context.flags['d8']) d8_env.Replace(**context.flags['d8'])
...@@ -1207,6 +1340,21 @@ def BuildSpecific(env, mode, env_overrides): ...@@ -1207,6 +1340,21 @@ def BuildSpecific(env, mode, env_overrides):
) )
context.cctest_targets.append(cctest_program) context.cctest_targets.append(cctest_program)
preparser_env = env.Copy()
preparser_env.Replace(**context.flags['preparser'])
preparser_env.Prepend(LIBS=[preparser_library_name])
context.ApplyEnvOverrides(preparser_env)
preparser_object = preparser_env.SConscript(
join('preparser', 'SConscript'),
build_dir=join('obj', 'preparser', target_id),
exports='context',
duplicate=False
)
preparser_name = join('obj', 'preparser', target_id, 'preparser' + suffix)
preparser_program = preparser_env.Program(preparser_name, preparser_object);
preparser_env.Depends(preparser_program, preparser_library)
context.preparser_targets.append(preparser_program)
return context return context
...@@ -1223,6 +1371,7 @@ def Build(): ...@@ -1223,6 +1371,7 @@ def Build():
mksnapshots = [] mksnapshots = []
cctests = [] cctests = []
samples = [] samples = []
preparsers = []
d8s = [] d8s = []
modes = SplitList(env['mode']) modes = SplitList(env['mode'])
for mode in modes: for mode in modes:
...@@ -1231,6 +1380,7 @@ def Build(): ...@@ -1231,6 +1380,7 @@ def Build():
mksnapshots += context.mksnapshot_targets mksnapshots += context.mksnapshot_targets
cctests += context.cctest_targets cctests += context.cctest_targets
samples += context.sample_targets samples += context.sample_targets
preparsers += context.preparser_targets
d8s += context.d8_targets d8s += context.d8_targets
env.Alias('library', libraries) env.Alias('library', libraries)
...@@ -1238,6 +1388,7 @@ def Build(): ...@@ -1238,6 +1388,7 @@ def Build():
env.Alias('cctests', cctests) env.Alias('cctests', cctests)
env.Alias('sample', samples) env.Alias('sample', samples)
env.Alias('d8', d8s) env.Alias('d8', d8s)
env.Alias('preparser', preparsers)
if env['sample']: if env['sample']:
env.Default('sample') env.Default('sample')
......
# Copyright 2011 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:
#
# * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above
# copyright notice, this list of conditions and the following
# disclaimer in the documentation and/or other materials provided
# with the distribution.
# * Neither the name of Google Inc. nor the names of its
# contributors may be used to endorse or promote products derived
# from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
from os.path import join
Import('context')
def ConfigureObjectFiles():
env = Environment()
env.Replace(**context.flags['preparser'])
context.ApplyEnvOverrides(env)
return env.Object('preparser-process.cc')
preparser_object = ConfigureObjectFiles()
Return('preparser_object')
...@@ -250,6 +250,20 @@ SOURCES = { ...@@ -250,6 +250,20 @@ SOURCES = {
} }
PREPARSER_SOURCES = {
'all': Split("""
allocation.cc
hashmap.cc
preparse-data.cc
preparser.cc
preparser-api.cc
scanner-base.cc
token.cc
unicode.cc
""")
}
D8_FILES = { D8_FILES = {
'all': [ 'all': [
'd8.cc', 'd8-debug.cc' 'd8.cc', 'd8-debug.cc'
...@@ -335,6 +349,9 @@ def ConfigureObjectFiles(): ...@@ -335,6 +349,9 @@ def ConfigureObjectFiles():
source_objs = context.ConfigureObject(env, source_files) source_objs = context.ConfigureObject(env, source_files)
non_snapshot_files = [source_objs] non_snapshot_files = [source_objs]
preparser_source_files = context.GetRelevantSources(PREPARSER_SOURCES)
preparser_objs = context.ConfigureObject(env, preparser_source_files)
# Create snapshot if necessary. For cross compilation you should either # Create snapshot if necessary. For cross compilation you should either
# do without snapshots and take the performance hit or you should build a # do without snapshots and take the performance hit or you should build a
# host VM with the simulator=arm and snapshot=on options and then take the # host VM with the simulator=arm and snapshot=on options and then take the
...@@ -355,8 +372,8 @@ def ConfigureObjectFiles(): ...@@ -355,8 +372,8 @@ def ConfigureObjectFiles():
else: else:
snapshot_obj = empty_snapshot_obj snapshot_obj = empty_snapshot_obj
library_objs = [non_snapshot_files, libraries_obj, snapshot_obj] library_objs = [non_snapshot_files, libraries_obj, snapshot_obj]
return (library_objs, d8_objs, [mksnapshot]) return (library_objs, d8_objs, [mksnapshot], preparser_objs)
(library_objs, d8_objs, mksnapshot) = ConfigureObjectFiles() (library_objs, d8_objs, mksnapshot, preparser_objs) = ConfigureObjectFiles()
Return('library_objs d8_objs mksnapshot') Return('library_objs d8_objs mksnapshot preparser_objs')
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment