From f872f2d456921df1c2b256b9c448031371d8a713 Mon Sep 17 00:00:00 2001 From: Rasmus Date: Fri, 2 Sep 2016 13:41:08 -0700 Subject: Improvements to build-js.sh and JS API (#679) * Adds command-line argument to build-js.sh for specifying the location of Emscripten. Also spreads out program arguments on separate lines * Exposes WasmBinaryWriter and BufferWithRandomAccess in the JS API to allow writing WASM modules and access the produced bytes via the JS API * Updates bin/binaryen.js and bin/wasm.js from changes to build-js.sh * Adds exclude patterns to .gitignore for some files generated by build-js.sh and .DS_Store for macOS * Changes build-js.sh to use EMSCRIPTEN env var instead of a command-line argument to provide the path to emscripten * Improvements to JS builds - Adds -g flag to build-js.sh that will build unoptimized and unmangled versions of binaryen.js and wasm.js (output has a "-g.js" suffix to allow co-existence with regular optimized builds). - Enables closure compiler for non-debug builds - Adds browser test for s-expression parser + WASM code gen (requires wasm to be enabled in the browser.) - Adds iterator interface to BufferWithRandomAccess (when Symbol.iterator is available) - Adds toArrayBuffer to BufferWithRandomAccess (when TypedArray is available) - Adds compileWast(sourceText :string) :ArrayBuffer to the module, parsing & compiling s-expression code to a WASM module - Changes the way binaryen.js is exported to allow usage in CommonJS, AMD and UMD envionments. * Expose "Binaryen" global in a better way to work with a.js generated by check.py * Fix to binaryen.js to only export a global variable when running the test (a.js) while inside a module (avoids polluting global in e.g. nodejs). Also fixes a spelling mistake. * Better "no WASM detected" message in test/binaryen.js/browser.html * Small change to error message in build-js.sh where $EMSCRIPTEN does not point to a directory * Changes emcc args in build-js.sh after investingating a large number of argument combinations. Also adds a browser benchmark. The result of emcc arguments and the effect on performance is summarized in this doc: https://gist.github.com/rsms/e33c61a25a31c08260161a087be03169 * Enable inferring emscripten path by looking in PATH when EMSCRIPTEN is not set in env --- src/js/binaryen.js-post.js | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 src/js/binaryen.js-post.js (limited to 'src/js/binaryen.js-post.js') diff --git a/src/js/binaryen.js-post.js b/src/js/binaryen.js-post.js new file mode 100644 index 000000000..7389f5afe --- /dev/null +++ b/src/js/binaryen.js-post.js @@ -0,0 +1,29 @@ +return Module; +}; +if (typeof exports != 'undefined') { + (function(){ + var a = Binaryen(); + if (typeof module === 'object') { + module.exports = a; + } else { + for (var k in a) { + exports[k] = a[k]; + } + } + })(); +} +(typeof window !== 'undefined' ? window : + typeof global !== 'undefined' && ( + typeof process === 'undefined' || + + // Note: We must export "Binaryen" even inside a CommonJS/AMD/UMD module + // space because check.py generates a.js which requires Binaryen global var + ( process.argv && + Array.isArray(process.argv) && + process.argv[1] && + process.argv[1].substr(-5) === '/a.js' + ) + + ) ? global : + this +)['Binaryen'] = Binaryen; -- cgit v1.2.3