blob: b0a2933d2e6180c0015f2206e14f28473f1cbcd7 [file] [log] [blame]
ager@chromium.org9258b6b2008-09-11 09:11:10 +00001# Copyright 2008 the V8 project authors. All rights reserved.
christian.plesner.hansen43d26ec2008-07-03 15:10:15 +00002# Redistribution and use in source and binary forms, with or without
3# modification, are permitted provided that the following conditions are
4# met:
5#
6# * Redistributions of source code must retain the above copyright
7# notice, this list of conditions and the following disclaimer.
8# * Redistributions in binary form must reproduce the above
9# copyright notice, this list of conditions and the following
10# disclaimer in the documentation and/or other materials provided
11# with the distribution.
12# * Neither the name of Google Inc. nor the names of its
13# contributors may be used to endorse or promote products derived
14# from this software without specific prior written permission.
15#
16# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
28import sys
29from os.path import join, dirname, abspath
30root_dir = dirname(File('SConstruct').rfile().abspath)
31sys.path.append(join(root_dir, 'tools'))
32import js2c
mads.s.ager@gmail.com9a4089a2008-09-01 08:55:01 +000033Import('context')
christian.plesner.hansen43d26ec2008-07-03 15:10:15 +000034
35
mads.s.ager@gmail.com9a4089a2008-09-01 08:55:01 +000036SOURCES = {
37 'all': [
38 'accessors.cc', 'allocation.cc', 'api.cc', 'assembler.cc', 'ast.cc',
39 'bootstrapper.cc', 'builtins.cc', 'checks.cc', 'code-stubs.cc',
kasperl@chromium.orgb9123622008-09-17 14:05:56 +000040 'codegen.cc', 'compilation-cache.cc', 'compiler.cc', 'contexts.cc',
41 'conversions.cc', 'counters.cc', 'dateparser.cc', 'debug.cc',
kasperl@chromium.org7be3c992009-03-12 07:19:55 +000042 'debug-agent.cc', 'disassembler.cc', 'execution.cc', 'factory.cc',
kasperl@chromium.orgd1e3e722009-04-14 13:38:25 +000043 'flags.cc', 'frames.cc', 'func-name-inferrer.cc',
44 'global-handles.cc', 'handles.cc', 'hashmap.cc',
kasperl@chromium.org7be3c992009-03-12 07:19:55 +000045 'heap.cc', 'ic.cc', 'interpreter-irregexp.cc', 'jsregexp.cc',
46 'jump-target.cc', 'log.cc', 'mark-compact.cc', 'messages.cc', 'objects.cc',
47 'oprofile-agent.cc', 'parser.cc', 'property.cc', 'regexp-macro-assembler.cc',
48 'regexp-macro-assembler-irregexp.cc', 'regexp-stack.cc',
49 'register-allocator.cc', 'rewriter.cc', 'runtime.cc', 'scanner.cc',
ager@chromium.org32912102009-01-16 10:38:43 +000050 'scopeinfo.cc', 'scopes.cc', 'serialize.cc', 'snapshot-common.cc',
51 'spaces.cc', 'string-stream.cc', 'stub-cache.cc', 'token.cc', 'top.cc',
kasperl@chromium.org7be3c992009-03-12 07:19:55 +000052 'unicode.cc', 'usage-analyzer.cc', 'utils.cc', 'v8-counters.cc',
53 'v8.cc', 'v8threads.cc', 'variables.cc', 'virtual-frame.cc', 'zone.cc'
mads.s.ager@gmail.com9a4089a2008-09-01 08:55:01 +000054 ],
kasperl@chromium.org7be3c992009-03-12 07:19:55 +000055 'arch:arm': [
ager@chromium.org3a37e9b2009-04-27 09:26:21 +000056 'arm/assembler-arm.cc', 'arm/builtins-arm.cc',
57 'arm/codegen-arm.cc', 'arm/cpu-arm.cc', 'arm/disasm-arm.cc',
58 'arm/debug-arm.cc', 'arm/frames-arm.cc', 'arm/ic-arm.cc',
59 'arm/jump-target-arm.cc', 'arm/macro-assembler-arm.cc',
60 'arm/register-allocator-arm.cc', 'arm/stub-cache-arm.cc',
61 'arm/regexp-macro-assembler-arm.cc', 'arm/virtual-frame-arm.cc'
kasperl@chromium.org7be3c992009-03-12 07:19:55 +000062 ],
63 'arch:ia32': [
ager@chromium.org3a37e9b2009-04-27 09:26:21 +000064 'ia32/assembler-ia32.cc', 'ia32/builtins-ia32.cc',
65 'ia32/codegen-ia32.cc', 'ia32/cpu-ia32.cc', 'ia32/disasm-ia32.cc',
66 'ia32/debug-ia32.cc', 'ia32/frames-ia32.cc', 'ia32/ic-ia32.cc',
67 'ia32/jump-target-ia32.cc', 'ia32/macro-assembler-ia32.cc',
68 'ia32/register-allocator-ia32.cc', 'ia32/stub-cache-ia32.cc',
69 'ia32/regexp-macro-assembler-ia32.cc', 'ia32/virtual-frame-ia32.cc'
kasperl@chromium.org7be3c992009-03-12 07:19:55 +000070 ],
ager@chromium.org3a37e9b2009-04-27 09:26:21 +000071 'simulator:arm': ['arm/simulator-arm.cc'],
ager@chromium.orgbb29dc92009-03-24 13:25:23 +000072 'os:freebsd': ['platform-freebsd.cc', 'platform-posix.cc'],
73 'os:linux': ['platform-linux.cc', 'platform-posix.cc'],
74 'os:android': ['platform-linux.cc', 'platform-posix.cc'],
75 'os:macos': ['platform-macos.cc', 'platform-posix.cc'],
ager@chromium.orga74f0da2008-12-03 16:05:52 +000076 'os:nullos': ['platform-nullos.cc'],
77 'os:win32': ['platform-win32.cc'],
mads.s.ager@gmail.com9a4089a2008-09-01 08:55:01 +000078 'mode:release': [],
ager@chromium.orga74f0da2008-12-03 16:05:52 +000079 'mode:debug': [
80 'objects-debug.cc', 'prettyprinter.cc', 'regexp-macro-assembler-tracer.cc'
81 ]
christian.plesner.hansen43d26ec2008-07-03 15:10:15 +000082}
83
84
kasperl@chromium.org5a8ca6c2008-10-23 13:57:19 +000085D8_FILES = {
86 'all': [
christian.plesner.hansen@gmail.com37abdec2009-01-06 14:43:28 +000087 'd8.cc', 'd8-debug.cc'
kasperl@chromium.org5a8ca6c2008-10-23 13:57:19 +000088 ],
ager@chromium.org41826e72009-03-30 13:30:57 +000089 'os:linux': [
90 'd8-posix.cc'
91 ],
92 'os:macos': [
93 'd8-posix.cc'
94 ],
95 'os:android': [
96 'd8-posix.cc'
97 ],
98 'os:freebsd': [
99 'd8-posix.cc'
100 ],
ager@chromium.org71daaf62009-04-01 07:22:49 +0000101 'os:win32': [
ager@chromium.org41826e72009-03-30 13:30:57 +0000102 'd8-windows.cc'
103 ],
104 'os:nullos': [
105 'd8-windows.cc' # Empty implementation at the moment.
106 ],
kasperl@chromium.org5a8ca6c2008-10-23 13:57:19 +0000107 'console:readline': [
108 'd8-readline.cc'
109 ]
110}
111
112
christian.plesner.hansen43d26ec2008-07-03 15:10:15 +0000113LIBRARY_FILES = '''
114runtime.js
115v8natives.js
116array.js
117string.js
118uri.js
119math.js
120messages.js
121apinatives.js
122debug-delay.js
123mirror-delay.js
124date-delay.js
125regexp-delay.js
ager@chromium.org3a37e9b2009-04-27 09:26:21 +0000126json-delay.js
christian.plesner.hansen43d26ec2008-07-03 15:10:15 +0000127'''.split()
128
129
christian.plesner.hansen43d26ec2008-07-03 15:10:15 +0000130def Abort(message):
131 print message
132 sys.exit(1)
133
134
kasper.lund7276f142008-07-30 08:49:36 +0000135def ConfigureObjectFiles():
christian.plesner.hansen43d26ec2008-07-03 15:10:15 +0000136 env = Environment()
mads.s.ager@gmail.com9a4089a2008-09-01 08:55:01 +0000137 env.Replace(**context.flags['v8'])
ager@chromium.org9258b6b2008-09-11 09:11:10 +0000138 context.ApplyEnvOverrides(env)
christian.plesner.hansen43d26ec2008-07-03 15:10:15 +0000139 env['BUILDERS']['JS2C'] = Builder(action=js2c.JS2C)
kasperl@chromium.org5a8ca6c2008-10-23 13:57:19 +0000140 env['BUILDERS']['Snapshot'] = Builder(action='$SOURCE $TARGET --logfile "$LOGFILE"')
christian.plesner.hansen43d26ec2008-07-03 15:10:15 +0000141
142 # Build the standard platform-independent source files.
mads.s.ager@gmail.com9a4089a2008-09-01 08:55:01 +0000143 source_files = context.GetRelevantSources(SOURCES)
christian.plesner.hansen43d26ec2008-07-03 15:10:15 +0000144
kasperl@chromium.org5a8ca6c2008-10-23 13:57:19 +0000145 d8_files = context.GetRelevantSources(D8_FILES)
146 d8_js = env.JS2C('d8-js.cc', 'd8.js', TYPE='D8')
147 d8_js_obj = context.ConfigureObject(env, d8_js, CPPPATH=['.'])
148 d8_objs = [context.ConfigureObject(env, [d8_files]), d8_js_obj]
149
kasper.lund7276f142008-07-30 08:49:36 +0000150 # Combine the JavaScript library files into a single C++ file and
christian.plesner.hansen43d26ec2008-07-03 15:10:15 +0000151 # compile it.
152 library_files = [s for s in LIBRARY_FILES]
153 library_files.append('macros.py')
kasperl@chromium.org5a8ca6c2008-10-23 13:57:19 +0000154 libraries_src, libraries_empty_src = env.JS2C(['libraries.cc', 'libraries-empty.cc'], library_files, TYPE='CORE')
mads.s.ager@gmail.com9a4089a2008-09-01 08:55:01 +0000155 libraries_obj = context.ConfigureObject(env, libraries_src, CPPPATH=['.'])
christian.plesner.hansen43d26ec2008-07-03 15:10:15 +0000156
christian.plesner.hansen43d26ec2008-07-03 15:10:15 +0000157 # Build dtoa.
158 dtoa_env = env.Copy()
mads.s.ager@gmail.com9a4089a2008-09-01 08:55:01 +0000159 dtoa_env.Replace(**context.flags['dtoa'])
christian.plesner.hansen43d26ec2008-07-03 15:10:15 +0000160 dtoa_files = ['dtoa-config.c']
mads.s.ager@gmail.com9a4089a2008-09-01 08:55:01 +0000161 dtoa_obj = context.ConfigureObject(dtoa_env, dtoa_files)
christian.plesner.hansen43d26ec2008-07-03 15:10:15 +0000162
mads.s.ager@gmail.com9a4089a2008-09-01 08:55:01 +0000163 source_objs = context.ConfigureObject(env, source_files)
ager@chromium.org381abbb2009-02-25 13:23:22 +0000164 non_snapshot_files = [dtoa_obj, source_objs]
kasperl@chromium.orgb9123622008-09-17 14:05:56 +0000165
christian.plesner.hansen43d26ec2008-07-03 15:10:15 +0000166 # Create snapshot if necessary.
mads.s.ager@gmail.com9a4089a2008-09-01 08:55:01 +0000167 empty_snapshot_obj = context.ConfigureObject(env, 'snapshot-empty.cc')
iposva@chromium.org245aa852009-02-10 00:49:54 +0000168 mksnapshot_env = env.Copy()
169 mksnapshot_env.Replace(**context.flags['mksnapshot'])
170 mksnapshot_src = 'mksnapshot.cc'
171 mksnapshot = mksnapshot_env.Program('mksnapshot', [mksnapshot_src, libraries_obj, non_snapshot_files, empty_snapshot_obj], PDB='mksnapshot.exe.pdb')
mads.s.ager@gmail.com9a4089a2008-09-01 08:55:01 +0000172 if context.use_snapshot:
iposva@chromium.org245aa852009-02-10 00:49:54 +0000173 if context.build_snapshot:
174 snapshot_cc = env.Snapshot('snapshot.cc', mksnapshot, LOGFILE=File('snapshot.log').abspath)
175 else:
176 snapshot_cc = Command('snapshot.cc', [], [])
mads.s.ager@gmail.com9a4089a2008-09-01 08:55:01 +0000177 snapshot_obj = context.ConfigureObject(env, snapshot_cc, CPPPATH=['.'])
178 libraries_obj = context.ConfigureObject(env, libraries_empty_src, CPPPATH=['.'])
christian.plesner.hansen43d26ec2008-07-03 15:10:15 +0000179 else:
180 snapshot_obj = empty_snapshot_obj
kasperl@chromium.org5a8ca6c2008-10-23 13:57:19 +0000181 library_objs = [non_snapshot_files, libraries_obj, snapshot_obj]
iposva@chromium.org245aa852009-02-10 00:49:54 +0000182 return (library_objs, d8_objs, [mksnapshot])
christian.plesner.hansen43d26ec2008-07-03 15:10:15 +0000183
184
iposva@chromium.org245aa852009-02-10 00:49:54 +0000185(library_objs, d8_objs, mksnapshot) = ConfigureObjectFiles()
186Return('library_objs d8_objs mksnapshot')