From 2c6f442fe58bfddc0736312ce107a5cbf6179b13 Mon Sep 17 00:00:00 2001 From: Alon Zakai Date: Sat, 5 Mar 2016 10:52:02 -0800 Subject: add spidermonkify script --- scripts/spidermonkify.py | 56 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 scripts/spidermonkify.py (limited to 'scripts/spidermonkify.py') diff --git a/scripts/spidermonkify.py b/scripts/spidermonkify.py new file mode 100644 index 000000000..6ac04e006 --- /dev/null +++ b/scripts/spidermonkify.py @@ -0,0 +1,56 @@ +''' +A bunch of hackish fixups for testing of SpiderMonkey support. We should +get rid of these ASAP. +''' + +import os, sys, math, shutil, subprocess + +import emscripten + +binaryen_root = os.path.abspath(os.path.dirname(os.path.dirname(__file__))) + +js_target = sys.argv[1] +wast_target = sys.argv[2] + +wasm_target = wast_target[:-5] + '.wasm' + +base_wast_target = os.path.basename(wast_target) +base_wasm_target = os.path.basename(wasm_target) + +def fix(js, before, after): + assert js.count(before) == 1 + return js.replace(before, after) + +# fix up js +js = open(js_target).read() +# send a buffer into wasm methods, not a typed array +js = fix(js, 'instance = Wasm.instantiateModule(binary, info)', 'instance = Wasm.instantiateModule(binary.buffer, info)') +# use the wasm, not wast +js = js.replace('"' + base_wast_target + '"', '"' + base_wasm_target + '"') +js = js.replace("'" + base_wast_target + "'", "'" + base_wasm_target + "'") +open(js_target, 'w').write(js) + +# lower cases, spidermonkey has no support for them +temp = wast_target + '.temp' +subprocess.check_call([os.path.join(binaryen_root, 'bin', 'binaryen-shell'), wast_target, '--lower-case', '--print'], stdout=open(temp, 'w')) +shutil.copyfile(temp, wast_target) + +# fix up wast +wast = open(wast_target).read() +# tableswitch => br_table +wast = wast.replace('(tableswitch', '(br_table') +# memory to page sizes +PAGE_SIZE = 64 * 1024 +memory_start = wast.find('(memory') + 1 +memory_end = wast.find(')', memory_start) +memory = wast[memory_start:memory_end] +parts = memory.split(' ') +parts[1] = str(int(math.ceil(float(parts[1]) / PAGE_SIZE))) +if len(parts) == 3: + parts[2] = str(int(math.ceil(float(parts[2]) / PAGE_SIZE))) +wast = wast[:memory_start] + ' '.join(parts) + wast[memory_end:] +open(wast_target, 'w').write(wast) + +# convert to binary using spidermonkey +subprocess.check_call(emscripten.shared.SPIDERMONKEY_ENGINE + ['-e', 'os.file.writeTypedArrayToFile("%s", new Uint8Array(wasmTextToBinary(os.file.readFile("%s"))))' % (wasm_target, wast_target)]) + -- cgit v1.2.3 From bb4c679ebd25594c1efa797ec2d643c15abc4fa7 Mon Sep 17 00:00:00 2001 From: Alon Zakai Date: Sat, 5 Mar 2016 11:46:25 -0800 Subject: spidermonkify improvements, enough for -O1 hello world to work --- scripts/spidermonkify.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'scripts/spidermonkify.py') diff --git a/scripts/spidermonkify.py b/scripts/spidermonkify.py index 6ac04e006..0af169d77 100644 --- a/scripts/spidermonkify.py +++ b/scripts/spidermonkify.py @@ -29,6 +29,7 @@ js = fix(js, 'instance = Wasm.instantiateModule(binary, info)', 'instance = Wasm js = js.replace('"' + base_wast_target + '"', '"' + base_wasm_target + '"') js = js.replace("'" + base_wast_target + "'", "'" + base_wasm_target + "'") open(js_target, 'w').write(js) +shutil.copyfile(wast_target + '.mappedGlobals', wasm_target + '.mappedGlobals') # lower cases, spidermonkey has no support for them temp = wast_target + '.temp' @@ -48,7 +49,7 @@ parts = memory.split(' ') parts[1] = str(int(math.ceil(float(parts[1]) / PAGE_SIZE))) if len(parts) == 3: parts[2] = str(int(math.ceil(float(parts[2]) / PAGE_SIZE))) -wast = wast[:memory_start] + ' '.join(parts) + wast[memory_end:] +wast = wast[:memory_start] + ' '.join(parts) + wast[memory_end:memory_end+1] + ' (export "memory" memory) ' + wast[memory_end+1:] open(wast_target, 'w').write(wast) # convert to binary using spidermonkey -- cgit v1.2.3 From d8232efb1664c162f834a3d540d8bbefb7035ec0 Mon Sep 17 00:00:00 2001 From: Alon Zakai Date: Sat, 5 Mar 2016 16:35:18 -0800 Subject: python formatting --- scripts/spidermonkify.py | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) (limited to 'scripts/spidermonkify.py') diff --git a/scripts/spidermonkify.py b/scripts/spidermonkify.py index 0af169d77..2e2da10bd 100644 --- a/scripts/spidermonkify.py +++ b/scripts/spidermonkify.py @@ -3,7 +3,11 @@ A bunch of hackish fixups for testing of SpiderMonkey support. We should get rid of these ASAP. ''' -import os, sys, math, shutil, subprocess +import os +import sys +import math +import shutil +import subprocess import emscripten @@ -24,7 +28,9 @@ def fix(js, before, after): # fix up js js = open(js_target).read() # send a buffer into wasm methods, not a typed array -js = fix(js, 'instance = Wasm.instantiateModule(binary, info)', 'instance = Wasm.instantiateModule(binary.buffer, info)') +js = fix(js, + 'instance = Wasm.instantiateModule(binary, info)', + 'instance = Wasm.instantiateModule(binary.buffer, info)') # use the wasm, not wast js = js.replace('"' + base_wast_target + '"', '"' + base_wasm_target + '"') js = js.replace("'" + base_wast_target + "'", "'" + base_wasm_target + "'") @@ -33,7 +39,9 @@ shutil.copyfile(wast_target + '.mappedGlobals', wasm_target + '.mappedGlobals') # lower cases, spidermonkey has no support for them temp = wast_target + '.temp' -subprocess.check_call([os.path.join(binaryen_root, 'bin', 'binaryen-shell'), wast_target, '--lower-case', '--print'], stdout=open(temp, 'w')) +subprocess.check_call([os.path.join(binaryen_root, 'bin', 'binaryen-shell'), + wast_target, '--lower-case', '--print'], + stdout=open(temp, 'w')) shutil.copyfile(temp, wast_target) # fix up wast @@ -49,9 +57,12 @@ parts = memory.split(' ') parts[1] = str(int(math.ceil(float(parts[1]) / PAGE_SIZE))) if len(parts) == 3: parts[2] = str(int(math.ceil(float(parts[2]) / PAGE_SIZE))) -wast = wast[:memory_start] + ' '.join(parts) + wast[memory_end:memory_end+1] + ' (export "memory" memory) ' + wast[memory_end+1:] +wast = wast[:memory_start] + ' '.join(parts) + wast[memory_end:memory_end+1] + \ + ' (export "memory" memory) ' + wast[memory_end+1:] open(wast_target, 'w').write(wast) # convert to binary using spidermonkey -subprocess.check_call(emscripten.shared.SPIDERMONKEY_ENGINE + ['-e', 'os.file.writeTypedArrayToFile("%s", new Uint8Array(wasmTextToBinary(os.file.readFile("%s"))))' % (wasm_target, wast_target)]) +subprocess.check_call(emscripten.shared.SPIDERMONKEY_ENGINE + ['-e', + 'os.file.writeTypedArrayToFile("%s", new Uint8Array(wasmTextToBinary(os.file.readFile("%s"))))' % (wasm_target, wast_target) +]) -- cgit v1.2.3 From d1b8d2fc754aca8e4313e28d6440d0ebe958e804 Mon Sep 17 00:00:00 2001 From: Alon Zakai Date: Sat, 5 Mar 2016 16:48:03 -0800 Subject: more python fixes --- scripts/spidermonkify.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'scripts/spidermonkify.py') diff --git a/scripts/spidermonkify.py b/scripts/spidermonkify.py index 2e2da10bd..992e7d48d 100644 --- a/scripts/spidermonkify.py +++ b/scripts/spidermonkify.py @@ -21,6 +21,7 @@ wasm_target = wast_target[:-5] + '.wasm' base_wast_target = os.path.basename(wast_target) base_wasm_target = os.path.basename(wasm_target) + def fix(js, before, after): assert js.count(before) == 1 return js.replace(before, after) @@ -57,8 +58,9 @@ parts = memory.split(' ') parts[1] = str(int(math.ceil(float(parts[1]) / PAGE_SIZE))) if len(parts) == 3: parts[2] = str(int(math.ceil(float(parts[2]) / PAGE_SIZE))) -wast = wast[:memory_start] + ' '.join(parts) + wast[memory_end:memory_end+1] + \ - ' (export "memory" memory) ' + wast[memory_end+1:] +wast = wast[:memory_start] + ' '.join(parts) + \ + wast[memory_end:memory_end + 1] + \ + ' (export "memory" memory) ' + wast[memory_end + 1:] open(wast_target, 'w').write(wast) # convert to binary using spidermonkey -- cgit v1.2.3 From 198ddd04e5c464839448fdfa9fc5dcf0faac13c6 Mon Sep 17 00:00:00 2001 From: Alon Zakai Date: Sat, 5 Mar 2016 16:57:40 -0800 Subject: more python fixes --- scripts/spidermonkify.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'scripts/spidermonkify.py') diff --git a/scripts/spidermonkify.py b/scripts/spidermonkify.py index 992e7d48d..bca6458f7 100644 --- a/scripts/spidermonkify.py +++ b/scripts/spidermonkify.py @@ -59,12 +59,12 @@ parts[1] = str(int(math.ceil(float(parts[1]) / PAGE_SIZE))) if len(parts) == 3: parts[2] = str(int(math.ceil(float(parts[2]) / PAGE_SIZE))) wast = wast[:memory_start] + ' '.join(parts) + \ - wast[memory_end:memory_end + 1] + \ - ' (export "memory" memory) ' + wast[memory_end + 1:] + wast[memory_end:memory_end + 1] + \ + ' (export "memory" memory) ' + wast[memory_end + 1:] open(wast_target, 'w').write(wast) # convert to binary using spidermonkey -subprocess.check_call(emscripten.shared.SPIDERMONKEY_ENGINE + ['-e', - 'os.file.writeTypedArrayToFile("%s", new Uint8Array(wasmTextToBinary(os.file.readFile("%s"))))' % (wasm_target, wast_target) -]) - +subprocess.check_call(emscripten.shared.SPIDERMONKEY_ENGINE + + ['-e', 'os.file.writeTypedArrayToFile("' + wasm_target + \ + '", new Uint8Array(wasmTextToBinary(os.file.readFile("' + \ + wast_target + '"))))']) -- cgit v1.2.3 From 8f16bf557b9bc261b10aeee9aafd544ff2c1e082 Mon Sep 17 00:00:00 2001 From: Alon Zakai Date: Sun, 6 Mar 2016 16:35:28 -0800 Subject: no need for .buffer for instantiateModule --- scripts/spidermonkify.py | 4 ---- 1 file changed, 4 deletions(-) (limited to 'scripts/spidermonkify.py') diff --git a/scripts/spidermonkify.py b/scripts/spidermonkify.py index bca6458f7..b8adcf77b 100644 --- a/scripts/spidermonkify.py +++ b/scripts/spidermonkify.py @@ -28,10 +28,6 @@ def fix(js, before, after): # fix up js js = open(js_target).read() -# send a buffer into wasm methods, not a typed array -js = fix(js, - 'instance = Wasm.instantiateModule(binary, info)', - 'instance = Wasm.instantiateModule(binary.buffer, info)') # use the wasm, not wast js = js.replace('"' + base_wast_target + '"', '"' + base_wasm_target + '"') js = js.replace("'" + base_wast_target + "'", "'" + base_wasm_target + "'") -- cgit v1.2.3 From 60bfb02f752e6d7383f077e892b8c10096c40824 Mon Sep 17 00:00:00 2001 From: Alon Zakai Date: Mon, 7 Mar 2016 10:32:21 -0800 Subject: remove temp file --- scripts/spidermonkify.py | 1 + 1 file changed, 1 insertion(+) (limited to 'scripts/spidermonkify.py') diff --git a/scripts/spidermonkify.py b/scripts/spidermonkify.py index b8adcf77b..9851f6d25 100644 --- a/scripts/spidermonkify.py +++ b/scripts/spidermonkify.py @@ -40,6 +40,7 @@ subprocess.check_call([os.path.join(binaryen_root, 'bin', 'binaryen-shell'), wast_target, '--lower-case', '--print'], stdout=open(temp, 'w')) shutil.copyfile(temp, wast_target) +os.remove(temp) # fix up wast wast = open(wast_target).read() -- cgit v1.2.3