Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Side by Side Diff: compile

Issue 29333474: Issue 4125 - [emscripten] Convert filter classes to C++ (Closed)
Patch Set: Reworked JS binding generation Created Feb. 1, 2016, 9:14 p.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 #!/usr/bin/env python
2
3 import json
4 import os
5 import re
6 import subprocess
7 import warnings
8
9 EMSCRIPTEN_PATH = '../emscripten'
10 SOURCE_DIR = './compiled'
11 SOURCE_FILES = [
12 os.path.join(SOURCE_DIR, f)
13 for f in os.listdir(SOURCE_DIR)
14 if f.endswith('.cpp')
15 ]
16 BINDINGS_FILE = os.path.join(SOURCE_DIR, 'bindings.cpp')
17 BINDINGS_GENERATOR = os.path.join(SOURCE_DIR, 'bindings.cpp.js')
18 BINDINGS_OUTPUT = os.path.join(SOURCE_DIR, 'bindings.js')
19 COMPILER_OUTPUT = './lib/compiled.js'
20 GENERATION_PARAMS = {
21 'SHELL_FILE': "'%s'" % os.path.abspath(os.path.join(SOURCE_DIR, 'shell.js')),
22 'ASM_JS': 2, # "almost asm"
23 'TOTAL_MEMORY': 16*1024*1024,
24 'TOTAL_STACK': 1*1024*1024,
25 'ALLOW_MEMORY_GROWTH': 1,
26 'NO_EXIT_RUNTIME': 1,
27 'DISABLE_EXCEPTION_CATCHING': 0,
28 'NO_DYNAMIC_EXECUTION': 1,
29 'NO_BROWSER': 1,
30 'NO_FILESYSTEM': 1,
31 'INVOKE_RUN': 0,
32 'NODE_STDOUT_FLUSH_WORKAROUND': 0,
33 }
34 DEFINES = []
35 ADDITIONAL_PARAMS = ['-O3', '-m32', '-std=gnu++14', '--memory-init-file', '0',
36 '--emit-symbol-map']
37
38 def getenv():
39 path = []
40 env = {}
41 output = subprocess.check_output([
42 '/bin/sh', '-c', os.path.join(EMSCRIPTEN_PATH, 'emsdk_env.sh')])
43 for line in output.splitlines():
44 match = re.search(r'^\s*PATH\s*\+=\s*(.*)', line)
45 if match:
46 path.append(match.group(1))
47 match = re.search(r'^\s*(\w+)\s*=\s*(.*)', line)
48 if match:
49 env[match.group(1)] = match.group(2)
50 env['PATH'] = ':'.join([os.environ['PATH']] + path)
51 return env
52
53 def generate_bindings(env):
54 params = [os.path.join(env['EMSCRIPTEN'], 'emcc'), BINDINGS_FILE,
55 '-o', BINDINGS_GENERATOR, '-std=gnu++14', '-DPRINT_BINDINGS',
56 '-s', 'SAFE_HEAP=1', '-s', 'WARN_ON_UNDEFINED_SYMBOLS=0',
57 ]
58 subprocess.check_call(params, env=env)
59
60 node = subprocess.check_output('which node', env=env, shell=True).strip();
61 with open(BINDINGS_OUTPUT, 'w') as file:
62 subprocess.check_call([node, BINDINGS_GENERATOR], env=env, stdout=file)
63
64 def run_compiler(env):
65 params = [
66 os.path.join(env['EMSCRIPTEN'], 'emcc'),
67 '-o', COMPILER_OUTPUT,
68 '--post-js', BINDINGS_OUTPUT,
69 ]
70 params.extend(SOURCE_FILES)
71 params.extend('-D' + flag for flag in DEFINES)
72 for key, value in GENERATION_PARAMS.iteritems():
73 params.extend(['-s', '%s=%s' % (key, str(value))])
74 params.extend(ADDITIONAL_PARAMS)
75 subprocess.check_call(params, env=env)
76
77 if __name__ == '__main__':
78 env = getenv()
79 generate_bindings(env)
80 run_compiler(env)
OLDNEW
« no previous file with comments | « .hgignore ('k') | compiled/ActiveFilter.h » ('j') | compiled/ElemHideBase.cpp » ('J')

Powered by Google App Engine
This is Rietveld