[V8] Introduce a QML compilation mode
[profile/ivi/qtjsbackend.git] / src / 3rdparty / v8 / src / SConscript
1 # Copyright 2012 the V8 project authors. All rights reserved.
2 # 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
28 import sys
29 from os.path import join, dirname, abspath
30 root_dir = dirname(File('SConstruct').rfile().abspath)
31 sys.path.append(join(root_dir, 'tools'))
32 import js2c
33 Import('context')
34 Import('tools')
35 Import('d8_env')
36
37
38 SOURCES = {
39   'all': Split("""
40     accessors.cc
41     allocation.cc
42     api.cc
43     assembler.cc
44     ast.cc
45     atomicops_internals_x86_gcc.cc
46     bignum.cc
47     bignum-dtoa.cc
48     bootstrapper.cc
49     builtins.cc
50     cached-powers.cc
51     checks.cc
52     circular-queue.cc
53     code-stubs.cc
54     codegen.cc
55     compilation-cache.cc
56     compiler.cc
57     contexts.cc
58     conversions.cc
59     counters.cc
60     cpu-profiler.cc
61     data-flow.cc
62     date.cc
63     dateparser.cc
64     debug-agent.cc
65     debug.cc
66     deoptimizer.cc
67     disassembler.cc
68     diy-fp.cc
69     dtoa.cc
70     elements.cc
71     execution.cc
72     factory.cc
73     flags.cc
74     frames.cc
75     full-codegen.cc
76     func-name-inferrer.cc
77     gdb-jit.cc
78     global-handles.cc
79     fast-dtoa.cc
80     fixed-dtoa.cc
81     handles.cc
82     heap-profiler.cc
83     heap.cc
84     hydrogen.cc
85     hydrogen-instructions.cc
86     ic.cc
87     incremental-marking.cc
88     interface.cc
89     inspector.cc
90     interpreter-irregexp.cc
91     isolate.cc
92     jsregexp.cc
93     lithium-allocator.cc
94     lithium.cc
95     liveedit.cc
96     liveobjectlist.cc
97     log-utils.cc
98     log.cc
99     mark-compact.cc
100     messages.cc
101     objects.cc
102     objects-printer.cc
103     objects-visiting.cc
104     once.cc
105     parser.cc
106     preparser.cc
107     preparse-data.cc
108     profile-generator.cc
109     property.cc
110     regexp-macro-assembler-irregexp.cc
111     regexp-macro-assembler.cc
112     regexp-stack.cc
113     rewriter.cc
114     runtime.cc
115     runtime-profiler.cc
116     safepoint-table.cc
117     scanner.cc
118     scanner-character-streams.cc
119     scopeinfo.cc
120     scopes.cc
121     serialize.cc
122     snapshot-common.cc
123     spaces.cc
124     string-search.cc
125     string-stream.cc
126     strtod.cc
127     stub-cache.cc
128     token.cc
129     type-info.cc
130     unicode.cc
131     utils.cc
132     v8-counters.cc
133     v8.cc
134     v8conversions.cc
135     v8threads.cc
136     v8utils.cc
137     variables.cc
138     version.cc
139     store-buffer.cc
140     zone.cc
141     extensions/gc-extension.cc
142     extensions/externalize-string-extension.cc
143     """),
144   'arch:arm': Split("""
145     arm/builtins-arm.cc
146     arm/code-stubs-arm.cc
147     arm/codegen-arm.cc
148     arm/constants-arm.cc
149     arm/cpu-arm.cc
150     arm/debug-arm.cc
151     arm/deoptimizer-arm.cc
152     arm/disasm-arm.cc
153     arm/frames-arm.cc
154     arm/full-codegen-arm.cc
155     arm/ic-arm.cc
156     arm/lithium-arm.cc
157     arm/lithium-codegen-arm.cc
158     arm/lithium-gap-resolver-arm.cc
159     arm/macro-assembler-arm.cc
160     arm/regexp-macro-assembler-arm.cc
161     arm/stub-cache-arm.cc
162     arm/assembler-arm.cc
163     """),
164   'arch:mips': Split("""
165     mips/assembler-mips.cc
166     mips/builtins-mips.cc
167     mips/code-stubs-mips.cc
168     mips/codegen-mips.cc
169     mips/constants-mips.cc
170     mips/cpu-mips.cc
171     mips/debug-mips.cc
172     mips/deoptimizer-mips.cc
173     mips/disasm-mips.cc
174     mips/frames-mips.cc
175     mips/full-codegen-mips.cc
176     mips/ic-mips.cc
177     mips/lithium-codegen-mips.cc
178     mips/lithium-gap-resolver-mips.cc
179     mips/lithium-mips.cc
180     mips/macro-assembler-mips.cc
181     mips/regexp-macro-assembler-mips.cc
182     mips/stub-cache-mips.cc
183     """),
184   'arch:ia32': Split("""
185     ia32/assembler-ia32.cc
186     ia32/builtins-ia32.cc
187     ia32/code-stubs-ia32.cc
188     ia32/codegen-ia32.cc
189     ia32/cpu-ia32.cc
190     ia32/debug-ia32.cc
191     ia32/deoptimizer-ia32.cc
192     ia32/disasm-ia32.cc
193     ia32/frames-ia32.cc
194     ia32/full-codegen-ia32.cc
195     ia32/ic-ia32.cc
196     ia32/lithium-codegen-ia32.cc
197     ia32/lithium-gap-resolver-ia32.cc
198     ia32/lithium-ia32.cc
199     ia32/macro-assembler-ia32.cc
200     ia32/regexp-macro-assembler-ia32.cc
201     ia32/stub-cache-ia32.cc
202     """),
203   'arch:x64': Split("""
204     x64/assembler-x64.cc
205     x64/builtins-x64.cc
206     x64/code-stubs-x64.cc
207     x64/codegen-x64.cc
208     x64/cpu-x64.cc
209     x64/debug-x64.cc
210     x64/deoptimizer-x64.cc
211     x64/disasm-x64.cc
212     x64/frames-x64.cc
213     x64/full-codegen-x64.cc
214     x64/ic-x64.cc
215     x64/lithium-codegen-x64.cc
216     x64/lithium-gap-resolver-x64.cc
217     x64/lithium-x64.cc
218     x64/macro-assembler-x64.cc
219     x64/regexp-macro-assembler-x64.cc
220     x64/stub-cache-x64.cc
221     """),
222   'simulator:arm': ['arm/simulator-arm.cc'],
223   'simulator:mips': ['mips/simulator-mips.cc'],
224   'os:freebsd': ['platform-freebsd.cc', 'platform-posix.cc'],
225   'os:openbsd': ['platform-openbsd.cc', 'platform-posix.cc'],
226   'os:linux':   ['platform-linux.cc', 'platform-posix.cc'],
227   'os:android': ['platform-linux.cc', 'platform-posix.cc'],
228   'os:macos':   ['platform-macos.cc', 'platform-posix.cc'],
229   'os:solaris': ['platform-solaris.cc', 'platform-posix.cc'],
230   'os:cygwin':  ['platform-cygwin.cc', 'platform-posix.cc'],
231   'os:nullos':  ['platform-nullos.cc'],
232   'os:win32':   ['platform-win32.cc', 'win32-math.cc'],
233   'mode:release': [],
234   'mode:debug': [
235     'objects-debug.cc', 'prettyprinter.cc', 'regexp-macro-assembler-tracer.cc'
236   ]
237 }
238
239
240 PREPARSER_SOURCES = {
241   'all': Split("""
242     allocation.cc
243     bignum.cc
244     bignum-dtoa.cc
245     cached-powers.cc
246     conversions.cc
247     diy-fp.cc
248     dtoa.cc
249     fast-dtoa.cc
250     fixed-dtoa.cc
251     preparse-data.cc
252     preparser.cc
253     preparser-api.cc
254     scanner.cc
255     strtod.cc
256     token.cc
257     unicode.cc
258     utils.cc
259     """),
260   'os:win32': ['win32-math.cc']
261 }
262
263
264 D8_LIGHT_FILES = {
265   'all': [
266     'd8.cc'
267   ]
268 }
269
270
271 D8_FULL_FILES = {
272   'all': [
273     'd8.cc', 'd8-debug.cc'
274   ],
275   'os:linux': [
276     'd8-posix.cc'
277   ],
278   'os:macos': [
279     'd8-posix.cc'
280   ],
281   'os:android': [
282     'd8-posix.cc'
283   ],
284   'os:freebsd': [
285     'd8-posix.cc'
286   ],
287   'os:openbsd': [
288     'd8-posix.cc'
289   ],
290   'os:solaris': [
291     'd8-posix.cc'
292   ],
293   'os:cygwin': [
294     'd8-posix.cc'
295   ],
296   'os:win32': [
297     'd8-windows.cc'
298   ],
299   'os:nullos': [
300     'd8-windows.cc'   # Empty implementation at the moment.
301   ],
302   'console:readline': [
303     'd8-readline.cc'
304   ]
305 }
306
307
308 LIBRARY_FILES = '''
309 runtime.js
310 v8natives.js
311 array.js
312 string.js
313 uri.js
314 math.js
315 messages.js
316 apinatives.js
317 date.js
318 regexp.js
319 json.js
320 liveedit-debugger.js
321 mirror-debugger.js
322 debug-debugger.js
323 '''.split()
324
325
326 EXPERIMENTAL_LIBRARY_FILES = '''
327 proxy.js
328 collection.js
329 '''.split()
330
331
332 def Abort(message):
333   print message
334   sys.exit(1)
335
336
337 def ConfigureObjectFiles():
338   env = Environment(tools=tools)
339   env.Replace(**context.flags['v8'])
340   context.ApplyEnvOverrides(env)
341   env['BUILDERS']['JS2C'] = Builder(action=js2c.JS2C)
342   env['BUILDERS']['Snapshot'] = Builder(action='$SOURCE $TARGET --logfile "$LOGFILE" --log-snapshot-positions')
343
344   def BuildJS2CEnv(type):
345     js2c_env = { 'TYPE': type, 'COMPRESSION': 'off' }
346     if 'COMPRESS_STARTUP_DATA_BZ2' in env['CPPDEFINES']:
347       js2c_env['COMPRESSION'] = 'bz2'
348     return js2c_env
349
350   # Build the standard platform-independent source files.
351   source_files = context.GetRelevantSources(SOURCES)
352   d8_js = env.JS2C('d8-js.cc', 'd8.js', **{'TYPE': 'D8', 'COMPRESSION': 'off'})
353   d8_js_obj = context.ConfigureObject(env, d8_js, CPPPATH=['.'])
354   if context.options['library'] == 'shared':
355     d8_files = context.GetRelevantSources(D8_LIGHT_FILES)
356     d8_objs = []
357   else:
358     d8_files = context.GetRelevantSources(D8_FULL_FILES)
359     d8_objs = [d8_js_obj]
360   d8_objs.append(context.ConfigureObject(d8_env, [d8_files]))
361
362   # Combine the JavaScript library files into a single C++ file and
363   # compile it.
364   library_files = [s for s in LIBRARY_FILES]
365   library_files.append('macros.py')
366   libraries_src = env.JS2C(
367     ['libraries.cc'], library_files, **BuildJS2CEnv('CORE'))
368   libraries_obj = context.ConfigureObject(env, libraries_src, CPPPATH=['.'])
369
370   # Combine the experimental JavaScript library files into a C++ file
371   # and compile it.
372   experimental_library_files = [ s for s in EXPERIMENTAL_LIBRARY_FILES ]
373   experimental_library_files.append('macros.py')
374   experimental_libraries_src = env.JS2C(['experimental-libraries.cc'],
375                                         experimental_library_files,
376                                         **BuildJS2CEnv('EXPERIMENTAL'))
377   experimental_libraries_obj = context.ConfigureObject(env, experimental_libraries_src, CPPPATH=['.'])
378
379   source_objs = context.ConfigureObject(env, source_files)
380   non_snapshot_files = [source_objs]
381
382   preparser_source_files = context.GetRelevantSources(PREPARSER_SOURCES)
383   preparser_objs = context.ConfigureObject(env, preparser_source_files)
384
385   # Create snapshot if necessary.  For cross compilation you should either
386   # do without snapshots and take the performance hit or you should build a
387   # host VM with the simulator=arm and snapshot=on options and then take the
388   # resulting snapshot.cc file from obj/release and put it in the src
389   # directory.  Then rebuild the VM with the cross compiler and specify
390   # snapshot=nobuild on the scons command line.
391   empty_snapshot_obj = context.ConfigureObject(env, 'snapshot-empty.cc')
392   mksnapshot_env = env.Copy()
393   mksnapshot_env.Replace(**context.flags['mksnapshot'])
394   mksnapshot_src = 'mksnapshot.cc'
395   mksnapshot = mksnapshot_env.Program('mksnapshot', [mksnapshot_src, libraries_obj, experimental_libraries_obj,  non_snapshot_files, empty_snapshot_obj], PDB='mksnapshot.exe.pdb')
396   if context.use_snapshot:
397     if context.build_snapshot:
398       snapshot_cc = env.Snapshot('snapshot.cc', mksnapshot, LOGFILE=File('snapshot.log').abspath)
399     else:
400       snapshot_cc = 'snapshot.cc'
401     snapshot_obj = context.ConfigureObject(env, snapshot_cc, CPPPATH=['.'])
402   else:
403     snapshot_obj = empty_snapshot_obj
404   library_objs = [non_snapshot_files, libraries_obj, experimental_libraries_obj, snapshot_obj]
405   return (library_objs, d8_objs, [mksnapshot], preparser_objs)
406
407
408 (library_objs, d8_objs, mksnapshot, preparser_objs) = ConfigureObjectFiles()
409 Return('library_objs d8_objs mksnapshot preparser_objs')