aboutsummaryrefslogtreecommitdiff
path: root/javascript/build.py
diff options
context:
space:
mode:
authorMark Haines <mark.haines@matrix.org>2015-06-23 17:50:30 +0100
committerMark Haines <mark.haines@matrix.org>2015-06-23 17:50:30 +0100
commit07072912cdf680766d8c36f6333b77f9aa4f027c (patch)
treed809adaa9555ed3bb280013a3ce0d93e4d5bda13 /javascript/build.py
parentf10c04d62d15cc42af4683c2020cf5dffe895bd2 (diff)
Add javascript bindings using emscripten
Diffstat (limited to 'javascript/build.py')
-rw-r--r--javascript/build.py69
1 files changed, 69 insertions, 0 deletions
diff --git a/javascript/build.py b/javascript/build.py
new file mode 100644
index 0000000..2b754e9
--- /dev/null
+++ b/javascript/build.py
@@ -0,0 +1,69 @@
+#! /usr/bin/python
+# Copyright 2015 OpenMarket Ltd
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import subprocess
+import glob
+import os
+import sys
+import re
+import json
+
+source_files = glob.glob("src/*.cpp")
+pre_js, = glob.glob("javascript/*pre.js")
+post_js, = glob.glob("javascript/*post.js")
+
+
+functions = set()
+RE_FUNCTION=re.compile("(axolotl_[^( ]*)\\(")
+with open("include/axolotl/axolotl.hh") as header:
+ for line in header:
+ match = RE_FUNCTION.search(line)
+ if match:
+ functions.add(match.groups()[0])
+
+
+exported_functions = os.path.abspath("build/exported_functions.json")
+with open(exported_functions, "w") as json_file:
+ json.dump(["_" + function for function in functions], json_file)
+
+
+emcc = os.environ.get("EMCC", "emcc")
+
+compile_args = [emcc]
+compile_args += """
+ -O3
+ -Iinclude
+ -Ilib
+ -std=c++11
+ --closure 1
+ --memory-init-file 0
+ -s NO_FILESYSTEM=1
+ -s NO_BROWSER=1
+ -s INVOKE_RUN=0
+""".split()
+compile_args += source_files
+compile_args += ("--pre-js", pre_js)
+compile_args += ("--post-js", post_js)
+compile_args += ("-s", "EXPORTED_FUNCTIONS=@" + exported_functions)
+
+library = "build/axolotl.js"
+
+def run(args):
+ print args
+ print " ".join(args)
+ subprocess.check_call(args)
+
+run(compile_args + ["-o", library])
+