From ec118748fe11013e73f53e4918c32668519c5d04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jukka=20Jyl=C3=A4nki?= <jujjyl@gmail.com> Date: Tue, 29 Jul 2014 16:37:21 +0300 Subject: [PATCH 01/30] Add support to emrun to receive binary file dumps, and add a JS function emrun_file_dump() when building with --emrun that performs a data dump back to server. Used e.g. to debug issue #1826. --- emrun | 72 ++++++++++++++++++++++++---------------- src/emrun_postjs.js | 9 +++++ tests/hello_world_exit.c | 11 ++++-- 3 files changed, 61 insertions(+), 31 deletions(-) diff --git a/emrun b/emrun index e3596eed76e17..353021a0450e4 100755 --- a/emrun +++ b/emrun @@ -365,38 +365,51 @@ class HTTPHandler(SimpleHTTPServer.SimpleHTTPRequestHandler): global page_exit_code, emrun_options, have_received_messages (_, _, path, query, _) = urlparse.urlsplit(self.path) - data = self.rfile.read(int(self.headers['Content-Length'])) - data = data.replace("+", " ") - data = unquote_u(data) - - # The user page sent a message with POST. Parse the message and log it to stdout/stderr. - is_stdout = False - is_stderr = False - seq_num = -1 - # The html shell is expected to send messages of form ^out^(number)^(message) or ^err^(number)^(message). - if data.startswith('^err^'): - is_stderr = True - elif data.startswith('^out^'): - is_stdout = True - if is_stderr or is_stdout: + if query.startswith('file='): # Binary file dump/upload handling. Requests to "stdio.html?file=filename" will write binary data to the given file. + data = self.rfile.read(int(self.headers['Content-Length'])) + filename = query[len('file='):] + dump_out_directory = 'dump_out' try: - i = data.index('^', 5) - seq_num = int(data[5:i]) - data = data[i+1:] + os.mkdir(dump_out_directory) except: pass - - is_exit = data.startswith('^exit^') - - if data == '^pageload^': # Browser is just notifying that it has successfully launched the page. + filename = os.path.join(dump_out_directory, os.path.normpath(filename)) + open(filename, 'wb').write(data) + print 'Wrote ' + str(len(data)) + ' bytes to file "' + filename + '".' have_received_messages = True - elif not is_exit: - log = browser_loge if is_stderr else browser_logi - self.server.handle_incoming_message(seq_num, log, data) - elif not emrun_options.serve_after_exit: - page_exit_code = int(data[6:]) - logv('Web page has quit with a call to exit() with return code ' + str(page_exit_code) + '. Shutting down web server. Pass --serve_after_exit to keep serving even after the page terminates with exit().') - self.server.shutdown() + else: + data = self.rfile.read(int(self.headers['Content-Length'])) + data = data.replace("+", " ") + data = unquote_u(data) + + # The user page sent a message with POST. Parse the message and log it to stdout/stderr. + is_stdout = False + is_stderr = False + seq_num = -1 + # The html shell is expected to send messages of form ^out^(number)^(message) or ^err^(number)^(message). + if data.startswith('^err^'): + is_stderr = True + elif data.startswith('^out^'): + is_stdout = True + if is_stderr or is_stdout: + try: + i = data.index('^', 5) + seq_num = int(data[5:i]) + data = data[i+1:] + except: + pass + + is_exit = data.startswith('^exit^') + + if data == '^pageload^': # Browser is just notifying that it has successfully launched the page. + have_received_messages = True + elif not is_exit: + log = browser_loge if is_stderr else browser_logi + self.server.handle_incoming_message(seq_num, log, data) + elif not emrun_options.serve_after_exit: + page_exit_code = int(data[6:]) + logv('Web page has quit with a call to exit() with return code ' + str(page_exit_code) + '. Shutting down web server. Pass --serve_after_exit to keep serving even after the page terminates with exit().') + self.server.shutdown() self.send_response(200) self.send_header("Content-type", "text/plain") @@ -930,7 +943,8 @@ def main(): if options.serve_root: serve_dir = os.path.abspath(options.serve_root) else: - serve_dir = os.path.dirname(os.path.abspath(file_to_serve)) + if file_to_serve == '.': serve_dir = os.path.abspath(file_to_serve) + else: serve_dir = os.path.dirname(os.path.abspath(file_to_serve)) url = os.path.relpath(os.path.abspath(file_to_serve), serve_dir) if len(cmdlineparams) > 0: url += '?' + '&'.join(cmdlineparams) diff --git a/src/emrun_postjs.js b/src/emrun_postjs.js index 9d84e761cdece..8bcea9a99e94a 100644 --- a/src/emrun_postjs.js +++ b/src/emrun_postjs.js @@ -18,3 +18,12 @@ function emrun_register_handlers() { post('^pageload^'); } emrun_register_handlers(); + +// POSTs the given binary data represented as a (typed) array data back to the emrun-based web server. +// To use from C code, call e.g. EM_ASM_({emrun_file_dump("file.dat", HEAPU8.subarray($0, $0 + $1));}, my_data_pointer, my_data_pointer_byte_length); +function emrun_file_dump(filename, data) { + var http = new XMLHttpRequest(); + Module['print']('Dumping out file "' + filename + '" with ' + data.length + ' bytes of data.'); + http.open("POST", "stdio.html?file=" + filename, true); + http.send(data); +} diff --git a/tests/hello_world_exit.c b/tests/hello_world_exit.c index 8932caf2dc6af..1c72f2d1d57b7 100644 --- a/tests/hello_world_exit.c +++ b/tests/hello_world_exit.c @@ -1,15 +1,22 @@ -#include<stdio.h> -#include<stdlib.h> +#include <stdio.h> +#include <stdlib.h> +#include <emscripten.h> int main(int argc, char **argv) { printf("argc: %d\n", argc); for(int i = 0; i < argc; ++i) { printf("argv[%d]: %s\n", i, argv[i]); } + + // Dump a file to local filesystem with emrun. + EM_ASM(emrun_file_dump("test.dat", HEAPU8.subarray(0, 128));); + EM_ASM(emrun_file_dump("heap.dat", HEAPU8)); + if (argc <= 1) exit(1); printf("hello, world!\n"); fprintf(stderr, "hello, error stream!\n"); + exit(100); } From 797656ac43f6d998e5d6ccd4bd1c58b55f9527e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jukka=20Jyl=C3=A4nki?= <jujjyl@gmail.com> Date: Tue, 29 Jul 2014 16:40:10 +0300 Subject: [PATCH 02/30] Fix the reference image sdl_canvas_alpha.png. The previous image was an example of broken rendering: the test does (additive) alpha blending, and in the previous image some of the pixel components wrapped around to show green color artifacts. Fixes #1826. --- tests/sdl_canvas_alpha.png | Bin 169826 -> 79042 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/tests/sdl_canvas_alpha.png b/tests/sdl_canvas_alpha.png index fb9d61651fa5ff92903cbade5b5b37c34b06427f..7fdcd211ca18bed58d403a9593ed5a912b0ceff8 100644 GIT binary patch literal 79042 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%0Ae3_+AXOy1B3E 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 literal 169826 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ξ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 From 95ac2f37fb211d511573d3c20d6385c051d3f91e Mon Sep 17 00:00:00 2001 From: Alon Zakai <alonzakai@gmail.com> Date: Tue, 29 Jul 2014 13:48:24 -0700 Subject: [PATCH 03/30] increase slack on test_sdl_canvas_alpha --- tests/test_browser.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_browser.py b/tests/test_browser.py index 281e5852fe991..ea257f4c1e4ff 100644 --- a/tests/test_browser.py +++ b/tests/test_browser.py @@ -756,7 +756,7 @@ def test_glgears_proxy_jstarget(self): self.run_browser('test.html', None, '/report_result?0') def test_sdl_canvas_alpha(self): - self.btest('sdl_canvas_alpha.c', reference='sdl_canvas_alpha.png', reference_slack=9) + self.btest('sdl_canvas_alpha.c', reference='sdl_canvas_alpha.png', reference_slack=11) def test_sdl_key(self): for defines in [[], ['-DTEST_EMSCRIPTEN_SDL_SETEVENTHANDLER']]: From eb5c40d8f07fffbe03c42cb06142c67b79618fcc Mon Sep 17 00:00:00 2001 From: Lu Wang <coolwanglu@gmail.com> Date: Mon, 28 Jul 2014 17:10:42 -0700 Subject: [PATCH 04/30] implement emscripten_wget fix comment better comments for emscripten_wget better comments for emscripten_wget comments test_case for emscripten_wget --- src/library_browser.js | 21 +++++++++++++++++++++ src/settings.js | 4 ++-- system/include/emscripten/emscripten.h | 23 ++++++++++++++++++----- tests/test_browser.py | 4 ++++ tests/test_wget.c | 25 +++++++++++++++++++++++++ 5 files changed, 70 insertions(+), 7 deletions(-) create mode 100644 tests/test_wget.c diff --git a/src/library_browser.js b/src/library_browser.js index 41ccf8fac693a..ac5e9c2473dc9 100644 --- a/src/library_browser.js +++ b/src/library_browser.js @@ -676,6 +676,27 @@ mergeInto(LibraryManager.library, { } }, +#if ASYNCIFY + emscripten_wget__deps: ['emscripten_async_resume'], + emscripten_wget: function(url, file) { + var _url = Pointer_stringify(url); + var _file = Pointer_stringify(file); + asm.setAsync(); + Module['noExitRuntime'] = true; + FS.createPreloadedFile( + PATH.dirname(_file), + PATH.basename(_file), + _url, true, true, + _emscripten_async_resume, + _emscripten_async_resume + ); + }, +#else + emscripten_wget: function(url, file) { + throw 'Please compile your program with -s ASYNCIFY=1 in order to use asynchronous operations like emscripten_wget'; + }, +#endif + emscripten_async_wget: function(url, file, onload, onerror) { var _url = Pointer_stringify(url); var _file = Pointer_stringify(file); diff --git a/src/settings.js b/src/settings.js index 2c98062c7d865..3f55d5c3235d3 100644 --- a/src/settings.js +++ b/src/settings.js @@ -297,8 +297,8 @@ var EXCEPTION_CATCHING_WHITELIST = []; // Enables catching exception in the lis var ASYNCIFY = 0; // Whether to enable asyncify transformation // This allows to inject some async functions to the C code that appear to be sync // e.g. emscripten_sleep -var ASYNCIFY_FUNCTIONS = ['emscripten_sleep']; // Functions that call any funcion in the list, directly or indirectly - // will be transfromed +var ASYNCIFY_FUNCTIONS = ['emscripten_sleep', // Functions that call any funcion in the list, directly or indirectly + 'emscripten_wget']; // will be transfromed var ASYNCIFY_WHITELIST = ['qsort', // Functions in this list are never considered async, even if they appear in ASYNCIFY_FUNCTIONS 'trinkle', // In the asyncify transformation, any function that calls a function pointer is considered async '__toread', // This whitelist is useful when a function is known to be sync diff --git a/system/include/emscripten/emscripten.h b/system/include/emscripten/emscripten.h index e54ad9c891ab1..b1a4e10ff782b 100644 --- a/system/include/emscripten/emscripten.h +++ b/system/include/emscripten/emscripten.h @@ -382,11 +382,24 @@ float emscripten_random(void); */ /* - * Load file from url in asynchronous way. In addition to - * fetching the URL from the network, the contents are - * prepared so that the data is usable in IMG_Load and - * so forth (we asynchronously do the work to make the - * browser decode the image or audio and so forth). + * Load file from url in *synchronous* way, for the asynchronous + * version, see the emscripten_async_wget function below. + * + * In addition to fetching the URL from the network, + * the contents are prepared so that the data is usable + * in IMG_Load and * so forth. + * + * This function is blocking, it won't return until all + * operations are finished. You can then open and read + * the file if it succeeded. + * + * To use this function, you will need to compile your + * application with the linker flag `-s ASYNCIFY=1` + */ +void emscripten_wget(const char* url, const char* file); + +/* + * Asynchronous version of emscripten_wget. * When file is ready then 'onload' callback will called. * If any error occurred 'onerror' will called. * The callbacks are called with the file as their argument. diff --git a/tests/test_browser.py b/tests/test_browser.py index ea257f4c1e4ff..68975ab92949c 100644 --- a/tests/test_browser.py +++ b/tests/test_browser.py @@ -1947,3 +1947,7 @@ def test_codemods(self): self.btest(path_from_root('tests', 'codemods.cpp'), expected='121378', args=[opts, '--shell-file', 'shell.html', '--js-transform', fixer, '-s', 'PRECISE_F32=1']) # proper polyfill was enstated, then it was replaced by the fix so 0 is returned all the time, hence a different result here self.btest(path_from_root('tests', 'codemods.cpp'), expected='2', args=[opts, '--shell-file', 'shell.html', '--js-transform', fixer, '-s', 'PRECISE_F32=2']) # we should remove the calls to the polyfill ENTIRELY here, on the clientside, so we should NOT see any calls to fround here, and result should be like double + def test_wget(self): + with open(os.path.join(self.get_dir(), 'test.txt'), 'w') as f: + f.write('emscripten'); + self.btest(path_from_root('tests', 'test_wget.c'), expected='1', args=['-s', 'ASYNCIFY=1']) diff --git a/tests/test_wget.c b/tests/test_wget.c new file mode 100644 index 0000000000000..824f69d742e3f --- /dev/null +++ b/tests/test_wget.c @@ -0,0 +1,25 @@ +#include <stdio.h> +#include <ctype.h> +#include <string.h> +#include <emscripten.h> + +int main() +{ + const char * file = "/test.txt"; + emscripten_wget(file , file); + FILE * f = fopen(file, "r"); + int result = 0; + if(f) { +#define BUFSIZE 1024 + char buf[BUFSIZE]; + fgets(buf, BUFSIZE, f); + buf[BUFSIZE-1] = 0; + for(int i = 0; i < BUFSIZE; ++i) + buf[i] = tolower(buf[i]); + if(strstr(buf, "emscripten")) + result = 1; + fclose(f); + } + REPORT_RESULT(); + return 0; +} From 11c164abc83c180d770ca5a87546f0e85f56b475 Mon Sep 17 00:00:00 2001 From: Lu Wang <coolwanglu@gmail.com> Date: Tue, 29 Jul 2014 15:28:39 -0700 Subject: [PATCH 05/30] remove an extra semisolon --- tests/test_browser.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_browser.py b/tests/test_browser.py index 68975ab92949c..65cec3e504f9d 100644 --- a/tests/test_browser.py +++ b/tests/test_browser.py @@ -1949,5 +1949,5 @@ def test_codemods(self): def test_wget(self): with open(os.path.join(self.get_dir(), 'test.txt'), 'w') as f: - f.write('emscripten'); + f.write('emscripten') self.btest(path_from_root('tests', 'test_wget.c'), expected='1', args=['-s', 'ASYNCIFY=1']) From 9e03e75bdb9e87affa9771b2adbed35192c76d85 Mon Sep 17 00:00:00 2001 From: Alon Zakai <alonzakai@gmail.com> Date: Tue, 29 Jul 2014 15:11:03 -0700 Subject: [PATCH 06/30] EMCC_BUILD_DIR env var, to let js compiler know where we are building --- tests/test_other.py | 10 ++++++++++ tools/jsrun.py | 16 ++++++++++------ 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/tests/test_other.py b/tests/test_other.py index b3f6954b77fc3..116775f7f92c2 100644 --- a/tests/test_other.py +++ b/tests/test_other.py @@ -2379,6 +2379,16 @@ def test_quoted_js_lib_key(self): Popen([PYTHON, EMCC, path_from_root('tests', 'hello_world.cpp'), '--js-library', 'lib.js']).communicate() self.assertContained('hello, world!', run_js(os.path.join(self.get_dir(), 'a.out.js'))) + def test_EMCC_BUILD_DIR(self): + # EMCC_BUILD_DIR env var contains the dir we were building in, when running the js compiler (e.g. when + # running a js library). We force the cwd to be src/ for technical reasons, so this lets you find out + # where you were. + open('lib.js', 'w').write(r''' +printErr('dir was ' + process.env.EMCC_BUILD_DIR); +''') + out, err = Popen([PYTHON, EMCC, path_from_root('tests', 'hello_world.cpp'), '--js-library', 'lib.js'], stderr=PIPE).communicate() + self.assertContained('dir was ' + self.get_dir(), err) + def test_float_h(self): process = Popen([PYTHON, EMCC, path_from_root('tests', 'float+.c')], stdout=PIPE, stderr=PIPE) out, err = process.communicate() diff --git a/tools/jsrun.py b/tools/jsrun.py index 6b7e295bd60f0..660aaeec922b7 100644 --- a/tools/jsrun.py +++ b/tools/jsrun.py @@ -21,12 +21,16 @@ def run_js(filename, engine=None, args=[], check_timeout=False, stdin=None, stdo if type(engine) is not list: engine = [engine] command = engine + [filename] + (['--'] if 'd8' in engine[0] or 'jsc' in engine[0] else []) + args - proc = Popen( - command, - stdin=stdin, - stdout=stdout, - stderr=stderr, - cwd=cwd) + try: + if cwd is not None: os.environ['EMCC_BUILD_DIR'] = os.getcwd() + proc = Popen( + command, + stdin=stdin, + stdout=stdout, + stderr=stderr, + cwd=cwd) + finally: + if cwd is not None: del os.environ['EMCC_BUILD_DIR'] timeout = 15*60 if check_timeout else None if TRACK_PROCESS_SPAWNS: logging.info('Blocking on process ' + str(proc.pid) + ': ' + str(command) + (' for ' + str(timeout) + ' seconds' if timeout else ' until it finishes.')) From f8fccf86ddf6e654f9cdc5fc12a3ca159feee6fc Mon Sep 17 00:00:00 2001 From: Alon Zakai <alonzakai@gmail.com> Date: Tue, 29 Jul 2014 16:05:17 -0700 Subject: [PATCH 07/30] site text update --- site/source/home_page_layout.html | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/site/source/home_page_layout.html b/site/source/home_page_layout.html index c5340550f4617..388c531c6c244 100644 --- a/site/source/home_page_layout.html +++ b/site/source/home_page_layout.html @@ -1,27 +1,25 @@ -<p style="font-size:3.5em;line-height:1; ">Compile native code to the web</p> - <img alt="./_static/Emscripten_logo_full.png" src="_static/Emscripten_logo_full.png"> -<p>Emscripten takes LLVM bytecode generated from C/C++ and compiles it into <b>asm.js</b> (a highly optimisable strict subset of JavaScript). This can be run on the web without plugins.</p> +<h3>Emscripten is an <b>LLVM</b>-based project that compiles <b>C/C++</b> into highly-optimizable <b>JavaScript</b> in asm.js format. This lets you run C/C++ on the web at near-native speed, without plugins.</h3> <div class="container" style="width:100%;margin-bottom:10px;"> <div class="one-third-container" style="width:33%; display:inline-block;"> <div class="signpost" style="display:inline-block; vertical-align:text-top; margin-left:5px;margin-right:5px;"> - <div class="signpost-heading" style="font-size:2em; font-style:bold; margin-bottom:10px;">Native code</div> - <div class="signpost-body" style=""><p>Compile C and C++ code into LLVM using <i>Clang</i>. Emscripten converts the LLVM to JavaScript.</p></div> + <div class="signpost-heading" style="font-size:2em; font-style:bold; margin-bottom:10px;">Porting</div> + <div class="signpost-body" style=""><p>Compile your existing projects written in C or C++ and run them on all modern browsers.</p></div> </div> </div> <div class="one-third-container" style="width:33%; display:inline-block; font-style:bold;"> <div class="signpost" style="display:inline-block; vertical-align:text-top; margin-left:5px;margin-right:5px;"> - <div class="signpost-heading" style="font-size:2em; font-style:bold; margin-bottom:10px;">Runtimes</div> - <div class="signpost-body" style=""><p>Python and other interpreted languages can be run on the web by compiling their native runtimes to JavaScript</p></div> + <div class="signpost-heading" style="font-size:2em; font-style:bold; margin-bottom:10px;">APIs</div> + <div class="signpost-body" style=""><p>Emscripten converts OpenGL into WebGL, and lets you use familiar APIs like SDL, or HTML5 directly.</p></div> </div> </div> <div class="one-third-container" style="width:33%; display:inline-block; font-style:bold;"> <div class="signpost" style="display:inline-block; vertical-align:text-top; margin-left:5px; margin-right:5px;"> <div class="signpost-heading" style="font-size:2em; font-style:bold; margin-bottom:10px;">Fast</div> - <div class="signpost-body" style=""><p>Better than half native speed is currently achievable on some browsers/benchmarks.</p></div> + <div class="signpost-body" style=""><p>Thanks to LLVM optimizations and Emscripten's JavaScript-specific optimizations, code runs at near-native speed.</p></div> </div> </div> </div> From a22b64d24c10be6dba90075d2d5951c699002ecf Mon Sep 17 00:00:00 2001 From: Alon Zakai <alonzakai@gmail.com> Date: Tue, 29 Jul 2014 16:10:00 -0700 Subject: [PATCH 08/30] update news to mention Massive --- site/source/index.rst | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/site/source/index.rst b/site/source/index.rst index 39b91857e92d8..68d411db32eb4 100644 --- a/site/source/index.rst +++ b/site/source/index.rst @@ -14,10 +14,8 @@ News ==== +- `Massive <http://kripken.github.io/Massive/>`_ is a new asm.js benchmark comprised of Emscripten-compiled C/C++ codebases. Please test and give `feedback! <https://github.com/kripken/Massive>`_ - `Unity <https://unity3d.com/>`_ blogs about WebGL support and launches `two public demos <http://blogs.unity3d.com/2014/04/29/on-the-future-of-web-publishing-in-unity/>`_ (April 29, 2014). See the `Mozilla Blog <https://blog.mozilla.org/blog/2014/03/18/mozilla-and-unity-deliver-award-winning-game-engine-to-the-web/>`_ for more information. -- The new :doc:`fastcomp/LLVM backend </docs/contributing/LLVM-Backend>` has been merged to master and is present in the latest SDK release. -- `Unreal Engine 4 <https://www.unrealengine.com/blog/welcome-to-unreal-engine-4>`_ ported to the web using Emscripten (Mar 19, 2014 ). There is `more information <https://blog.mozilla.org/blog/2014/03/12/mozilla-and-epic-preview-unreal-engine-4-running-in-firefox/>`_ on the Mozilla blog. - @@ -47,4 +45,4 @@ News * Introduction * Quickstart Signpost - with prominent link to "Getting Started" Tutorial * Signposts for: News, Top Demos, Contibuting, Github Project - * (Possibly) Signposts to: Twitter feed, Github issues (new, resolved) \ No newline at end of file + * (Possibly) Signposts to: Twitter feed, Github issues (new, resolved) From 8f4d5ece6d2081046f9821f8748e97f7258cdd36 Mon Sep 17 00:00:00 2001 From: Alon Zakai <alonzakai@gmail.com> Date: Tue, 29 Jul 2014 17:20:43 -0700 Subject: [PATCH 09/30] fix bug where only ctlz or cttz is present, but not both --- emscripten.py | 9 ++++++--- tests/cases/ctlz_alone_fastcomp.ll | 19 +++++++++++++++++++ tests/cases/ctlz_alone_fastcomp.txt | 1 + 3 files changed, 26 insertions(+), 3 deletions(-) create mode 100644 tests/cases/ctlz_alone_fastcomp.ll create mode 100644 tests/cases/ctlz_alone_fastcomp.txt diff --git a/emscripten.py b/emscripten.py index faf41c409a1fb..47aea9d342e59 100755 --- a/emscripten.py +++ b/emscripten.py @@ -1065,10 +1065,13 @@ def keyfunc(other): basic_vars = ['STACKTOP', 'STACK_MAX', 'tempDoublePtr', 'ABORT'] basic_float_vars = ['NaN', 'Infinity'] - if metadata.get('preciseI64MathUsed') or \ - forwarded_json['Functions']['libraryFunctions'].get('llvm_cttz_i32') or \ - forwarded_json['Functions']['libraryFunctions'].get('llvm_ctlz_i32'): + if metadata.get('preciseI64MathUsed'): basic_vars += ['cttz_i8', 'ctlz_i8'] + else: + if forwarded_json['Functions']['libraryFunctions'].get('llvm_cttz_i32'): + basic_vars += ['cttz_i8'] + if forwarded_json['Functions']['libraryFunctions'].get('llvm_ctlz_i32'): + basic_vars += ['ctlz_i8'] if settings.get('DLOPEN_SUPPORT'): for sig in last_forwarded_json['Functions']['tables'].iterkeys(): diff --git a/tests/cases/ctlz_alone_fastcomp.ll b/tests/cases/ctlz_alone_fastcomp.ll new file mode 100644 index 0000000000000..ec3ec13a93d7d --- /dev/null +++ b/tests/cases/ctlz_alone_fastcomp.ll @@ -0,0 +1,19 @@ +; ModuleID = 'tests/hello_world.bc' +target datalayout = "e-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-p:32:32:32-v128:32:128-n32-S128" +target triple = "asmjs-unknown-emscripten" + +@.str = private unnamed_addr constant [18 x i8] c"hello, world %d!\0A\00", align 1 + +define i32 @main() { +entry: + %retval = alloca i32, align 4 + store i32 0, i32* %retval + %call = call i32 @llvm.ctlz.i32(i32 109, i1 0) + %call2 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([18 x i8]* @.str, i32 0, i32 0), i32 %call) + ret i32 0 +} + +declare i32 @printf(i8*, ...) + +declare i32 @llvm.ctlz.i32(i32, i1) + diff --git a/tests/cases/ctlz_alone_fastcomp.txt b/tests/cases/ctlz_alone_fastcomp.txt new file mode 100644 index 0000000000000..e2f98d5c41b14 --- /dev/null +++ b/tests/cases/ctlz_alone_fastcomp.txt @@ -0,0 +1 @@ +hello, world 25! From 7993ac2a8402bbaf0503401d777fc51fe2f66e26 Mon Sep 17 00:00:00 2001 From: Alon Zakai <alonzakai@gmail.com> Date: Wed, 30 Jul 2014 09:56:00 -0700 Subject: [PATCH 10/30] fix other.test_EMCC_BUILD_DIR on windows --- tests/test_other.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_other.py b/tests/test_other.py index 116775f7f92c2..afcc7bd054eca 100644 --- a/tests/test_other.py +++ b/tests/test_other.py @@ -2387,7 +2387,7 @@ def test_EMCC_BUILD_DIR(self): printErr('dir was ' + process.env.EMCC_BUILD_DIR); ''') out, err = Popen([PYTHON, EMCC, path_from_root('tests', 'hello_world.cpp'), '--js-library', 'lib.js'], stderr=PIPE).communicate() - self.assertContained('dir was ' + self.get_dir(), err) + self.assertContained('dir was ' + self.get_dir().replace('\\', '/'), err) def test_float_h(self): process = Popen([PYTHON, EMCC, path_from_root('tests', 'float+.c')], stdout=PIPE, stderr=PIPE) From 568a70776f6dd7cae6412f2d2e351ddf96c21aad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jukka=20Jyl=C3=A4nki?= <jujjyl@gmail.com> Date: Wed, 30 Jul 2014 22:21:08 +0300 Subject: [PATCH 11/30] Fix more of #2133 \r\r\n line endings. --- emcc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/emcc b/emcc index 72380d6ae6ecb..43e2cdd0590a0 100755 --- a/emcc +++ b/emcc @@ -1669,6 +1669,9 @@ try: logging.debug('applying pre/postjses') src = open(final).read() final += '.pp.js' + if WINDOWS: # Avoid duplicating \r\n to \r\r\n when writing out. + if pre_js: pre_js = pre_js.replace('\r\n', '\n') + if post_js: post_js = post_js.replace('\r\n', '\n') open(final, 'w').write(pre_js + src + post_js) if DEBUG: save_intermediate('pre-post') From c0fcdf4524517613d72dd276c39de970a3ab6a1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jukka=20Jyl=C3=A4nki?= <jujjyl@gmail.com> Date: Wed, 30 Jul 2014 22:44:58 +0300 Subject: [PATCH 12/30] Fix test_env on Windows (string comparison failed on \ vs / path delimiter comparisons). --- tests/test_core.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_core.py b/tests/test_core.py index bf33b8ef1b5db..b879f1b2375a7 100644 --- a/tests/test_core.py +++ b/tests/test_core.py @@ -4565,7 +4565,7 @@ def test_env(self): expected = open(path_from_root('tests', 'env', 'output.txt'), 'r').read() self.do_run(src, [ expected.replace('{{{ THIS_PROGRAM }}}', './this.program'), # spidermonkey, v8 - expected.replace('{{{ THIS_PROGRAM }}}', self.get_dir() + '/src.cpp.o.js') # node, can find itself properly + expected.replace('{{{ THIS_PROGRAM }}}', os.path.join(os.path.normpath(self.get_dir()), 'src.cpp.o.js')) # node, can find itself properly ]) def test_environ(self): @@ -4574,7 +4574,7 @@ def test_environ(self): expected = open(path_from_root('tests', 'env', 'output-mini.txt'), 'r').read() self.do_run(src, [ expected.replace('{{{ THIS_PROGRAM }}}', './this.program'), # spidermonkey, v8 - expected.replace('{{{ THIS_PROGRAM }}}', self.get_dir() + '/src.cpp.o.js') # node, can find itself properly + expected.replace('{{{ THIS_PROGRAM }}}', os.path.join(os.path.normpath(self.get_dir()), 'src.cpp.o.js')) # node, can find itself properly ]) def test_systypes(self): From 6a4900420d9af4d32e69bf5910c5441af5365a85 Mon Sep 17 00:00:00 2001 From: Alon Zakai <alonzakai@gmail.com> Date: Wed, 30 Jul 2014 11:46:12 -0700 Subject: [PATCH 13/30] fix bug in calculation of # of cores --- tools/js_optimizer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/js_optimizer.py b/tools/js_optimizer.py index 2fad08b3f4a08..09b764e2a50e0 100644 --- a/tools/js_optimizer.py +++ b/tools/js_optimizer.py @@ -276,7 +276,7 @@ def write_chunk(chunk, i): (['--debug'] if source_map else []) + passes, filenames) #print [' '.join(command) for command in commands] - cores = min(cores, filenames) + cores = min(cores, len(filenames)) if len(chunks) > 1 and cores >= 2: # We can parallelize if DEBUG: print >> sys.stderr, 'splitting up js optimization into %d chunks of size %d, using %d cores (total: %.2f MB)' % (len(chunks), chunk_size, cores, total_size/(1024*1024.)) From d5da2984d85771fc1a6babfc8942d8ab5e810497 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jukka=20Jyl=C3=A4nki?= <jujjyl@gmail.com> Date: Thu, 31 Jul 2014 00:13:00 +0300 Subject: [PATCH 14/30] Fix test_python on Windows. After commit https://github.com/kripken/emscripten/commit/559c4f999b3dffda138f6e09cd068e2b662d9a3a , FS.lookupPath could return a JS object which has node==null, so test that as an error condition in readlink. --- src/library_fs.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/library_fs.js b/src/library_fs.js index ae89571537b60..097cd5c9d3838 100644 --- a/src/library_fs.js +++ b/src/library_fs.js @@ -832,6 +832,9 @@ mergeInto(LibraryManager.library, { readlink: function(path) { var lookup = FS.lookupPath(path); var link = lookup.node; + if (!link) { + throw new FS.ErrnoError(ERRNO_CODES.ENOENT); + } if (!link.node_ops.readlink) { throw new FS.ErrnoError(ERRNO_CODES.EINVAL); } From 91345c6e0f9550a1a94469314328dad752296160 Mon Sep 17 00:00:00 2001 From: Alon Zakai <alonzakai@gmail.com> Date: Wed, 30 Jul 2014 13:37:32 -0700 Subject: [PATCH 15/30] optimize function splitting and name detection in js optimizer, no need to notice indentation --- tools/asm_module.py | 2 +- tools/js_optimizer.py | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/tools/asm_module.py b/tools/asm_module.py index a1aecdda3ce11..4b88bba672639 100644 --- a/tools/asm_module.py +++ b/tools/asm_module.py @@ -44,7 +44,7 @@ def __init__(self, filename): # funcs self.funcs_js = self.js[self.start_funcs:self.end_funcs] - self.funcs = set([m.group(2) for m in js_optimizer.func_sig.finditer(self.funcs_js)]) + self.funcs = set([m.group(1) for m in js_optimizer.func_sig.finditer(self.funcs_js)]) #print 'funcs', self.funcs # tables and exports diff --git a/tools/js_optimizer.py b/tools/js_optimizer.py index 09b764e2a50e0..396184acdf4bb 100644 --- a/tools/js_optimizer.py +++ b/tools/js_optimizer.py @@ -19,7 +19,7 @@ def path_from_root(*pathelems): DEBUG = os.environ.get('EMCC_DEBUG') -func_sig = re.compile('( *)function ([_\w$]+)\(') +func_sig = re.compile('function ([_\w$]+)\(') import_sig = re.compile('var ([_\w$]+) *=[^;]+;') class Minifier: @@ -43,7 +43,8 @@ def minify_shell(self, shell, minify_whitespace, source_map=False): shell = shell.replace('0.0', '13371337') # avoid uglify doing 0.0 => 0 # Find all globals in the JS functions code - self.globs = [m.group(2) for m in func_sig.finditer(self.js)] + + self.globs = [m.group(1) for m in func_sig.finditer(self.js)] temp_file = temp_files.get('.minifyglobals.js').name f = open(temp_file, 'w') @@ -208,7 +209,7 @@ def split_funcs(js): if i < len(parts)-1: func += '\n}\n' # last part needs no } m = func_sig.search(func) if m: - ident = m.group(2) + ident = m.group(1) else: if know_generated: continue # ignore whitespace ident = 'anon_%d' % i From 8f2ebfe2883b1918ebfbea507d10cc5d44a834d3 Mon Sep 17 00:00:00 2001 From: hamishwillee <hamishwillee@gmail.com> Date: Thu, 31 Jul 2014 16:45:16 +1000 Subject: [PATCH 16/30] final review fixes on community, bugreports, authors, and the api-reference files. Also significant updates to download files section --- .../static/css/theme.css | 12 +- site/source/conf.py | 2 +- .../docs/api_reference/advanced-apis.rst | 10 +- .../api_reference/device-orientation-axes.png | Bin 0 -> 15978 bytes .../docs/api_reference/emscripten.h.rst | 6 +- site/source/docs/api_reference/html5.h.rst | 78 ++++--- .../source/docs/api_reference/preamble.js.rst | 18 +- site/source/docs/contributing/AUTHORS.rst | 4 +- .../Getting-started-on-Mac-OS-X.rst | 2 + .../source/docs/contributing/contributing.rst | 8 +- .../source/docs/getting_started/downloads.rst | 194 ++++++--------- site/source/docs/index.rst | 1 + .../introducing_emscripten/bug_reports.rst | 17 +- .../docs/introducing_emscripten/community.rst | 16 +- .../docs/introducing_emscripten/index.rst | 1 - .../introducing_emscripten/searching_site.rst | 5 - site/source/docs/site/about.rst | 171 ++++++++++++-- site/source/docs/site/glossary.rst | 22 ++ site/source/docs/site/index.rst | 2 +- ...g-started-emscripten-wikiEmscriptenSDK.rst | 33 +++ site/source/docs/tools_reference/emsdk.rst | 221 ++++++++++++++++++ site/source/docs/tools_reference/index.rst | 16 ++ site/source/index.rst | 3 +- 23 files changed, 614 insertions(+), 228 deletions(-) create mode 100644 site/source/docs/api_reference/device-orientation-axes.png delete mode 100644 site/source/docs/introducing_emscripten/searching_site.rst create mode 100644 site/source/docs/site/glossary.rst create mode 100644 site/source/docs/tools_reference/emsdk.rst create mode 100644 site/source/docs/tools_reference/index.rst diff --git a/site/source/_themes/emscripten_sphinx_rtd_theme/static/css/theme.css b/site/source/_themes/emscripten_sphinx_rtd_theme/static/css/theme.css index 300680f9fcfae..5c4e19b435764 100644 --- a/site/source/_themes/emscripten_sphinx_rtd_theme/static/css/theme.css +++ b/site/source/_themes/emscripten_sphinx_rtd_theme/static/css/theme.css @@ -21,7 +21,9 @@ table{border-collapse:collapse;border-spacing:0}td{vertical-align:top}.chromefra margin-bottom:0 !important } -.wy-table-responsive table td,.wy-table-responsive table th{white-space:nowrap} +.wy-table-responsive table td {white-space:nowrap} + +.wy-table-responsive table th{white-space:nowrap} a{color:#2980b9;text-decoration:none}a:hover{color:#3091d1}a:visited{color:#9b59b6}html{height:100%;overflow-x:hidden}body{font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;font-weight:normal;color:#404040;min-height:100%;overflow-x:hidden;background:#edf0f2}.wy-text-left{text-align:left}.wy-text-center{text-align:center}.wy-text-right{text-align:right}.wy-text-large{font-size:120%}.wy-text-normal{font-size:100%}.wy-text-small,small{font-size:80%}.wy-text-strike{text-decoration:line-through}.wy-text-warning{color:#e67e22 !important}a.wy-text-warning:hover{color:#eb9950 !important}.wy-text-info{color:#2980b9 !important}a.wy-text-info:hover{color:#409ad5 !important}.wy-text-success{color:#27ae60 !important}a.wy-text-success:hover{color:#36d278 !important}.wy-text-danger{color:#e74c3c !important}a.wy-text-danger:hover{color:#ed7669 !important}.wy-text-neutral{color:#404040 !important}a.wy-text-neutral:hover{color:#595959 !important}h1,h2,h3,h4,h5,h6,legend{margin-top:0;font-weight:700;font-family:"Roboto Slab","ff-tisa-web-pro","Georgia",Arial,sans-serif}p{line-height:24px;margin:0;font-size:16px;margin-bottom:24px}h1{font-size:175%}h2{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}code,.rst-content tt{white-space:nowrap;max-width:100%;background:#fff;border:solid 1px #e1e4e5;font-size:75%;padding:0 5px;font-family:"Incosolata","Consolata","Monaco",monospace;color:#e74c3c;overflow-x:auto}code.code-large,.rst-content tt.code-large{font-size:90%}.wy-plain-list-disc,.rst-content .section ul,.rst-content .toctree-wrapper ul,article ul{list-style:disc;line-height:24px;margin-bottom:24px} .wy-plain-list-disc li,.rst-content .section ul li,.rst-content .toctree-wrapper ul li,article ul li { @@ -341,6 +343,14 @@ width:inherit; } + +/* HamishW - Attempt to wrap table columns/remove the "responsive" behaviour on some tables. */ +table.wrap-table-content td, table.wrap-table-content th { + white-space: normal; +} + + + /* HamishW - fix bullet lists inside arabic decimal lists not rendering properly */ /* .wy-plain-list-decimal li, .rst-content .section ol li, .rst-content ol.arabic li, article ol li .wy-plain-list-decimal ul .simple li { diff --git a/site/source/conf.py b/site/source/conf.py index 03d7178408160..c2eb431b365e5 100644 --- a/site/source/conf.py +++ b/site/source/conf.py @@ -171,7 +171,7 @@ # The name of an image file (relative to this directory) to place at the top # of the sidebar. -html_logo = '/_static/Emscripten_logo_full.png' +html_logo = '_static/Emscripten_logo_full.png' # The name of an image file (within the static path) to use as favicon of the diff --git a/site/source/docs/api_reference/advanced-apis.rst b/site/source/docs/api_reference/advanced-apis.rst index 704579a8ae52a..b8f2b90650c47 100644 --- a/site/source/docs/api_reference/advanced-apis.rst +++ b/site/source/docs/api_reference/advanced-apis.rst @@ -1,6 +1,6 @@ -========================================== -Advanced APIs (ready-for-review) -========================================== +============= +Advanced APIs +============= This section lists APIs that are not suitable for general use, but which may be useful to developers in some circumstances. These include APIs that are difficult or complicated to use, or which are intended primarily for Emscripten developers. @@ -34,6 +34,8 @@ allocate() =========== ``allocate()`` is documented in `preamble.js <https://github.com/kripken/emscripten/blob/master/src/preamble.js>`_ and marked as *internal* because it is difficult to use (it has been optimized for multiple syntaxes to save space in generated code). Normally developers should instead allocate memory using ``_malloc()``, initialize it with :js:func:`setValue`, etc., but this may be useful for advanced developers in certain cases. + +.. todo:: **HamishW** It would be useful to have proper documentation of ``allocate()`` here. This has been deferred in the short term. Module.Runtime @@ -41,5 +43,5 @@ Module.Runtime ``Module.Runtime`` gives access to low-level runtime functionality. Some of these, for example ``Runtime.stackSave()`` and ``Runtime.stackRestore()`` may be useful for advanced users. -.. todo:: **HamishW** It would be useful to expand on what is offered by Module.Runtime +.. todo:: **HamishW** It would be useful to expand on what is offered by ``Module.Runtime``. This has been deferred. diff --git a/site/source/docs/api_reference/device-orientation-axes.png b/site/source/docs/api_reference/device-orientation-axes.png new file mode 100644 index 0000000000000000000000000000000000000000..8e1af990acb513cb421fc74072c78c3b8339c940 GIT binary patch literal 15978 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 bW2lO4s~tCBZ`@$(A5mWVqg0iINyz^LM!O=R literal 0 HcmV?d00001 diff --git a/site/source/docs/api_reference/emscripten.h.rst b/site/source/docs/api_reference/emscripten.h.rst index 9b96292634e1c..e7ae8eecca574 100644 --- a/site/source/docs/api_reference/emscripten.h.rst +++ b/site/source/docs/api_reference/emscripten.h.rst @@ -1,8 +1,8 @@ .. _emscripten-h: -================================ -Emscripten.h (ready-for-review) -================================ +============ +Emscripten.h +============ This page documents the public C++ APIs provided by `emscripten.h <https://github.com/kripken/emscripten/blob/master/system/include/emscripten/emscripten.h>`_. diff --git a/site/source/docs/api_reference/html5.h.rst b/site/source/docs/api_reference/html5.h.rst index e12b753cdbc2d..6d4d37c26eb4b 100644 --- a/site/source/docs/api_reference/html5.h.rst +++ b/site/source/docs/api_reference/html5.h.rst @@ -1,14 +1,16 @@ -============================ -html5.h (ready-for-review) -============================ +======= +html5.h +======= -This page documents the C++ APIs provided by `html5.h <https://github.com/kripken/emscripten/blob/master/system/include/emscripten/html5.h>`_. +The C++ APIs in `html5.h <https://github.com/kripken/emscripten/blob/master/system/include/emscripten/html5.h>`_ define the Emscripten low-level glue bindings to interact with HTML5 events from native code. -.. tip:: The C++ APIs map closely to their equivalent HTML5 JavaScript APIs. The HTML5 specifications listed below provide additional detailed reference "over and above" the information provided in this document. +.. tip:: The C++ APIs map closely to their :ref:`equivalent HTML5 JavaScript APIs <specifications-html5-api>`. The HTML5 specifications listed below provide additional detailed reference "over and above" the information provided in this document. In addition, the :ref:`test-example-code-html5-api` can be reviewed to see how the code is used. -These APIs define the Emscripten low-level glue bindings for interfacing with the following HTML5 APIs: +.. _specifications-html5-api: + +The HTML5 specifications for APIs that are mapped by **html5.h** include: - `DOM Level 3 Events: Keyboard, Mouse, Mouse Wheel, Resize, Scroll, Focus <https://dvcs.w3.org/hg/dom3events/raw-file/tip/html/DOM3-Events.html>`_. - `Device Orientation Events for gyro and accelerometer <http://www.w3.org/TR/orientation-event/>`_. @@ -146,42 +148,42 @@ Most functions in this API return a result of type :c:data:`EMSCRIPTEN_RESULT`. This type is used to return the result of most functions in this API. Positive values denote success, while zero and negative values signal failure. Possible values are listed below. -.. c:macro:: EMSCRIPTEN_RESULT_SUCCESS + .. c:macro:: EMSCRIPTEN_RESULT_SUCCESS - The operation succeeded. + The operation succeeded. -.. c:macro:: EMSCRIPTEN_RESULT_DEFERRED + .. c:macro:: EMSCRIPTEN_RESULT_DEFERRED - The requested operation cannot be completed now for :ref:`web security reasons<web-security-functions-html5-api>`, and has been deferred for completion in the next event handler. - -.. c:macro:: EMSCRIPTEN_RESULT_NOT_SUPPORTED + The requested operation cannot be completed now for :ref:`web security reasons<web-security-functions-html5-api>`, and has been deferred for completion in the next event handler. + + .. c:macro:: EMSCRIPTEN_RESULT_NOT_SUPPORTED - The given operation is not supported by this browser or the target element. This value will be returned at the time the callback is registered if the operation is not supported. + The given operation is not supported by this browser or the target element. This value will be returned at the time the callback is registered if the operation is not supported. -.. c:macro:: EMSCRIPTEN_RESULT_FAILED_NOT_DEFERRED + .. c:macro:: EMSCRIPTEN_RESULT_FAILED_NOT_DEFERRED - The requested operation could not be completed now for :ref:`web security reasons<web-security-functions-html5-api>`. It failed because the user requested the operation not be deferred. + The requested operation could not be completed now for :ref:`web security reasons<web-security-functions-html5-api>`. It failed because the user requested the operation not be deferred. -.. c:macro:: EMSCRIPTEN_RESULT_INVALID_TARGET + .. c:macro:: EMSCRIPTEN_RESULT_INVALID_TARGET - The operation failed because the specified target element is invalid. + The operation failed because the specified target element is invalid. -.. c:macro:: EMSCRIPTEN_RESULT_UNKNOWN_TARGET + .. c:macro:: EMSCRIPTEN_RESULT_UNKNOWN_TARGET - The operation failed because the specified target element was not found. + The operation failed because the specified target element was not found. -.. c:macro:: EMSCRIPTEN_RESULT_INVALID_PARAM + .. c:macro:: EMSCRIPTEN_RESULT_INVALID_PARAM - The operation failed because an invalid parameter was passed to the function. + The operation failed because an invalid parameter was passed to the function. -.. c:macro:: EMSCRIPTEN_RESULT_FAILED + .. c:macro:: EMSCRIPTEN_RESULT_FAILED - Generic failure result message, returned if no specific result is available. + Generic failure result message, returned if no specific result is available. -.. c:macro:: EMSCRIPTEN_RESULT_NO_DATA + .. c:macro:: EMSCRIPTEN_RESULT_NO_DATA - The operation failed because no data is currently available. + The operation failed because no data is currently available. @@ -199,14 +201,14 @@ Defines .. c:macro:: DOM_KEY_LOCATION - The location of the key on the keyboard; one of the :c:data:`DOM_KEY_LOCATION_XXX values <DOM_KEY_LOCATION_STANDARD>`. + The location of the key on the keyboard; one of the values below. -.. c:macro:: DOM_KEY_LOCATION_STANDARD - DOM_KEY_LOCATION_LEFT - DOM_KEY_LOCATION_RIGHT - DOM_KEY_LOCATION_NUMPAD + .. c:macro:: DOM_KEY_LOCATION_STANDARD + DOM_KEY_LOCATION_LEFT + DOM_KEY_LOCATION_RIGHT + DOM_KEY_LOCATION_NUMPAD - Locations of the key on the keyboard. + Locations of the key on the keyboard. Struct ------ @@ -716,8 +718,18 @@ Struct double beta double gamma - The orientation of the device in terms of the transformation from a coordinate frame fixed on the Earth to a coordinate frame fixed in the device. - + The `orientation <https://developer.mozilla.org/en-US/Apps/Build/gather_and_modify_data/responding_to_device_orientation_changes#Device_Orientation_API>`_ of the device in terms of the transformation from a coordinate frame fixed on the Earth to a coordinate frame fixed in the device. + + The image (source: `dev.opera.com <http://dev.opera.com/articles/view/w3c-device-orientation-api/>`_) and definitions below illustrate the co-ordinate frame: + + - :c:type:`~EmscriptenDeviceOrientationEvent.alpha`: the rotation of the device around the Z axis. + - :c:type:`~EmscriptenDeviceOrientationEvent.beta`: the rotation of the device around the X axis. + - :c:type:`~EmscriptenDeviceOrientationEvent.gamma`: the rotation of the device around the Y axis. + + .. image:: device-orientation-axes.png + :target: https://developer.mozilla.org/en-US/Apps/Build/gather_and_modify_data/responding_to_device_orientation_changes#Device_Orientation_API + :alt: Image of device showing X, Y, Z axes + .. c:member:: EM_BOOL absolute diff --git a/site/source/docs/api_reference/preamble.js.rst b/site/source/docs/api_reference/preamble.js.rst index 13c5d58cd1c04..02e3e5eeadb6c 100644 --- a/site/source/docs/api_reference/preamble.js.rst +++ b/site/source/docs/api_reference/preamble.js.rst @@ -1,6 +1,6 @@ -======================================================= -preamble.js (ready-for-review) -======================================================= +=========== +preamble.js +=========== The JavaScript APIs in `preamble.js <https://github.com/kripken/emscripten/blob/master/src/preamble.js>`_ provide programmatic access for interacting with the compiled C code, including: calling compiled C functions, accessing memory, converting pointers to JavaScript ``Strings`` and ``Strings`` to pointers (with different encodings/formats), and other convenience functions. @@ -36,7 +36,7 @@ Calling compiled C functions from JavaScript .. note:: - ``ccall`` uses the C stack for temporary values. If you pass a string then it is only "alive" until the call is complete. If the code being called saves the pointer to be used later, it may point to invalid data. - - If you need a string to live forever, you can create it, for example, using ``malloc`` and :js:func:`writeStringToMemory`. However, you must later delete it manually! + - If you need a string to live forever, you can create it, for example, using ``_malloc`` and :js:func:`writeStringToMemory`. However, you must later delete it manually! - LLVM optimizations can inline and remove functions, after which you will not be able to call them. Similarly, function names minified by the *Closure Compiler* are inaccessible. In either case, the solution is to add the functions to the ``EXPORTED_FUNCTIONS`` list when you invoke *emcc* : :: @@ -79,7 +79,7 @@ Calling compiled C functions from JavaScript .. note:: - ``cwrap`` uses the C stack for temporary values. If you pass a string then it is only "alive" until the call is complete. If the code being called saves the pointer to be used later, it may point to invalid data. - - If you need a string to live forever, you can create it, for example, using ``malloc`` and :js:func:`writeStringToMemory`. However, you must later delete it manually! + - If you need a string to live forever, you can create it, for example, using ``_malloc`` and :js:func:`writeStringToMemory`. However, you must later delete it manually! - LLVM optimizations can inline and remove functions, after which you will not be able to "wrap" them. Similarly, function names minified by the *Closure Compiler* are inaccessible. In either case, the solution is to add the functions to the ``EXPORTED_FUNCTIONS`` list when you invoke *emcc* : :: @@ -109,7 +109,7 @@ Accessing memory .. note:: - :js:func:`setValue` and :js:func:`getValue` only do *aligned* writes and reads. - - The ``type`` is an LLVM IR type (one of ``i8``, ``i16``, ``i32``, ``i64``, ``float``, ``double``, or a pointer type like ``i8*`` or just *), not JavaScript types as used in :js:func:`ccall` or :js:func:`cwrap`. This is a lower-level operation, and we do need to care what specific type is being used. + - The ``type`` is an LLVM IR type (one of ``i8``, ``i16``, ``i32``, ``i64``, ``float``, ``double``, or a pointer type like ``i8*`` or just ``*``), not JavaScript types as used in :js:func:`ccall` or :js:func:`cwrap`. This is a lower-level operation, and we do need to care what specific type is being used. :param ptr: A pointer (number) representing the memory address. :param value: The value to be stored @@ -125,7 +125,7 @@ Accessing memory .. note:: - :js:func:`setValue` and :js:func:`getValue` only do *aligned* writes and reads! - - The ``type` is an LLVM IR type (one of ``i8``,``i16``,``i32``,``i64``,``float``,``double`, or a pointer type like `i8*` or just *), not JavaScript types as used in :js:func:`ccall` or :js:func:`cwrap`. This is a lower-level operation, and we do need to care what specific type is being used. + - The ``type`` is an LLVM IR type (one of ``i8``, ``i16``, ``i32``, ``i64``, ``float``, ``double``, or a pointer type like ``i8*`` or just ``*``), not JavaScript types as used in :js:func:`ccall` or :js:func:`cwrap`. This is a lower-level operation, and we do need to care what specific type is being used. :param ptr: A pointer (number) representing the memory address. :param type: An LLVM IR type as a string (see "note" above). @@ -313,9 +313,7 @@ Stack trace Type accessors for Typed Arrays Mode 2 ========================================== -When using :ref:`typed-arrays-mode-2` a type array buffer is used to represent memory, with different views into it giving access to the different types. The views for accessing different types of memory are listed below. - -.. COMMENT (not rendered): **HamishW** Link to TO TYPED ARRAYS MODE2 DOCUMENTATION when this is ported +When using :ref:`typed-arrays-mode-2` a typed array buffer (``ArrayBuffer``) is used to represent memory, with different views into it giving access to the different types. The views for accessing different types of memory are listed below. .. js:data:: HEAP8 diff --git a/site/source/docs/contributing/AUTHORS.rst b/site/source/docs/contributing/AUTHORS.rst index 2aab2cf82a464..ed6e62e78349c 100644 --- a/site/source/docs/contributing/AUTHORS.rst +++ b/site/source/docs/contributing/AUTHORS.rst @@ -1,10 +1,12 @@ +.. _emscripten-authors: + ============================ AUTHORS (ready-for-review) ============================ The `AUTHORS <https://github.com/kripken/emscripten/blob/incoming/AUTHORS>`_ file lists everyone who has contributed to Emscripten. -.. note :: Authors must add themselves to the `AUTHORS <https://github.com/kripken/emscripten/blob/incoming/AUTHORS>`_ file (**incoming** branch) before :doc:`contributing <contributing>`. This act licenses their changes under the project’s :doc:`open source licenses (MIT/LLVM) <emscripten_license>`. Note that the developer retains copyright. +.. note :: Authors must add themselves to the `AUTHORS <https://github.com/kripken/emscripten/blob/incoming/AUTHORS>`_ file (**incoming** branch) before :doc:`contributing <contributing>`. This act licenses their changes under the project’s :ref:`open source licenses (MIT/LLVM) <emscripten-license>`. Note that the developer retains copyright. The contributors for releases up to Emscripten |release| inclusive (|today|) are listed below. diff --git a/site/source/docs/contributing/building_from_source/Getting-started-on-Mac-OS-X.rst b/site/source/docs/contributing/building_from_source/Getting-started-on-Mac-OS-X.rst index 376a6580ce911..51e4f45d8b08c 100644 --- a/site/source/docs/contributing/building_from_source/Getting-started-on-Mac-OS-X.rst +++ b/site/source/docs/contributing/building_from_source/Getting-started-on-Mac-OS-X.rst @@ -84,6 +84,8 @@ Note for `homebrew <https://github.com/Homebrew/homebrew>`__ users: By default, git will clone the emscripten 'incoming' branch, which is the branch where the newest developments of Emscripten occur. If you want to use a more stable branch, switch to the 'master' branch: - cd ~/emscripten - git checkout master +.. _getting-started-on-osx-install-python2: + 10. Setup 'python2': (this step is needed to workaround a bug reported in `#763 <https://github.com/kripken/emscripten/issues/763>`__) - In terminal, type 'python2 --version'. If you get a "command not found", type the following: :: diff --git a/site/source/docs/contributing/contributing.rst b/site/source/docs/contributing/contributing.rst index 6a18452c52aa8..6ee17a8158894 100644 --- a/site/source/docs/contributing/contributing.rst +++ b/site/source/docs/contributing/contributing.rst @@ -1,8 +1,8 @@ .. _contributing: -================================================ -Contributing (ready-for-review) -================================================ +============ +Contributing +============ Anyone can contribute to Emscripten — if you find it useful and want to help improve the project, follow the suggestions below. Feel free to file :ref:`bug reports <bug-reports>`, :ref:`join the discussion <contact>` and share your own ideas with the community! @@ -25,7 +25,7 @@ Branches of interest Submitting patches -===================== +================== Patches should be submitted as *pull requests* to the **incoming** branch. diff --git a/site/source/docs/getting_started/downloads.rst b/site/source/docs/getting_started/downloads.rst index 26139da587ada..ff35d25826844 100644 --- a/site/source/docs/getting_started/downloads.rst +++ b/site/source/docs/getting_started/downloads.rst @@ -1,76 +1,83 @@ +.. _sdk-download-and-install: + ====================================================== Download and install (under-construction) ====================================================== +.. note:: The *Emscripten SDK* provides the whole Emscripten toolchain (*Clang*, *Python*, *Node.js* and *Visual Studio* integration) in a single easy-to-install package, with integrated support for :ref:`updating to newer SDKs <updating-the-emscripten-sdk>` as they are released. -.. note:: The *Emscripten SDK* provides the whole Emscripten toolchain (*Clang*, *Python*, *Node.js* and *Visual Studio* integration) in a single easy-to-install package, with integrated support for updating to newer Emscripten versions as they are released. - -.. tip:: If you are :doc:`contributing <../contributing/contributing>` to Emscripten you should :ref:`set up Emscripten from source <installing-from-source>`. - +.. tip:: If you are :doc:`contributing <../contributing/contributing>` to Emscripten (or if you wish to build 32bit versions of the SDK) you should :ref:`set up Emscripten from source <installing-from-source>`. -Downloads -============== -To get started with Emscripten development, grab one of the SDK packages below: +SDK Downloads +================== +Download one of the SDK installers below to get started with Emscripten development. The Windows NSIS installers are the easiest to set up, while the portable SDKs can be moved between computers and do not require administration privileges. Windows ----------- - -Emscripten SDK Web Installer is a NSIS installer that always gets you the latest Emscripten SDK from the web. - -- `emsdk-1.21.0-web-64bit.exe <https://s3.amazonaws.com/mozilla-games/emscripten/releases/emsdk-1.21.0-web-64bit.exe>`_ -- ?32 bit - -Emscripten SDK Offline Installer is a NSIS installer that bundles together the Emscripten toolchain as an offline-installable package. +------- +- `Emscripten SDK Web Installer <https://s3.amazonaws.com/mozilla-games/emscripten/releases/emsdk-1.21.0-web-64bit.exe>`_ (emsdk-1.21.0-web-64bit.exe) + An NSIS installer which fetches and installs the latest Emscripten SDK from the web. To :ref:`install <windows-installation_instructions-NSIS>`, download and open the file, then follow the installer prompts. -- `emsdk-1.21.0-full-64bit.exe <https://s3.amazonaws.com/mozilla-games/emscripten/releases/emsdk-1.21.0-full-64bit.exe>`_ -- ?32 bit - - -Portable Emscripten SDK is a zipped package of the Emscripten SDK that does not require system installation privileges. Just unzip and go! - -- `emsdk-1.21.0-portable-64bit.zip <https://s3.amazonaws.com/mozilla-games/emscripten/releases/emsdk-1.21.0-portable-64bit.zip>`_ -- 32bit? - +- `Emscripten SDK Offline Installer <https://s3.amazonaws.com/mozilla-games/emscripten/releases/emsdk-1.21.0-full-64bit.exe>`_ (emsdk-1.21.0-full-64bit.exe) + An NSIS installer that bundles together the current Emscripten toolchain as an offline-installable package. To :ref:`install <windows-installation_instructions-NSIS>`, download and open the file, then follow the installer prompts. +- `Portable Emscripten SDK for Windows <https://s3.amazonaws.com/mozilla-games/emscripten/releases/emsdk-1.21.0-portable-64bit.zip>`_ (emsdk-1.21.0-portable-64bit.zip) + A zipped package of the SDK that does not require system installation privileges. To install, follow :ref:`these <all-os-installation_instructions-portable-SDK>` instructions. Linux and Mac OS X -------------------- +------------------ + +- `Portable Emscripten SDK for Linux and OS X <https://s3.amazonaws.com/mozilla-games/emscripten/releases/emsdk-portable.tar.gz>`_ (emsdk-portable.tar.gz) + A tar.gz archive package of the SDK that does not require system installation privileges. To install, follow :ref:`the general instructions <all-os-installation_instructions-portable-SDK>` and :ref:`platform specific notes <platform-notes-installation_instructions-portable-SDK>`. + -Emscripten SDK is available as a portable web-installer for Linux and OS X. This does not require system installation privileges. Just unzip and go! -- `emsdk-portable.tar.gz <https://s3.amazonaws.com/mozilla-games/emscripten/releases/emsdk-portable.tar.gz>`_ +.. _sdk-installation-instructions: +Installation instructions +========================= +Check the relevant section below for instructions on installing your selected package. Then check the :ref:`Platform-specific notes <platform-notes-installation_instructions-portable-SDK>` at the end of the section to address any further prerequisites that exist for your system. -Package installation instructions for Mac OSX and Windows -=========================================================== -Check the relevant section below for what to do with the package you just downloaded, then check the Platform-specific notes at the end of the section to find out about and address any further prerequisites that exist for your system. +.. _windows-installation_instructions-NSIS: Windows: Installing using an NSIS installer -------------------------------------------- -The NSIS installers register the Emscripten SDK as a 'standard' Windows application. To install the SDK, download an NSIS .exe file (see above), double-click on it, and run through the installer to perform the installation. After the installer finishes, the full Emscripten toolchain will be available in the directory that was chosen during the installation, and no other steps are necessary. If your system has Visual Studio 2010 installed, the vs-tool MSBuild plugin will be automatically installed as well. +The NSIS installers register the Emscripten SDK as a 'standard' Windows application. To install the SDK, download an NSIS .exe file (see above), double-click on it, and run through the installer to perform the installation. +After the installer finishes, the full Emscripten toolchain will be available in the directory that was chosen during the installation, and no other steps are necessary. If your system has Visual Studio 2010 installed, the :term:`vs-tool` MSBuild plugin will be automatically installed as well. + + +.. _all-os-installation_instructions-portable-SDK: Windows, OSX and Linux: Installing the Portable SDK --------------------------------------------------------- +---------------------------------------------------- -The Portable Emscripten SDK is a no-installer version of the SDK package. It is identical to the NSIS installer, except that it does not interact with the Windows registry. This allows Emscripten to be used on a computer without administrative privileges, and enables us to migrate the installation from one location (directory or computer) to another by just copying/zipping up the directory contents. +The Portable Emscripten SDK is a no-installer version of the SDK package. It is identical to the NSIS (web) installer, except that it does not interact with the Windows registry. This allows Emscripten to be used on a computer without administrative privileges, and means that the installation to be migrated from one location (directory or computer) to another by simply copying/zipping up the directory contents. If you want to use the Portable Emscripten SDK, the initial setup process is as follows: 1. Download and unzip the portable SDK package to a directory of your choice (see above). This directory will contain the Emscripten SDK. -#. Open a command prompt to the directory of the SDK. -#. Run ``emsdk update`` (``./emsdk update`` on OSX). This will fetch the latest registry of available tools. -#. Run ``emsdk install latest`` (``./emsdk install latest`` on OSX). This will download and install the latest SDK tools. -#. Run ``emsdk activate latest`` (``./emsdk activate latest`` on OSX). This will set up the necessary paths to point to the SDK correctly. +#. Open a command prompt to the directory of the SDK and run the following :ref:`emsdk <emsdk>` commands to get the latest SDK tools and set them as :term:`active <Active Tool/SDK>`. Note that on Mac OS X, invoke the tool with **./emsdk** isntead of **emsdk**.: :: + + # Fetch the latest registry of available tools. + emsdk update + + # Download and install the latest SDK tools. + emsdk install latest + + # Make the "latest" SDK "active" + emsdk activate latest + +Whenever you change the location of the Portable SDK (e.g. take it to another computer), re-run the final command: ``emsdk activate latest`` -Whenever you change the location of the Portable SDK (e.g. take it to another computer), re-run step 5. +.. tip:: The instructions above can also be used to get new SDKs, as they are released. +.. _platform-notes-installation_instructions-portable-SDK: Platform-specific notes ---------------------------- @@ -78,115 +85,57 @@ Platform-specific notes Mac OS X ++++++++ -- On OSX (and Linux), the git tool will not be installed automatically. Git is not a required core component, and is only needed if you want to use one of the development branches **emscripten-incoming** or **emscripten-master** directly, instead of the fixed releases. To install git on OSX, you can +- *Git* is not installed automatically. Git is only needed if you want to use one of the development branches **emscripten-incoming** or **emscripten-master** directly, instead of the fixed releases. To install git on OSX: - 1. Install XCode, and in XCode, install XCode Command Line Tools. This will provide git to the system PATH. For more help on this step, see http://stackoverflow.com/questions/9329243/xcode-4-4-command-line-tools - 2. Install git directly from http://git-scm.com/ - -- Also, on OSX, *Java* is not bundled with the Emscripten SDK. After installing emscripten via emsdk, typing 'emcc --help' should pop up a OSX dialog "Java is not installed. To open Java, you need a Java SE 6 runtime. Would you like to install one now?" that will automatically download a Java runtime to the system. -- Emscripten requires the command line tool 'python2' to be present on OSX. On default OSX installations, this does not exist. To manually work around this issue, see step 10 at :doc:`Getting-started-on-Mac-OS-X` - - -Linux -++++++++ + 1. Install XCode and the XCode Command Line Tools. This will provide *git* to the system PATH. For more help on this step, see `this stackoverflow post <http://stackoverflow.com/questions/9329243/xcode-4-4-command-line-tools>`_. + 2. Install git directly from http://git-scm.com/. -- On Linux, prebuilt binaries of tools are not available. Installing a tool will automatically clone and build that tool from the sources inside **emsdk** directory. Emsdk does not interact with Linux package managers on the behalf of the user, nor does it install any tools to the system. All file changes are done inside the ``emsdk/`` directory. -- Because *emsdk* builds software from the source on Linux, the system must have a working compiler environment available. -- Emsdk does not provide *Python*, *node.js* or *Java* on Linux. The user is expected to install these beforehand with the system package manager. +- *Java* is not bundled with the Emscripten SDK. After installing Emscripten via :ref:`emsdk <emsdk>`, typing ``emcc --help`` should pop up a dialog which will automatically download a Java Runtime to the system: :: - - -SDK concepts -============== - -The Emscripten SDK is effectively a small package manager for tools that are used in conjunction with Emscripten. The following glossary highlights the important concepts to help understanding the internals of the SDK. - -Tool - The basic unit of software bundled in the SDK. A Tool has a name and a version. For example, 'clang-3.2-32bit' is a Tool that contains the 32-bit version of the Clang v3.2 compiler. - -SDK - A set of tools. For example, 'sdk-1.5.6-32bit' is an SDK consisting of the tools clang-3.2-32bit, node-0.10.17-32bit, python-2.7.5.1-32bit and emscripten-1.5.6. - -Active Tool/SDK - Emscripten stores compiler configuration in a user-specific file **~/.emscripten**. This file points to paths for Emscripten, Python, Clang and so on. If the file ~/.emscripten is configured to point to a Tool in a specific directory, then that tool is denoted as being **active**. The Emscripten Command Prompt always gives access to the currently active Tools. This mechanism allows switching between different SDK versions easily. + Java is not installed. To open Java, you need a Java SE 6 runtime. + Would you like to install one now? -emsdk - This is the name of the manager script that Emscripten SDK is accessed through. Most operations are of the form ``emsdk command``. To access the *emsdk* script, launch the Emscripten Command Prompt. +- The *python2* command line tool is not present on OSX by default. To manually work around this issue, follow step 10 in :ref:`Getting-started-on-Mac-OS-X <getting-started-on-osx-install-python2>` - -SDK maintenance -============================ - -The following tasks are common with the Emscripten SDK: - -How do I work the emsdk utility? - Run ``emsdk help`` or just ``emsdk`` to get information about all available commands. - -How do I check the installation status and version of the SDK and tools? - To get a list of all currently installed tools and SDK versions, and all available tools, run ``emsdk list``. *A line will be printed for each tool/SDK that is available for installation.* The text ``INSTALLED`` will be shown for each tool that has already been installed. If a tool/SDK is currently active, a star (\*) will be shown next to it. Run ``emsdk_env.bat`` (Windows) or ``source ./emsdk_env.sh`` (Linux and OSX) to set up the environment for the calling terminal. - -How do I install a tool/SDK version? - Run the command ``emsdk install <tool/sdk name>`` to download and install a new tool or an SDK version. - -How do I remove a tool or an SDK? - Run the command ``emsdk uninstall <tool/sdk name>`` to delete the given tool or SDK from the local harddrive completely. - -How do I check for updates to the Emscripten SDK? - The command ``emsdk update`` will fetch package information for all new tools and SDK versions. After that, run ``emsdk install <tool/sdk name>`` to install a new version. - -How do I change the currently active SDK version? - You can toggle between different tools and SDK versions by running ``emsdk activate <tool/sdk name>``. Activating a tool will set up ``~/.emscripten`` to point to that particular tool. - -How do I install an old Emscripten compiler version? - Emsdk contains a history of old compiler versions that you can use to maintain your migration path. Type ``emsdk list --old`` to get a list of archived tool and SDK versions, and ``emsdk install <name_of_tool>`` to install it. - - On Windows, you can directly install an old SDK version by using one of the archived offline NSIS installers. See the `Archived releases`_ section down below. - - .. COMMENT HamishW This is new for MDN. Check if really should belong here. I think may already be up the top too. - -How do I track the latest Emscripten development with the SDK? - A common and supported use case of the Emscripten SDK is to enable the workflow where you directly interact with the github repositories. This allows you to obtain new features and latest fixes immediately as they are pushed to the github repository, without having to wait for release to be tagged. You do not need a github account or a fork of Emscripten to do this. To switch to using the latest upstream git development branch ``incoming``, run the following: +Linux +++++++++ - :: +.. note:: Pre-built binaries of tools are not available on Linux. Installing a tool will automatically clone and build that tool from the sources inside **emsdk** directory. Emsdk does not interact with Linux package managers on the behalf of the user, nor does it install any tools to the system. All file changes are done inside the ``emsdk/`` directory. - emsdk install git-1.8.3 # Install git. Skip if the system already has it. - emsdk install sdk-incoming-64bit # Clone+pull the latest kripken/emscripten/incoming. - emsdk activate sdk-incoming-64bit # Set the incoming SDK as the currently active one. +- The system must have a working compiler environment available (because *emsdk* builds software from the source). +- *Python*, *node.js* or *Java* are not provided by *emsdk*. The user is expected to install these beforehand with the *system package manager*. +- *Git* is not installed automatically. Git is only needed if you want to use one of the development branches **emscripten-incoming** or **emscripten-master** directly, instead of the fixed releases. - If you want to use the upstream stable branch ``master``, then replace ``-incoming-`` with ``-master-`` above. - - .. COMMENT HamishW This is new for MDN. Check if really should belong here. +.. todo:: **HamishW** Add instructions for installing Git on Linux. - -How do I use my own Emscripten github fork with the SDK? - It is also possible to use your own fork of the Emscripten repository via the SDK. This is achieved with standard git machinery, so there if you are already acquainted with working on multiple remotes in a git clone, these steps should be familiar to you. This is useful in the case when you want to make your own modifications to the Emscripten toolchain, but still keep using the SDK environment and tools. To set up your own fork as the currently active Emscripten toolchain, first install the ``sdk-incoming`` SDK like shown in the previous section, and then run the following commands in the emsdk directory: - :: +.. _updating-the-emscripten-sdk: - cd emscripten/incoming - # Add a git remote link to your own repository. - git remote add myremote https://github.com/mygituseraccount/emscripten.git - # Obtain the changes in your link. - git fetch myremote - # Switch the emscripten-incoming tool to use your fork. - git checkout -b myincoming --track myremote/incoming +Updating the SDK +================ - In this way you can utilize the Emscripten SDK tools while using your own git fork. You can switch back and forth between remotes via the ``git checkout`` command as usual. +You only need to install the SDK once! After that you can update to the latest SDK at any time using :ref:`SDK Package Manager (emsdk) <emsdk>`. Type the following (omitting comments) on the *Emscripten Command Prompt*: :: - .. COMMENT HamishW This is new for MDN. Check if really should belong here. + emsdk update // Fetch the latest registry of available tools. + emsdk install latest // Download and install the latest SDK tools. + emsdk activate latest // Set up the compiler configuration to point to the "latest" SDK. +The package manager can do many other maintenance tasks, ranging from fetching specific old versions of the SDK through to using the :ref:`versions of the tools on Github <emsdk-master-or-incoming-sdk>` (or even your own fork). Check out all the possibilities in the :ref:`emsdk_howto`. Uninstalling the Emscripten SDK ======================================================== -If you installed the SDK using a NSIS installer on Windows, launch 'Control Panel' -> 'Uninstall a program' -> 'Emscripten SDK'. +If you installed the SDK using a NSIS installer on Windows, launch: **Control Panel -> Uninstall a program -> Emscripten SDK**. If you want to remove a Portable SDK, just delete the directory containing the Portable SDK. +It is also possible to :ref:`remove specific SDKs using emsdk <emsdk-remove-tool-sdk>`. +.. _archived-nsis-windows-sdk-releases: + Archived releases ================= @@ -208,3 +157,4 @@ On Windows, you can install one of the **old versions** via an offline NSIS inst A snapshot of all tagged releases (not SDKs) can be found in `emscripten/releases <https://github.com/kripken/emscripten/releases>`_. + diff --git a/site/source/docs/index.rst b/site/source/docs/index.rst index a1866cb79bae8..5c2e0b4fbd64d 100644 --- a/site/source/docs/index.rst +++ b/site/source/docs/index.rst @@ -14,6 +14,7 @@ Documentation Home (under-construction) packaging/index contributing/index api_reference/index + tools_reference/index site/index diff --git a/site/source/docs/introducing_emscripten/bug_reports.rst b/site/source/docs/introducing_emscripten/bug_reports.rst index 32828a943b1b0..de177d5026131 100644 --- a/site/source/docs/introducing_emscripten/bug_reports.rst +++ b/site/source/docs/introducing_emscripten/bug_reports.rst @@ -1,8 +1,8 @@ .. _bug-reports: -========================================= -Bug Reporting (ready-for-review) -========================================= +============= +Bug Reporting +============= All bugs should be filed in the GitHub `main <https://github.com/kripken/emscripten>`_ Emscripten repository `Issue Tracker <https://github.com/kripken/emscripten/issues?state=open>`_. @@ -18,15 +18,17 @@ Please supply as much relevant information as possible, including: Fastcomp LLVM-Backend and Clang bugs -===================================== +==================================== -:doc:`LLVM-Backend` bugs may instead be posted to the appropriate `Emscripten LLVM fork <https://github.com/kripken/emscripten-fastcomp>`_ or `Emscripten Clang fork <https://github.com/kripken/emscripten-fastcomp-clang>`_ **if you are certain** that the bug is specific to these repositories. If uncertain, bugs must be posted to the `main repository <https://github.com/kripken/emscripten>`_. +:ref:`LLVM Backend <LLVM-Backend>` bugs may instead be posted to the appropriate `Emscripten LLVM fork <https://github.com/kripken/emscripten-fastcomp>`_ or `Emscripten Clang fork <https://github.com/kripken/emscripten-fastcomp-clang>`_ **if you are certain** that the bug is specific to these repositories. If uncertain, bugs must be posted to the `main repository <https://github.com/kripken/emscripten>`_. Pull requests must (of course) go to the proper repository. +.. _site-and-documentation-bug-reports: + Site and documentation bugs -======================== +=========================== Documentation (site) bugs should be filed in the same `Issue Tracker <https://github.com/kripken/emscripten/issues?state=open>`_. @@ -37,6 +39,3 @@ Include relevant information including: - Suggestions for a possible solution. .. tip:: The `Page bug <https://github.com/kripken/emscripten/issues/new?title=Bug%20in%20page:How%20to%20Report%20Bugs%20%28under-construction%29%20&body=REPLACE%20THIS%20TEXT%20WITH%20BUG%20DESCRIPTION%20%0A%0AURL:%20../../docs/site/Bug-Reports&labels=bug>`_ link on the bottom-right of every page opens the Issue Tracker pre-seeded with the current page URL and title. - - - diff --git a/site/source/docs/introducing_emscripten/community.rst b/site/source/docs/introducing_emscripten/community.rst index e52b9165f7e8e..1657a3e99a710 100644 --- a/site/source/docs/introducing_emscripten/community.rst +++ b/site/source/docs/introducing_emscripten/community.rst @@ -1,6 +1,6 @@ -=========================================== -Community (ready-for-review) -=========================================== +========= +Community +========= Welcome to the Emscripten community! @@ -8,9 +8,9 @@ Welcome to the Emscripten community! .. _contact: Get in touch -=========================================== +============ -The best way to contact us is to use either the *mailing list* or *IRC*. +The best ways to contact us for support are the *mailing list* and the *IRC* channel. Ask questions, share your ideas, or just join the conversation. - Mailing list: `emscripten-discuss <http://groups.google.com/group/emscripten-discuss>`_ - IRC: **#emscripten** on `irc.mozilla.org <https://wiki.mozilla.org/IRC>`_ @@ -24,7 +24,7 @@ Emscripten also has an *unofficial* presence on social media: Report a bug -============= +============ :ref:`Bug reports <bug-reports>` can be posted in the GitHub `Issue Tracker <https://github.com/kripken/emscripten/issues?state=open>`_. @@ -33,7 +33,7 @@ Report a bug Blogs -========================= +===== Get the latest official Emscripten news on the blogs: `Developer blog (azakai) <http://mozakai.blogspot.com/>`_ and `Mozilla blog <https://blog.mozilla.org/blog/tag/emscripten/>`_. @@ -43,6 +43,6 @@ In addition, other interesting blogs and demos are regularly shared on Twitter b Contribute -============ +========== Anyone can contribute to Emscripten. We've got some ideas to get you started on our :ref:`contributing` page. diff --git a/site/source/docs/introducing_emscripten/index.rst b/site/source/docs/introducing_emscripten/index.rst index 3a624dad3b325..1cced84271482 100644 --- a/site/source/docs/introducing_emscripten/index.rst +++ b/site/source/docs/introducing_emscripten/index.rst @@ -12,4 +12,3 @@ Introducing Emscripten (under-construction) bug_reports release_notes Talks-and-Publications - searching_site diff --git a/site/source/docs/introducing_emscripten/searching_site.rst b/site/source/docs/introducing_emscripten/searching_site.rst deleted file mode 100644 index 7730d01f94373..0000000000000 --- a/site/source/docs/introducing_emscripten/searching_site.rst +++ /dev/null @@ -1,5 +0,0 @@ -Searching this site (under-construction) -========================================= - -.. warning:: - Under Construction: diff --git a/site/source/docs/site/about.rst b/site/source/docs/site/about.rst index dd5feeab7c8ca..41e7c3967c89f 100644 --- a/site/source/docs/site/about.rst +++ b/site/source/docs/site/about.rst @@ -1,48 +1,65 @@ =============================== -About site (under-construction) +About site (ready-for-review) =============================== -The site is built using `Sphinx <http://sphinx-doc.org/latest/index.html>`_ (1.2.2), the (Python) open source tool used to create the official Python documentation, along with many other documentation sites. This is a very mature and stable tool, and was selected for, among other reasons, its support for defining API items and linking to them from code. - -The site uses a custom theme, which is based on the `Read the docs theme <http://read-the-docs.readthedocs.org/en/latest/theme.html>`_ - +The site is built using `Sphinx <http://sphinx-doc.org/latest/index.html>`_ (1.2.2), the open source tool used to create the official Python documentation and many other sites. This is a very mature and stable tool, and was selected for, among other reasons, its support for defining API items and linking to them from code. +The site uses a custom theme, which is based on the :ref:`read-the-docs-theme`. Page management markup ============================ .. warning:: This site is still under construction and includes both new content and content from the wiki. - To make it easy to manage documents during early review, "status" markup has been added to documents. You can search on this text in order to find articles which have questions or issues. At the end of the project a search on any of these should return "nothing" +To make it easy to manage documents while the site is being created, "status" markup has been added to the document titles. You can search on this text in order to find articles which have questions or issues (e.g. on `ready for review <http://kripken.github.io/emscripten-site/search.html?q=ready+for+review>`_): + + - **wiki import** : The page has been imported automatically from the wiki. It has not been checked. When it is actively being worked on the article is next moved to *under construction*. + - **under construction** : The page is being worked on. It is still incomplete and not *ready for review*. + - **ready for review** : The page is ready for review. :ref:`contact` if you find any problems. + - **placeholder** : The page is a placeholder for a possible topic. The topic may not end up being created in the final build. + - If there is no header, the page is assumed to be published. + +In addition there is some markup in the body of the documents: -- "wiki-import" in the heading: The page has been imported automatically from the wiki - and not been checked. This is moved to "under construction" when the article is being properly reviewed. -- "under-construction" in the heading: The page is being worked on. Incomplete and not ready to review -- "placeholder" in the heading: The page is not being worked on, and may not even exist in the final build. Even if it exists it may not exist in the current location. -- "ready-for-review" in the heading - page is ready for review. -- "REMOVE FROM FINAL BUILDS" in the heading - page is a scratchpad or temporary file during development. To be removed/moved before publishing. -- If there is no header, the page is assumed to be published. -- "HamishW" in the body of the document - this is a specific question or issue with the document at that point + - **HamishW** : This is a specific question or issue with the document at this point. -You can find documents in each type using Search: e.g. on "under review". +By the end of the project all articles should be published and all of this page management markup removed. This section of the "About" page will then be removed. +.. todo:: **HamishW** Delete this whole section at the end of the project. At that point there should only be HamishW markup for possible Todos. + Note the search link immediately above too - this is to the kripken site and may need to change if the site moves. -Writing articles +Reporting bugs +============== + +Please :ref:`report documentation bugs <site-and-documentation-bug-reports>` as you would any other Emscripten bug. Help :ref:`fix them <writing-and-updating-articles>` by updating existing documents or by creating new ones. + + +Searching the site ================== -TBD :doc:`placholder-to-give-me-warning-to-update` - +Searching returns only topics which contain **all** the specified keywords. + +.. tip:: Always start by searching for *single* words like "interacting" or "compiling". Generally this will be enough to find the relevant document. If not, you can refine the search by adding additional terms. + +Note that searches that include characters like "-" and "+" will not work. There is no support for logical operators. + + +.. _building-the-site: + Building the site ================== -The site sources are in the Emscripten repo, *incoming* branch, `/site <https://github.com/kripken/emscripten/tree/incoming/site>`_ directory. Changes should be committed to the incoming branch. +The site sources are in the Emscripten *incoming* branch, `site <https://github.com/kripken/emscripten/tree/incoming/site>`_ directory. Changes should be committed to the incoming branch. + +The site is published to the **kripken/emscripten-site** *gh-pages* branch (Github pages). -The site is published to the *gh-pages* branch as part of a site build. make html --------- -The site can be build from source on Ubuntu and Windows by navigating to the */emscripten/site* directory and using the command: :: +The site can be built from source on Ubuntu and Windows by navigating to the */emscripten/site* directory and using the command: :: + make clean make html Installing Sphinx @@ -53,19 +70,120 @@ Notes for installing Sphinx are provided `here <http://sphinx-doc.org/install.ht Ubuntu ++++++ -The version of Sphinx on Ubuntu package repository (apt-get) is only 1.1.3. It appears to be dependent on an old version of the Jinja templating library. +The version of Sphinx on Ubuntu package repository (apt-get) fails when building the site. This is an early version (1.1.3), which appears to be dependent on an old version of the Jinja templating library. -The workaround is to use the Python package installer "pip" to get version 1.2.2, and then run an upgrade (note, you may have to uninstall Sphnx first): :: +The workaround is to use the Python package installer "pip" to get version 1.2.2, and then run an upgrade (note, you may have to uninstall Sphinx first): :: pip install sphinx pip install sphinx --upgrade +.. _writing-and-updating-articles: + +Writing and updating articles +============================= + +.. note:: Sphinx is `well documented <http://sphinx-doc.org/latest/index.html>`_. This section only attempts to highlight specific styles and features used on this site. + + The :ref:`building-the-site` section explains how to find the sources for articles and build the site. + +Site content is written using :term:`reStructured text`. We recommend you read the following articles to understand the syntax: + +* `reStructured text primer <http://sphinx-doc.org/rest.html>`_ +* `Sphinx Domains <http://sphinx-doc.org/domains.html>`_ (define and link to code items). +* `Inline markup <http://sphinx-doc.org/markup/inline.html>`_ + + + + + +Style guide +----------- -Changes to the sphinx_rtd_theme theme -======================================= +This section has a few very brief recommendations to help authors use common style. + +.. tip:: We need you coding and writing content, not stuck writing perfect prose! Just do your best, and then :ref:`ask for editorial review <contact>`. + +**Spelling:** Where possible use US-English spelling. + +**Avoid idiomatic expressions**: These can be particularly confusing to non-native speakers (for example "putting your foot in your mouth" actually means to "say something embarrassing"). + +**Emphasis:** + + - **Bold** : use for file names, and UI/menu instructions (for example: "Press **OK** to do something") + - *Italic* : use for tool names - e.g. *Clang*, *emcc*, *Closure Compiler* + - ``monotype`` : use for inline code (where you can't link to the API reference) and for demonstrating tool command line options. + - otherwise emphasis should be used sparingly + + +**Lists**: Use a colon on the lead-in to the list. Capitalize the first letter and use a full-stop for each item. + + +How to link to a document or heading +------------------------------------- + +To link to a page, first define a globally unique reference before the page title (e.g. ``_my-page-reference``) then link to it using the `ref <http://sphinx-doc.org/markup/inline.html#ref-role>`_ role as shown: :: + + .. _my-page-reference: + + My Page Title + ============= + + This is the text of the section. + + To link to page use either of the options below: + ref:`my-reference-label` - the link text is the heading name after the reference + ref:`some text <my-reference-label>` - the link text is "some text" + +This is a better approach than linking to documents using the *:doc:* role, because the links do not get broken if the articles are moved. + +This approach is also recommended for linking to arbitrary headings in the site. + +Note also that there are a number of other roles that are useful for linking - including `Sphinx Domains <http://sphinx-doc.org/domains.html>`_ for linking to code items, and **term** for linking to glossary terms. + + + +Recommended section/heading markup +------------------------------------- + +reStructured text `defines <http://sphinx-doc.org/rest.html#sections>`_ section headings using a separate line of punctuation characters after (and optionally before) the heading text. The line of characters must be at least as long as the heading. For example: :: + + A heading + ========= + +Different punctuation characters are used to specify nested sections. Although the system does not mandate which punctuation character is used for each nested level, it is important to be consistent. The recommended heading levels are: :: + + ======================================= + Page title (top and bottom bars of "=") + ======================================= + + Level 1 heading (single bar of "=" below) + ========================================= + + Level 2 heading (single bar of "-" below) + ----------------------------------------- + + Level 3 heading (single bar of "+" below) + +++++++++++++++++++++++++++++++++++++++++ + + Level 4 heading (single bar of "~" below) + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +Working in markdown +------------------- + +New articles may be authored and discussed on the `wiki <https://github.com/kripken/emscripten/wiki>`_ using Markdown syntax before being included in the documentation set. The easiest way to convert these to restructured text is to use a tool like `Pandoc <http://johnmacfarlane.net/pandoc/try/?text=&from=markdown_github&to=rst>`_. + +.. note:: The *get_wiki.py* tool (**/site/source/get_wiki.py**) can be used to automate getting a snapshot of the wiki. It clones the wiki and calls *pandoc* on each file. The output is copied to a folder **wiki_static**. The tool also adds a heading, a note stating that the file is a "wiki snapshot", and fixes up links marked as "inline code" to matching links in the API Reference. + + +.. _read-the-docs-theme: + +Read the docs theme +=================== The site uses a modification of the `Read the docs theme <http://read-the-docs.readthedocs.org/en/latest/theme.html>`_ (this can be found in the source at */emscripten/site/source/_themes/emscripten_sphinx_rtd_theme*). @@ -90,3 +208,8 @@ The main changes to the original theme are listed below. - Changed to support 4 levels of depth in sidebar toc. - Centred theme. Made sidebar reach bottom of page using absolute positioning. + +Site license +============ + +The site is licensed under the same :ref:`emscripten-license` as the rest of Emscripten. Contributors to the site should add themselves to :ref:`emscripten-authors`. \ No newline at end of file diff --git a/site/source/docs/site/glossary.rst b/site/source/docs/site/glossary.rst new file mode 100644 index 0000000000000..5fedc100640fa --- /dev/null +++ b/site/source/docs/site/glossary.rst @@ -0,0 +1,22 @@ +=============================== +Glossary (under-construction) +=============================== + + + +.. glossary:: + :sorted: + + vs-tool + Visual Studio 2010 plugin to integrate MinGW, Clang and Emscripten to the VS IDE. Automatically added by the Emscripten SDK NSIS Installer if Visual Studio 2010 is present on the target system. + + + +Site / Sphinx +============== + +.. glossary:: + :sorted: + + reStructured text + Markup language used to define content on this site. See the `reStructured text primer <http://sphinx-doc.org/rest.html>`_. \ No newline at end of file diff --git a/site/source/docs/site/index.rst b/site/source/docs/site/index.rst index baabba6baa2d9..dbcb41cb7c2c9 100644 --- a/site/source/docs/site/index.rst +++ b/site/source/docs/site/index.rst @@ -6,5 +6,5 @@ Site Links (under-construction) :maxdepth: 1 about - + glossary diff --git a/site/source/docs/temp-fragments/getting-started-emscripten-wikiEmscriptenSDK.rst b/site/source/docs/temp-fragments/getting-started-emscripten-wikiEmscriptenSDK.rst index 1c7ef82ec9acd..5fc9fd5f30c21 100644 --- a/site/source/docs/temp-fragments/getting-started-emscripten-wikiEmscriptenSDK.rst +++ b/site/source/docs/temp-fragments/getting-started-emscripten-wikiEmscriptenSDK.rst @@ -35,3 +35,36 @@ After installing the vs-tool plugin, a new 'Emscripten' platform will appear to Note: If you copied the Emscripten platform properties from the Win32 platform, be sure to go and clean up any leftover Win32-specific #defines and other configuration from the Emscripten platform! + +Raw HTML for toggle text +========================= + +There is also a good example of a Sphinx plugin that could add this directive: http://scopatz.github.io/hiddencode/ + +.. raw:: html + + <a href="javascript:hideshow(document.getElementById('adiv1'))">Installation instructions1</a> + + <div id="adiv1" style="display:none;"> + 1.The NSIS installers register the Emscripten SDK as a 'standard' Windows application. To install the SDK, download an NSIS .exe file (see above), double-click on it, and run through the installer to perform the installation. After the installer finishes, the full Emscripten toolchain will be available in the directory that was chosen during the installation, and no other steps are necessary. If your system has Visual Studio 2010 installed, the vs-tool MSBuild plugin will be automatically installed as well. + </div> + +.. raw:: html + <script type="text/javascript"> + function hideshow(which){ + if (!document.getElementById) + return + if (which.style.display=="none") + which.style.display="block" + else + which.style.display="none" + } + + </script> + +Some text that probably belongs in installing SDK from source. +======================================================================== + +This was cut from an SDK installation topic: + +"Run ``emsdk_env.bat`` (Windows) or ``source ./emsdk_env.sh`` (Linux and OSX) to set up the environment for the calling terminal." from topic "How do I check the installation status and version of the SDK and tools?". I think this is part of manual setup and doesn't belong here. \ No newline at end of file diff --git a/site/source/docs/tools_reference/emsdk.rst b/site/source/docs/tools_reference/emsdk.rst new file mode 100644 index 0000000000000..bcf2fe510c347 --- /dev/null +++ b/site/source/docs/tools_reference/emsdk.rst @@ -0,0 +1,221 @@ +.. _emsdk: + +===================================== +emsdk - Emscripten SDK Manager +===================================== + +**The Emscripten SDK management script (** ``emsdk`` **) is used to perform all SDK maintenance. You only need to "install" the SDK once; after that emsdk can do all further updates!** + +Purpose +============================================ + +With ``emsdk`` you can download, install or remove *any* SDK or Tool, ranging from the very first, through to the bleeding edge updates still on Github. Most operations are of the form ``emsdk command``. To access the *emsdk*, launch the *Emscripten Command Prompt*. + +This document provides the command syntax, and a :ref:`set of guides <emsdk_howto>` explaining how to perform both common and advanced maintenance operations. + + +Command line syntax +============================================ + +**emsdk** [**help** [**--old**] | **list** | **update** | **install** *<tool/sdk>* | **uninstall** *<tool/sdk>* | **activate** *<tool/sdk>*] + +or + +**emcmdprompt.bat** + +.. note:: For Mac OSX the commands are called with **./emsdk** and **./emcmdprompt.bat** respectively. + +Arguments +--------- + + +.. list-table:: + :header-rows: 1 + :widths: 20 80 + :class: wrap-table-content + + * - Command + - Description + * - ``list [--old]`` + - Lists all current SDKs and tools and their installation status. With the ``--old`` parameter, historical versions are also shown. + * - ``update`` + - Fetches the latest list of all available tools and SDKs (but does not install them) + * - ``install <tool/sdk>`` + - Downloads and installs the :ref:`specified tool or SDK <emsdk-specified-tool-sdk>`. + * - ``uninstall <tool/sdk>`` + - Removes the :ref:`specified tool or SDK <emsdk-specified-tool-sdk>` from the disk. + * - ``activate <tool/sdk>`` + - Sets the :ref:`specified tool or SDK <emsdk-specified-tool-sdk>` as the default tool in the system environment. + * - ``help`` + - Lists all supported commands. The same list is output if no command is specified. + +**emcmdprompt.bat** doesn't take any arguments. It spawns a new command prompt window with the Emscripten environment active. + +.. _emsdk-specified-tool-sdk: + +Tools and SDK targets +------------------------ + +The ``<tool/sdk>`` given above is one of the targets listed using ``emsdk list`` (or ``emsdk list --old``). + +Note that some of the tools and SDK names include *master* or *incoming*: these targets are used to clone and pull the very latest versions from the Emscripten incoming and master branches. + +Finally, you can specify a target of ``latest`` to grab the most current SDK. + +.. todo:: **HamishW** emcmdprompt.bat does not appear to work. Need to check with Jukka + + + +SDK manager concepts +============================== + +The *emsdk* can fetch the different versions of all the tools and SDKs. These are put into different directories under the main SDK installation folder, grouped by tool and version. + +A user-specific file (**~/.emscripten**) stores the "compiler configuration"; this configuration defines the specific set of tools that are :term:`active <Active Tool/SDK>`, and will be used by default if Emscripten in called on the **Emscripten Command Prompt*. + +The following terms are used when referring to the SDK and tool manager: + +.. glossary:: + + Tool + The basic unit of software bundled in the SDK. A Tool has a name and a version. For example, 'clang-3.2-32bit' is a Tool that contains the 32-bit version of the *Clang* v3.2 compiler. Other tools include *Emscripten*, *Java*, *Git*, *Node*, etc. + + SDK + A set of :term:`tools <Tool>`. For example, 'sdk-1.5.6-32bit' is an SDK consisting of the tools: clang-3.2-32bit, node-0.10.17-32bit, python-2.7.5.1-32bit and emscripten-1.5.6. + + Active Tool/SDK + The SDK can store multiple versions of tools and SDKs. The active tools/SDK is the set of tools that are used by default on the *Emscripten Command Prompt*. This compiler configuration is stored in a user-specific persistent file (**~/.emscripten**) and can be changed using *emsdk*. + + emsdk + This is the name of the manager script that Emscripten SDK is accessed through. Most operations are of the form ``emsdk command``. To access the *emsdk* script, launch the *Emscripten Command Prompt*. + + + +.. _emsdk_howto: + +"How to" guides +========================= + +The following topics explain how to perform both common and advanced maintenance operations, ranging from installing the latest SDK through to installing your own fork from Github. + + +How do I just get the latest SDK? +------------------------------------------------------------------------------------------------ +Use the ``update`` argument to fetch the current registry of available tools, and then the ``latest`` target to get the most recent SDK: :: + + emsdk update // Fetch the latest registry of available tools. + emsdk install latest // Download and install the latest SDK tools. + emsdk activate latest // Set up the compiler configuration to point to the "latest" SDK. + +Note that the commands are the same on Mac OSX, but you need to replace **emsdk** with **./emsdk**. + + +How do I use emsdk? +-------------------------------- + +Use ``emsdk help`` or just ``emsdk`` to get information about all available commands. + + +How do I check which versions of the SDK and tools are installed? +------------------------------------------------------------------------------------------------ + +To get a list of all currently installed tools and SDK versions (and all available tools) run: :: + emsdk list + +A line will be printed for each tool/SDK that is available for installation. The text ``INSTALLED`` will be shown for each tool that has already been installed. If a tool/SDK is currently active, a star (\*) will be shown next to it. + + +How do I install a tool/SDK version? +------------------------------------ + +Use the ``install`` argument to download and install a new tool or an SDK version: :: + + emsdk install <tool/sdk name> + + +.. _emsdk-remove-tool-sdk: + +How do I remove a tool or an SDK? +---------------------------------------------------------------- + +Use the ``uninstall`` argument to delete the given tool or SDK from the local computer: :: + + emsdk uninstall <tool/sdk name> + + +How do I check for updates to the Emscripten SDK? +---------------------------------------------------------------- + +First use the ``update`` command to fetch package information for all new tools and SDK versions. Then use ``install <tool/sdk name>`` to install a new version: :: + + emsdk update // Fetch the latest registry of available tools. + emsdk install <tool/sdk name> // Download and install the specified new version. + + +How do I change the currently active SDK version? +---------------------------------------------------------------- + +Toggle between different tools and SDK versions using the :term:`activate <Active Tool/SDK>` command. This will set up ``~/.emscripten`` to point to that particular tool: :: + + emsdk activate <tool/sdk name> + + +How do I install an old Emscripten compiler version? +---------------------------------------------------------------- + +*Emsdk* contains a history of old compiler versions that you can use to maintain your migration path. Use the ``list --old`` argument to get a list of archived tool and SDK versions, and ``emsdk install <name_of_tool>`` to install it: :: + + emsdk list --old + emsdk install <name_of_tool> + +On Windows, you can directly install an old SDK version by using one of the :ref:`archived offline NSIS installers <archived-nsis-windows-sdk-releases>`. + +.. _emsdk-master-or-incoming-sdk: + +How do I track the latest Emscripten development with the SDK? +------------------------------------------------------------------------------------------------ + +It is also possible to use the latest and greatest versions of the tools on the Github repositories! This allows you to obtain new features and latest fixes immediately as they are pushed to Github, without having to wait for release to be tagged. **No Github account or a fork of Emscripten is required.** + +To switch to using the latest upstream git development branch ``incoming``, run the following: + +:: + + # Install git. Skip if the system already has it. + emsdk install git-1.8.3 + + # Clone+pull the latest kripken/emscripten/incoming. + emsdk install sdk-incoming-64bit + + # Set the incoming SDK as the active. + emsdk activate sdk-incoming-64bit + +If you want to use the upstream stable branch ``master``, then replace ``-incoming-`` with ``-master-`` above. + + + +How do I use my own Emscripten Github fork with the SDK? +---------------------------------------------------------------- + +It is also possible to use your own fork of the Emscripten repository via the SDK. This is useful in the case when you want to make your own modifications to the Emscripten toolchain, but still keep using the SDK environment and tools. + +The way this works is that you first install the ``sdk-incoming`` SDK as in the :ref:`previous section <emsdk-master-or-incoming-sdk>`. Then you use familiar git commands to replace this branch with the information from your own fork: + +:: + + cd emscripten/incoming + + # Add a git remote link to your own repository. + git remote add myremote https://github.com/mygituseraccount/emscripten.git + + # Obtain the changes in your link. + git fetch myremote + + # Switch the emscripten-incoming tool to use your fork. + git checkout -b myincoming --track myremote/incoming + +You can switch back and forth between remotes via the ``git checkout`` command as usual. + + + + diff --git a/site/source/docs/tools_reference/index.rst b/site/source/docs/tools_reference/index.rst new file mode 100644 index 0000000000000..2e33782ff19ba --- /dev/null +++ b/site/source/docs/tools_reference/index.rst @@ -0,0 +1,16 @@ +.. _tools-reference: + +======================================= +Tools Reference (under-construction) +======================================= + +This section provides reference for the main :term:`tools <Tool>` in the Emscripten toolchain. + + +.. toctree:: + :maxdepth: 1 + + emsdk + + + diff --git a/site/source/index.rst b/site/source/index.rst index 39b91857e92d8..fe157e965e8a1 100644 --- a/site/source/index.rst +++ b/site/source/index.rst @@ -31,7 +31,8 @@ News docs/compiling/index docs/packaging/index docs/contributing/index - docs/api_reference/index + docs/api_reference/index + docs/tools_reference/index wiki_static/index docs/site/about From 50708bcc2a2828bbee084818b126a85955ba9e2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jukka=20Jyl=C3=A4nki?= <jujjyl@gmail.com> Date: Thu, 31 Jul 2014 11:27:31 +0300 Subject: [PATCH 17/30] Fix other.test_EMCC_BUILD_DIR on Windows ('/' vs '\' path delimiter comparison issue) --- tests/test_other.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_other.py b/tests/test_other.py index afcc7bd054eca..427665cce3b9c 100644 --- a/tests/test_other.py +++ b/tests/test_other.py @@ -2387,7 +2387,7 @@ def test_EMCC_BUILD_DIR(self): printErr('dir was ' + process.env.EMCC_BUILD_DIR); ''') out, err = Popen([PYTHON, EMCC, path_from_root('tests', 'hello_world.cpp'), '--js-library', 'lib.js'], stderr=PIPE).communicate() - self.assertContained('dir was ' + self.get_dir().replace('\\', '/'), err) + self.assertContained('dir was ' + os.path.normpath(self.get_dir()), err) def test_float_h(self): process = Popen([PYTHON, EMCC, path_from_root('tests', 'float+.c')], stdout=PIPE, stderr=PIPE) From 6579bdbd26538da10780363b420086495b0dbdd6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jukka=20Jyl=C3=A4nki?= <jujjyl@gmail.com> Date: Thu, 31 Jul 2014 11:53:00 +0300 Subject: [PATCH 18/30] Work around node.js output flush bug https://github.com/joyent/node/issues/1669 to fix other.test_warn_undefined on Windows. The end of the output buffer would not get printed during the test, which would cause the test to fail. See also https://github.com/kripken/emscripten/issues/2582 --- src/compiler.js | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/src/compiler.js b/src/compiler.js index a86af011f0f97..2a98b129f44f2 100644 --- a/src/compiler.js +++ b/src/compiler.js @@ -319,9 +319,29 @@ try { } } } catch(err) { - printErr('Internal compiler error in src/compiler.js! Please raise a bug report at https://github.com/kripken/emscripten/issues/ with a log of the build and the input files used to run. Exception message: ' + err + ' | ' + err.stack); - if (ENVIRONMENT_IS_NODE) process.exit(1); - else throw err; + if (err.indexOf('Aborting compilation due to previous errors') != -1) { + // Compiler failed on user error, print out the error message. + printErr(err + ' | ' + err.stack); + } else { + // Compiler failed on internal compiler error! + printErr('Internal compiler error in src/compiler.js! Please raise a bug report at https://github.com/kripken/emscripten/issues/ with a log of the build and the input files used to run. Exception message: ' + err + ' | ' + err.stack); + } + + if (ENVIRONMENT_IS_NODE) { + // Work around a node.js bug where stdout buffer is not flushed at process exit: + // Instead of process.exit() directly, wait for stdout flush event. + // See https://github.com/joyent/node/issues/1669 and https://github.com/kripken/emscripten/issues/2582 + // Workaround is based on https://github.com/RReverser/acorn/commit/50ab143cecc9ed71a2d66f78b4aec3bb2e9844f6 + process['stdout']['once']('drain', function () { + process['exit'](1); + }); + console.log(' '); // Make sure to print something to force the drain event to occur, in case the stdout buffer was empty. + // Work around another node bug where sometimes 'drain' is never fired - make another effort + // to emit the exit status, after a significant delay (if node hasn't fired drain by then, give up) + setTimeout(function() { + process['exit'](1); + }, 500); + } else throw err; } //var M = keys(tokenCacheMisses).map(function(m) { return [m, misses[m]] }).sort(function(a, b) { return a[1] - b[1] }); From a37b5dcb51ba6b7dd4078e1c10e6a8daa5b62d33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jukka=20Jyl=C3=A4nki?= <jujjyl@gmail.com> Date: Thu, 31 Jul 2014 18:37:23 +0300 Subject: [PATCH 19/30] Set argv[0] to store path in forward slashes also on Windows. Fixes #2607. --- src/shell.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/shell.js b/src/shell.js index 7f556fb9fde39..71efd202cd82e 100644 --- a/src/shell.js +++ b/src/shell.js @@ -70,7 +70,7 @@ if (ENVIRONMENT_IS_NODE) { globalEval(read(f)); }; - Module['thisProgram'] = process['argv'][1]; + Module['thisProgram'] = process['argv'][1].replace(/\\/g, '/'); Module['arguments'] = process['argv'].slice(2); if (typeof module !== 'undefined') { From bbf4171e1b6067ebcd39fbd6492ba7c9a879db74 Mon Sep 17 00:00:00 2001 From: Alon Zakai <alonzakai@gmail.com> Date: Thu, 31 Jul 2014 12:33:02 -0700 Subject: [PATCH 20/30] when using EMCC_ONLY_FORCED_STDLIBS, must export all the symbols in deps_info, as we don't know which are specifically needed; fixes #2611 --- tests/test_other.py | 25 +++++++++++++++++++++++++ tools/system_libs.py | 14 ++++++++++++-- 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/tests/test_other.py b/tests/test_other.py index 427665cce3b9c..738d4afe4c103 100644 --- a/tests/test_other.py +++ b/tests/test_other.py @@ -3453,6 +3453,31 @@ def test(name): del os.environ['EMCC_FORCE_STDLIBS'] del os.environ['EMCC_ONLY_FORCED_STDLIBS'] + def test_only_force_stdlibs_2(self): + open('src.cpp', 'w').write(r''' +#include <iostream> +#include <stdexcept> + +int main() +{ + try { + throw std::exception(); + std::cout << "got here" << std::endl; + } + catch (const std::exception& ex) { + std::cout << "Caught exception: " << ex.what() << std::endl; + } +} +''') + try: + os.environ['EMCC_FORCE_STDLIBS'] = 'libc,libcxxabi,libcxx' + os.environ['EMCC_ONLY_FORCED_STDLIBS'] = '1' + Popen([PYTHON, EMXX, 'src.cpp']).communicate() + self.assertContained('Caught exception: std::exception', run_js('a.out.js', stderr=PIPE)) + finally: + del os.environ['EMCC_FORCE_STDLIBS'] + del os.environ['EMCC_ONLY_FORCED_STDLIBS'] + def test_strftime_zZ(self): open('src.cpp', 'w').write(r''' #include <cerrno> diff --git a/tools/system_libs.py b/tools/system_libs.py index 01b8ec0e40b09..6922727216049 100644 --- a/tools/system_libs.py +++ b/tools/system_libs.py @@ -460,8 +460,10 @@ def create_gl(): # Setting this will only use the forced libs in EMCC_FORCE_STDLIBS. This avoids spending time checking # for unresolved symbols in your project files, which can speed up linking, but if you do not have - # the proper list of actually needed libraries, errors can occur. - if os.environ.get('EMCC_ONLY_FORCED_STDLIBS'): + # the proper list of actually needed libraries, errors can occur. See below for how we must + # export all the symbols in deps_info when using this option. + only_forced = os.environ.get('EMCC_ONLY_FORCED_STDLIBS') + if only_forced: temp_files = [] # Scan symbols @@ -496,6 +498,14 @@ def add_back_deps(need): for symbols in symbolses: add_back_deps(symbols) + # If we are only doing forced stdlibs, then we don't know the actual symbols we need, + # and must assume all of deps_info must be exported. Note that this might cause + # warnings on exports that do not exist. + if only_forced: + for key, value in deps_info.iteritems(): + for dep in value: + shared.Settings.EXPORTED_FUNCTIONS.append('_' + dep) + all_needed = set() for symbols in symbolses: all_needed.update(symbols.undefs) From 292f6f3593576f2cfa93ec162a3ae1c2449acdc6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jukka=20Jyl=C3=A4nki?= <jujjyl@gmail.com> Date: Thu, 31 Jul 2014 23:40:47 +0300 Subject: [PATCH 21/30] Fix test_env and test_environ on Windows after previous convention change to default shell.js to store argv[0] in forward slashes on Windows as well. --- tests/test_core.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/test_core.py b/tests/test_core.py index b879f1b2375a7..98e454155be90 100644 --- a/tests/test_core.py +++ b/tests/test_core.py @@ -4564,8 +4564,8 @@ def test_env(self): src = open(path_from_root('tests', 'env', 'src.c'), 'r').read() expected = open(path_from_root('tests', 'env', 'output.txt'), 'r').read() self.do_run(src, [ - expected.replace('{{{ THIS_PROGRAM }}}', './this.program'), # spidermonkey, v8 - expected.replace('{{{ THIS_PROGRAM }}}', os.path.join(os.path.normpath(self.get_dir()), 'src.cpp.o.js')) # node, can find itself properly + expected.replace('{{{ THIS_PROGRAM }}}', os.path.join(self.get_dir(), 'src.cpp.o.js').replace('\\', '/')), # node, can find itself properly + expected.replace('{{{ THIS_PROGRAM }}}', './this.program') # spidermonkey, v8 ]) def test_environ(self): @@ -4573,8 +4573,8 @@ def test_environ(self): src = open(path_from_root('tests', 'env', 'src-mini.c'), 'r').read() expected = open(path_from_root('tests', 'env', 'output-mini.txt'), 'r').read() self.do_run(src, [ - expected.replace('{{{ THIS_PROGRAM }}}', './this.program'), # spidermonkey, v8 - expected.replace('{{{ THIS_PROGRAM }}}', os.path.join(os.path.normpath(self.get_dir()), 'src.cpp.o.js')) # node, can find itself properly + expected.replace('{{{ THIS_PROGRAM }}}', os.path.join(self.get_dir(), 'src.cpp.o.js').replace('\\', '/')), # node, can find itself properly + expected.replace('{{{ THIS_PROGRAM }}}', './this.program') # spidermonkey, v8 ]) def test_systypes(self): From 9a02807cac7040455901574f1f3cbb38ddd0b040 Mon Sep 17 00:00:00 2001 From: hamishwillee <hamishwillee@gmail.com> Date: Fri, 1 Aug 2014 19:24:53 +1000 Subject: [PATCH 22/30] Fixes to downloads/tools stuff. Draft update of File system API to use Sphinx code support --- .../docs/api_reference/Filesystem-API.rst | 991 +++++++++--------- .../source/docs/getting_started/downloads.rst | 40 +- site/source/docs/site/glossary.rst | 35 +- .../docs/tools_reference/emcmdprompt.rst | 23 + site/source/docs/tools_reference/emsdk.rst | 86 +- site/source/docs/tools_reference/index.rst | 3 +- 6 files changed, 625 insertions(+), 553 deletions(-) create mode 100644 site/source/docs/tools_reference/emcmdprompt.rst diff --git a/site/source/docs/api_reference/Filesystem-API.rst b/site/source/docs/api_reference/Filesystem-API.rst index e77f45777bca2..bc491fa06e16b 100644 --- a/site/source/docs/api_reference/Filesystem-API.rst +++ b/site/source/docs/api_reference/Filesystem-API.rst @@ -5,711 +5,714 @@ Filesystem API (wiki-import) ============================ .. note:: This article was migrated from the wiki (Fri, 25 Jul 2014 04:21) and is now the "master copy" (the version in the wiki will be deleted). It may not be a perfect rendering of the original but we hope to fix that soon! -File I/O in emscripten is provided by the -`FS <https://github.com/kripken/emscripten/blob/incoming/src/library_fs.js>`__ -library. This same library is used internally for all of emscripten's -libc and libcxx file I/O. - -Emscripten deals predominantly with synchronous file I/O, so the -majority of the FS member functions offer a synchronous interface, with -errors being reported by raising exceptions of type ``FS.ErrnorError``. - -The file data in emscription is partioned by mounted filesystems, of -which several are provided to work with. By default, an instance of -`MEMFS <Files#memfs>`__ is mounted to ``/`` and instances of -`NODEFS <Files#nodefs>`__ and `IDBFS <Files#idbfs>`__ can be mounted to -other directories if your application needs to `persist -data <Files#persistence>`__. +File I/O in Emscripten is provided by the `FS <https://github.com/kripken/emscripten/blob/incoming/src/library_fs.js>`_ library. This same library is used internally for all of emscripten's libc and libcxx file I/O. + +Emscripten deals predominantly with synchronous file I/O, so the majority of the FS member functions offer a synchronous interface, with errors being reported by raising exceptions of type ``FS.ErrnorError``. + +The file data in emscription is partioned by mounted filesystems, of which several are provided to work with. By default, an instance of `MEMFS` is mounted to ``/`` and instances of `NODEFS` and `IDBFS` can be mounted to other directories if your application needs to `persist data <Files#persistence>`__. + Persistence ------------ +=========== -Applications being compiled with emscripten expect synchronous I/O, -therefore, emscripten itself must provide filesystems with completely -synchronous interfaces. However, due to JavaScript's event-driven -nature, most persistent storage options offer only asynchronous -interfaces. +Applications being compiled with Emscripten expect synchronous I/O, therefore, Emscripten itself must provide filesystems with completely synchronous interfaces. However, due to JavaScript's event-driven nature, most persistent storage options offer only asynchronous interfaces. -Because of this, emscripten offers multiple filesystems that can be -mounted with `FS.mount <Files#fsmounttype-opts-mountpoint>`__ to help -deal with persistence depending on the execution context. +Because of this, Emscripten offers multiple filesystems that can be mounted with :js:func:`FS.mount` to help deal with persistence depending on the execution context. MEMFS -~~~~~ +=========== -This is the default filesystem mounted at ``/`` when the runtime is -initialized. All files exist strictly in-memory, and any data written to -it is lost when the page is reloaded. +This is the default filesystem mounted at ``/`` when the runtime is initialized. All files exist strictly in-memory, and any data written to it is lost when the page is reloaded. NODEFS -~~~~~~ +=========== -NODEFS lets a program in node directly access files on the local -filesystem, as if the problem were running normally. See `this -test <https://github.com/kripken/emscripten/blob/master/tests/fs/test_nodefs_rw.c>`__ -for an example. +NODEFS lets a program in node directly access files on the local filesystem, as if the problem were running normally. See `this test <https://github.com/kripken/emscripten/blob/master/tests/fs/test_nodefs_rw.c>`__ for an example. Mount options -^^^^^^^^^^^^^ +------------- - root ``string`` Path to persist the data to on the local filesystem. -This filesystem is only for use when running inside of node. It uses -node's synchronous fs API to immediately persist any data written to -emscripten's filesystem to your local disk. +This filesystem is only for use when running inside of node. It uses node's synchronous fs API to immediately persist any data written to emscripten's filesystem to your local disk. IDBFS -~~~~~ +===== -This filesystem is only for use when running inside of the browser. Due -to the browser not offering any synchronous APIs for persistent storage, -by default all writes exist only temporarily in-memory. However, the -IDBFS filesystem implements the -`FS.syncfs <Files#fssyncfspopulate-callback>`__ interface, which once -called will persist any operations to a backing IndexedDB instance. +This filesystem is only for use when running inside of the browser. Due to the browser not offering any synchronous APIs for persistent storage, by default all writes exist only temporarily in-memory. However, the IDBFS filesystem implements the :js:func`FS.syncfs` interface, which once called will persist any operations to a backing IndexedDB instance. Devices -------- +=========== + +Emscripten supports registering arbitrary device drivers composed of a device id and a set of unique stream callbacks. Once a driver has been registered with :js:func:`FS.registerDevice`, a device node (acting as an interface between the device and the filesystem) can be created to reference it with :js:func`FS.mkdev`. Any stream referencing the new node will inherit the stream callbacks registered for the device, making all of the high-level FS operations transparently interact with the device. -Emscripten supports registering arbitrary device drivers composed of a -device id and a set of unique stream callbacks. Once a driver has been -registered with `FS.registerDevice <#fsregisterdevicedev-ops>`__, a -device node (acting as an interface between the device and the -filesystem) can be created to reference it with -`FS.mkdev <#fsmkdevpath-mode-dev>`__. Any stream referencing the new -node will inherit the stream callbacks registered for the device, making -all of the high-level FS operations transparently interact with the -device. -FS.makedev(ma, mi) -^^^^^^^^^^^^^^^^^^ -Converts a major and minor number into a single unique integer. +.. js:function:: FS.makedev(ma, mi) -FS.registerDevice(dev, ops) -^^^^^^^^^^^^^^^^^^^^^^^^^^^ + Converts a major and minor number into a single unique integer. + + :param ma: **HamishW** + :param mi: **HamishW** + :throws **HamishW**: -Registers a device driver for the specified id / callbacks. + + +.. js:function:: FS.registerDevice(dev, ops) + + Registers a device driver for the specified id / callbacks. + + :param dev: ``MEMFS`` ``NODEFS`` ``IDBFS`` + :param object ops: **HamishW** + :throws **HamishW**: + Setting up standard I/O devices -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Emscripten standard I/O works by going though the virtual -``/dev/stdin``, ``/dev/stdout`` and ``/dev/stderr`` devices. You can set -them up using your own I/O functions by calling -``FS.init(input_callback, output_callback, error_callback)`` (all -arguments optional). Note that all the configuration should be done -before the main ``run()`` method is executed, typically by implementing -``Module.preRun``, see :ref:`Interacting-with-code`. - -- The input callback will be called with no parameters whenever the - program attempts to read from ``stdin``. It should return an ASCII - character code when data is available, or ``null`` when it isn't. -- The output callback will be called with an ASCII character code - whenever the program writes to ``stdout``. It may also be called with - ``null`` to flush the output. -- The error callback is similar to the output one, except it is called - when data is written to ``stderr``. - -If any of the callbacks throws an exception, it will be caught and -handled as if the device malfunctioned. +------------------------------- + +Emscripten standard I/O works by going though the virtual ``/dev/stdin``, ``/dev/stdout`` and ``/dev/stderr`` devices. You can set them up using your own I/O functions by calling ``FS.init(input_callback, output_callback, error_callback)`` (all arguments optional). Note that all the configuration should be done before the main ``run()`` method is executed, typically by implementing ``Module.preRun``, see :ref:`Interacting-with-code`. + +- The input callback will be called with no parameters whenever the program attempts to read from ``stdin``. It should return an ASCII character code when data is available, or ``null`` when it isn't. +- The output callback will be called with an ASCII character code whenever the program writes to ``stdout``. It may also be called with ``null`` to flush the output. +- The error callback is similar to the output one, except it is called when data is written to ``stderr``. + +If any of the callbacks throws an exception, it will be caught and handled as if the device malfunctioned. By default: -- ``stdin`` will read from the terminal in command line engines and use - ``window.prompt()`` in browsers (in both cases, with line buffering). -- ``stdout`` will use a ``print`` function if one such is defined, - printing to the terminal in command line engines and to the browser - console in browsers that have a console (again, line-buffered). +- ``stdin`` will read from the terminal in command line engines and use ``window.prompt()`` in browsers (in both cases, with line buffering). +- ``stdout`` will use a ``print`` function if one such is defined, printing to the terminal in command line engines and to the browser console in browsers that have a console (again, line-buffered). - ``stderr`` will use the same output function as ``stdout``. + Filesystem ----------- +=========== + + +.. js:function:: FS.mount(type, opts, mountpoint) + + Mounts the FS object specified by ``type`` to the directory specified by ``mountpoint``. The ``opts`` objects is specific to each filesystem type. + + :param type: ``MEMFS`` ``NODEFS`` ``IDBFS`` + :param object opts: **HamishW** + :param string mountpoint: **HamishW** + :throws **HamishW**: -FS.mount(type, opts, mountpoint) -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -- type `MEMFS <Files#memfs>`__ `NODEFS <Files#nodefs>`__ - `IDBFS <Files#idbfs>`__ -- opts ``object`` -- mountpoint ``string`` -Mounts the FS object specified by ``type`` to the directory specified by -``mountpoint``. The ``opts`` objects is specific to each filesystem -type. +.. js:function:: FS.syncfs(populate, callback) -FS.syncfs(populate, callback) -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + Responsible for iterating and synchronizing all mounted filesystems in an asynchronous fashion. -- populate ``bool`` + The ``populate`` flag is used to control the intended direction of the underlying synchronization between Emscripten`s internal data, and the filesystem's persistent data. ``populate=true`` is used for initializing Emscripten's filesystem data with the data from the filesystem's persistent source, and ``populate=false`` is used to save emscripten's filesystem data to the filesystem's persistent source. -Responsible for iterating and synchronizing all mounted filesystems in -an asynchronous fashion. + For example: -The ``populate`` flag is used to control the intended direction of the -underlying synchronization between emscripten's internal data, and the -filesystem's persistent data. ``populate=true`` is used for initializing -emscripten's filesystem data with the data from the filesystem's -persistent source, and ``populate=false`` is used to save emscripten's -filesystem data to the filesystem's persistent source. + .. code:: javascript -Example -''''''' + function myAppStartup(callback) { + FS.mkdir('/data'); + FS.mount(IDBFS, {}, '/data'); -.. code:: javascript + FS.syncfs(true, function (err) { + // handle callback + }); + } - function myAppStartup(callback) { - FS.mkdir('/data'); - FS.mount(IDBFS, {}, '/data'); + function myAppShutdown(callback) { + FS.syncfs(function (err) { + // handle callback + }); + } - FS.syncfs(true, function (err) { - // handle callback - }); - } + An actual test implementing this functionality can be seen at https://github.com/kripken/emscripten/blob/master/tests/fs/test\_idbfs\_sync.c. - function myAppShutdown(callback) { - FS.syncfs(function (err) { - // handle callback - }); - } + .. note:: Currently, only the `IDBFS`_ filesystem implements the interfaces needed by this. All other filesystems are completely synchronous and don't require synchronization. -An actual test implementing this functionality can be seen at -https://github.com/kripken/emscripten/blob/master/tests/fs/test\_idbfs\_sync.c. + :param bool populate: ``true`` to initialize Emscripten's filesystem data with the data from the filesystem's persistent source, and ``false`` to save emscripten's filesystem data to the filesystem's persistent source. + :param callback: **HamishW** + :throws **HamishW**: -NOTE: Currently, only the `IDBFS <Files#idbfs>`__ filesystem implements -the interfaces needed by this. All other filesystems are completely -synchronous and don't require synchronization. -FS.mkdir(path, mode) -^^^^^^^^^^^^^^^^^^^^ +.. js:function:: FS.mkdir(path, mode) -- path ``string`` -- mode ``int`` default = 0777 + Creates a new directory node in the filesystem. For example: -Creates a new directory node in the filesystem. + .. code:: javascript -Example -''''''' + FS.mkdir('/data'); + + :param string path: The path name for the new directory node. + :param int mode: **HamishW** Link to mode values. The default is 0777. + :throws **HamishW**: -.. code:: javascript - FS.mkdir('/data'); +.. js:function:: FS.mkdev(path, mode, dev) -FS.mkdev(path, mode, dev) -^^^^^^^^^^^^^^^^^^^^^^^^^ + Creates a new device node in the filesystem referencing the device driver registered for ``dev``. For example: -- path ``string`` -- mode ``int`` default = 0777 -- dev ``int`` + .. code:: javascript -Creates a new device node in the filesystem referencing the device -driver registered for ``dev``. + var id = FS.makedev(64, 0); + FS.registerDevice(id, {}); + FS.mkdev('/dummy', id); -Example -''''''' + :param string path: The path name for the new device node. + :param int mode: **HamishW** Link to mode values. The default is 0777. + :param int dev: **HamishW**. + :throws **HamishW**: -.. code:: javascript - var id = FS.makedev(64, 0); - FS.registerDevice(id, {}); - FS.mkdev('/dummy', id); +.. js:function:: FS.symlink(oldpath, newpath) -FS.symlink(oldpath, newpath) -^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + Creates a symlink node at ``newpath`` linking to ``oldpath``. For example: -- oldpath ``string`` -- newpath ``string`` + .. code:: javascript -Creates a symlink node at ``newpath`` linking to ``oldpath``. + FS.writeFile('file', 'foobar'); + FS.symlink('file', 'link'); -Example -''''''' + :param string oldpath: The path name of the file to link to. + :param string newpath: The path to the new symlink node to ``oldpath``. + :throws **HamishW**: -.. code:: javascript - FS.writeFile('file', 'foobar'); - FS.symlink('file', 'link'); -FS.rename(oldpath, newpath) -^^^^^^^^^^^^^^^^^^^^^^^^^^^ +.. js:function:: FS.rename(oldpath, newpath) -- oldpath ``string`` -- newpath ``string`` + Renames the node at ``oldpath`` to ``newpath``. For example: -Renames the node at ``oldpath`` to ``newpath``. + .. code:: javascript -Example -''''''' + FS.writeFile('file', 'foobar'); + FS.rename('file', 'newfile'); -.. code:: javascript + :param string oldpath: The old path name. + :param string newpath: The new path name + :throws **HamishW**: + - FS.writeFile('file', 'foobar'); - FS.rename('file', 'newfile'); +.. js:function:: FS.rmdir(path) -FS.rmdir(path) -^^^^^^^^^^^^^^ + Removes an empty directory located at ``path``. -- path ``string`` + Example -Removes an empty directory located at ``path``. + .. code:: javascript -Example -''''''' + FS.mkdir('data'); + FS.rmdir('data'); -.. code:: javascript + :param string path: Path of the directory to be removed. + :throws **HamishW**: - FS.mkdir('data'); - FS.rmdir('data'); -FS.unlink(path) -^^^^^^^^^^^^^^^ +.. js:function:: FS.unlink(path) -- path ``string`` + Unlinks the node at ``path`` (this was previously called + ``deleteFile``). + + .. COMMENT :: **HamishW** What does unlinking actually mean? + + For example: -Unlink the node at ``path``. (This was previously called -``deleteFile``.) + .. code:: javascript -Example -''''''' + FS.writeFile('/foobar.txt', 'Hello, world'); + FS.unlink('/foobar.txt'); -.. code:: javascript + :param string path: Path of the target node. + :throws **HamishW**: + - FS.writeFile('/foobar.txt', 'Hello, world'); - FS.unlink('/foobar.txt'); + +.. js:function:: FS.readlink(path) -FS.readlink(path) -^^^^^^^^^^^^^^^^^ + Gets the string value stored in the symbolic link at ``path``. For example: -- path ``string`` + .. code:: c -Returns the string value stored in the symbolic link at ``path``. + #include <stdio.h> + #include <emscripten.h> -Example -''''''' + int main() { + EM_ASM( + FS.writeFile('file', 'foobar'); + FS.symlink('file', 'link'); + console.log(FS.readlink('link')); + ); + return 0; + } -.. code:: c + outputs - #include <stdio.h> - #include <emscripten.h> + :: - int main() { - EM_ASM( - FS.writeFile('file', 'foobar'); - FS.symlink('file', 'link'); - console.log(FS.readlink('link')); - ); - return 0; - } + file + + :param string path: Path of the target file. + :returns: The string value stored in the symbolic link at ``path``. + :throws **HamishW**: + -outputs -:: +.. js:function:: FS.stat(path) - file + Gets a JavaScript object of stats for the node at ``path``. For example: -FS.stat(path) -^^^^^^^^^^^^^ + .. code:: c -- path ``string`` + #include <stdio.h> + #include <emscripten.h> -Returns a JavaScript object of stats for the node at ``path``. + int main() { + EM_ASM( + FS.writeFile('file', 'foobar'); + console.log(FS.stat('file')); + ); + return 0; + } -Example -''''''' + outputs -.. code:: c + :: - #include <stdio.h> - #include <emscripten.h> + { + dev: 1, + ino: 13, + mode: 33206, + nlink: 1, + uid: 0, + gid: 0, + rdev: 0, + size: 6, + atime: Mon Nov 25 2013 00:37:27 GMT-0800 (PST), + mtime: Mon Nov 25 2013 00:37:27 GMT-0800 (PST), + ctime: Mon Nov 25 2013 00:37:27 GMT-0800 (PST), + blksize: 4096, + blocks: 1 + } - int main() { - EM_ASM( - FS.writeFile('file', 'foobar'); - console.log(FS.stat('file')); - ); - return 0; - } + :param string path: Path of the target file. + :throws **HamishW**: -outputs -:: +.. js:function:: FS.lstat(path) - { - dev: 1, - ino: 13, - mode: 33206, - nlink: 1, - uid: 0, - gid: 0, - rdev: 0, - size: 6, - atime: Mon Nov 25 2013 00:37:27 GMT-0800 (PST), - mtime: Mon Nov 25 2013 00:37:27 GMT-0800 (PST), - ctime: Mon Nov 25 2013 00:37:27 GMT-0800 (PST), - blksize: 4096, - blocks: 1 - } + Identical to :ref:`FS.stat`, However, if ``path`` is a symbolic link then the returned stats will be for the link itself, not the file that it links to. -FS.lstat(path) -^^^^^^^^^^^^^^ + :param string path: Path of the target file. + :throws **HamishW**: -- path ``string`` -Identical to ``FS.stat``, However, if ``path`` is a symbolic link then -the returned stats will be for the link itself, not the file that it -links to. +.. js:function:: FS.chmod(path, mode) -FS.chmod(path, mode) -^^^^^^^^^^^^^^^^^^^^ + Change the mode flags for ``path`` to ``mode``. For example: -- path ``string`` -- mode ``int`` + .. code:: javascript -Change the mode flags for ``path`` to ``mode``. + FS.writeFile('forbidden', 'can\'t touch this'); + FS.chmod('forbidden', 0000); -Example -''''''' + :param string path: Path of the target file. + :param int mode: **HamishW**. + :throws **HamishW**: -.. code:: javascript - FS.writeFile('forbidden', 'can\'t touch this'); - FS.chmod('forbidden', 0000); -FS.lchmod(path, mode) -^^^^^^^^^^^^^^^^^^^^^ +.. js:function:: FS.lchmod(path, mode) -- path ``string`` -- mode ``int`` + Identical to :ref:`FS.chmod`. However, if ``path`` is a symbolic link then the mode will be set on the link itself, not the file that it links to. -Identical to ``FS.chmod``. However, if ``path`` is a symbolic link then -the mode will be set on the link itself, not the file that it links to. + :param string path: Path of the target file. + :param int mode: **HamishW**. + :throws **HamishW**: -FS.fchmod(fd, mode) -^^^^^^^^^^^^^^^^^^^ -- fd ``int`` -- mode ``int`` +.. js:function:: FS.fchmod(fd, mode) -Identical to ``FS.chmod``. However, a raw file decriptor is supplied as -``fd``. + Identical to :ref:`FS.chmod`. However, a raw file descriptor is supplied as ``fd``. -FS.chown(path, uid, gid) -^^^^^^^^^^^^^^^^^^^^^^^^ + :param int fd: Descriptor of target file. + :param int mode: **HamishW**. + :throws **HamishW**: -- path ``string`` -- uid ``int`` -- gid ``int`` -Set ``uid`` and ``gid`` properties of the node at ``path``. -FS.lchown(path, uid, gid) -^^^^^^^^^^^^^^^^^^^^^^^^^ -- path ``string`` -- uid ``int`` -- gid ``int`` +.. js:function:: FS.chown(path, uid, gid) -Identical to ``FS.chown``. However, if path is a symbolic link then the -properties will be set on the link itself, not the file that it links -to. + Set ``uid`` and ``gid`` properties of the node at ``path``. -FS.fchown(fd, uid, gid) -^^^^^^^^^^^^^^^^^^^^^^^ + :param string path: Path of the target file. + :param int uid: **HamishW**. + :param int gid: **HamishW**. + :throws **HamishW**: -- fd ``int`` -- uid ``int`` -- gid ``int`` -Identical to ``FS.chown``. However, a raw file decriptor is supplied as -``fd``. -FS.truncate(path, len) -^^^^^^^^^^^^^^^^^^^^^^ -- path ``string`` -- len ``int`` +.. js:function:: FS.lchown(path, uid, gid) -Truncates a file to the specified length. + Identical to Identical to :ref:`FS.chown`. However, if path is a symbolic link then the properties will be set on the link itself, not the file that it links to. -Example -''''''' + :param string path: Path of the target file. + :param int uid: **HamishW**. + :param int gid: **HamishW**. + :throws **HamishW**: -.. code:: c - #include <stdio.h> - #include <emscripten.h> - int main() { - EM_ASM( - FS.writeFile('file', 'foobar'); - FS.truncate('file', 3); - console.log(FS.readFile('file', { encoding: 'utf8' })); - ); - return 0; - } +.. js:function:: FS.fchown(fd, uid, gid) -outputs + Identical to :ref:`FS.chown`. However, a raw file descriptor is supplied as ``fd``. -:: + :param int fd: Descriptor of target file. + :param int uid: **HamishW**. + :param int gid: **HamishW**. + :throws **HamishW**: - foo + -FS.ftruncate(fd, len) -^^^^^^^^^^^^^^^^^^^^^ +.. js:function:: FS.truncate(path, len) -- fd ``int`` -- len ``int`` + Truncates a file to the specified length. For example: -Truncates the file identified by the file descriptor to the specified -length. -FS.utime(path, atime, mtime) -^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + .. code:: c -- path ``string`` -- atime ``int`` -- mtime ``int`` + #include <stdio.h> + #include <emscripten.h> -Change the timestamps of the file located at ``path``. + int main() { + EM_ASM( + FS.writeFile('file', 'foobar'); + FS.truncate('file', 3); + console.log(FS.readFile('file', { encoding: 'utf8' })); + ); + return 0; + } -FS.open(path, flags, [mode]) -^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + outputs -- path ``string`` -- flags ``sring`` -- mode ``int`` default = 0666 + :: -Opens a file with the specified flags. ``flags`` can be: + foo + + :param string path: Path of the file to be truncated. + :param int len: The truncation length for the file. + :throws ERRNO_CODES.EINVAL: + :throws ERRNO_CODES.EPERM: + :throws ERRNO_CODES.EISDIR: + + + +.. js:function:: FS.ftruncate(fd, len) -- 'r' - Open file for reading. -- 'r+' - Open file for reading and writing. -- 'w' - Open file for writing. -- 'wx' - Like 'w' but fails if path exists. -- 'w+' - Open file for reading and writing. The file is created if it - does not exist or truncated if it exists. -- 'wx+' - Like 'w+' but fails if path exists. -- 'a' - Open file for appending. The file is created if it does not - exist. -- 'ax' - Like 'a' but fails if path exists. -- 'a+' - Open file for reading and appending. The file is created if it - does not exist. -- 'ax+' - Like 'a+' but fails if path exists. + Truncates the file identified by the ``fd`` to the specified length (``len``). -``mode`` specifies the permissions for the file, and are only used if -the file is created. + :param int fd: Descriptor of file to be truncated. + :param int len: The truncation length for the file. + :throws ERRNO_CODES.EBADF: + :throws ERRNO_CODES.EINVAL: + :throws ERRNO_CODES.EPERM: + :throws ERRNO_CODES.EISDIR: -Returns a stream object. -FS.close(stream) -^^^^^^^^^^^^^^^^ +.. js:function:: FS.utime(path, atime, mtime) -- stream ``object`` + Change the timestamps of the file located at ``path``. Note that in the current implementation the stored timestamp is a single value, the maximum of ``atime`` and ``mtime``. + + :param string path: The path of the file to update. + :param int atime: The file modify time. + :param int mtime: The file access time. -Closes the file stream. + .. COMMENT :: **HamishW** what is the format of the time? Seconds since unix/posix start time in 1970? + -FS.llseek(stream, offset, whence) -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +.. js:function:: FS.open(path, flags [, mode]) -- stream ``object`` -- offset ``int`` -- whence ``int`` + Opens a file with the specified flags. ``flags`` can be: -Repositions the offset of the stream ``offset`` bytes, relative to the -``whence`` parameter. + .. _fs-read-and-write-flags: + + - 'r' - Open file for reading. + - 'r+' - Open file for reading and writing. + - 'w' - Open file for writing. + - 'wx' - Like 'w' but fails if path exists. + - 'w+' - Open file for reading and writing. The file is created if it does not exist or truncated if it exists. + - 'wx+' - Like 'w+' but fails if path exists. + - 'a' - Open file for appending. The file is created if it does not exist. + - 'ax' - Like 'a' but fails if path exists. + - 'a+' - Open file for reading and appending. The file is created if it does not exist. + - 'ax+' - Like 'a+' but fails if path exists. -When can be SEEK\_SET (0), SEEK\_CUR(1) or SEEK\_END(2); + + :param string path: The path of the file to open. + :param string flags: Read and write :ref:`flags <fs-read-and-write-flags>`. + :param mode: Permissions for the file. This is only used if the file is created. Default is 0666. + :returns: A stream object. -FS.read(stream, buffer, offset, length, position) -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + .. COMMENT:: **HamishW** What mode/settings does 0666 map to? We need a list to possible mode values. -- stream ``object`` -- buffer ``ArrayBufferView`` -- offset ``int`` -- length ``int`` -- position ``int`` + -Read ``length`` bytes from the stream, storing them into ``buffer`` -starting at ``offset``. By default, reading starts from the stream's -current offset, however, a specific offset can be specified with the -``position`` argument. +.. js:function:: FS.close(stream) -Example -''''''' + Closes the file stream. + + :param object stream: The stream to be closed. -.. code:: javascript - var stream = FS.open('abinaryfile', 'r'); - var buf = new Uint8Array(4); - FS.read(stream, buf, 0, 4, 0); - FS.close(stream); -FS.write(stream, buffer, offset, length, position) -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +.. js:function:: FS.llseek(stream, offset, whence) -- stream ``object`` -- buffer ``ArrayBufferView`` -- offset ``int`` -- length ``int`` -- position ``int`` + Repositions the offset of the stream ``offset`` bytes, relative to the ``whence`` parameter. -Write ``length`` bytes from ``buffer``, starting at ``offset``. By -default, writing starts from the stream's current offset, however, a -specific offset can be specified with the ``position`` argument. + :param object stream: The stream for which the offset is to be repositioned. + :param int offset: The offset (in bytes) relative to ``whence``. + :param int whence: SEEK\_SET (0), SEEK\_CUR(1) or SEEK\_END(2); -Example -''''''' + .. COMMENT :: **HamishW** I don't understand the whence parameter. Need to follow up and check test code. + -.. code:: javascript +.. js:function:: FS.read(stream, buffer, offset, length [, position]) - var data = new Uint8Array(32); - var stream = FS.open('dummy', 'w+'); - FS.write(stream, data, 0, data.length, 0); - FS.close(stream); + Read ``length`` bytes from the stream, storing them into ``buffer`` starting at ``offset``. + + By default, reading starts from the stream's current offset, however, a specific offset can be specified with the ``position`` argument. For example: -FS.readFile(path, opts) -^^^^^^^^^^^^^^^^^^^^^^^ + .. code:: javascript -- path ``string`` -- opts ``object`` -- flags ``string`` default = 'r' -- encoding ``string`` default = 'binary' + var stream = FS.open('abinaryfile', 'r'); + var buf = new Uint8Array(4); + FS.read(stream, buf, 0, 4, 0); + FS.close(stream); + + :param object stream: The stream to read from. + :param ArrayBufferView buffer: The buffer to store the read data. + :param int offset: The offset within ``buffer`` to store the data. + :param int length: The length of data to write in ``buffer``. + :param int position: The offset within the stream to read. By default this is the stream's current offset. + :throws ERRNO_CODES.EINVAL: Reading from an invalid position or length + :throws ERRNO_CODES.EBADF: + :throws ERRNO_CODES.ESPIPE: + :throws ERRNO_CODES.EISDIR: + :throws ERRNO_CODES.EINVAL: + + + +.. js:function:: FS.write(stream, buffer, offset, length[, position]) + + Writes ``length`` bytes from ``buffer``, starting at ``offset``. + + By default, writing starts from the stream's current offset, however, a specific offset can be specified with the ``position`` argument. For example: -Slurps the entire file at ``path`` and returns it either as a string, or -a new Uint8Array buffer (``encoding`` = 'binary'). + .. code:: javascript -FS.writeFile(path, data, opts) -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + var data = new Uint8Array(32); + var stream = FS.open('dummy', 'w+'); + FS.write(stream, data, 0, data.length, 0); + FS.close(stream); -- path ``string`` -- data ``ArrayBufferView`` -- opts ``object`` -- flags ``string`` default = 'w' -- encoding ``string`` default = 'utf8' + :param object stream: The stream to write to. + :param ArrayBufferView buffer: The buffer to write. + :param int offset: The offset within ``buffer`` to write. + :param int length: The length of data to write. + :param int position: The offset within the stream to write. By default this is the stream's current offset. + :throws ERRNO_CODES.EINVAL: Reading from an invalid position or length + :throws ERRNO_CODES.EBADF: + :throws ERRNO_CODES.ESPIPE: + :throws ERRNO_CODES.EISDIR: + :throws ERRNO_CODES.EINVAL: + + .. COMMENT:: Need to check if Throws should be recorded, and if so, what should be said. **HamishW** -Writes the entire contents of ``data`` to the file at ``path``. ``data`` -is treated either as a string (``encoding`` = 'utf8'), or as an -ArrayBufferView (``encoding`` = 'binary'). -Example -''''''' + +.. js:function:: FS.readFile(path, opts) -.. code:: javascript + Reads the entire file at ``path`` and returns it as a ``string`` (encoding is 'utf8'), or as a new ``Uint8Array`` buffer (encoding is `binary'). - FS.writeFile('file', 'foobar'); - var contents = FS.readFile('file', { encoding: 'utf8' }); + :param string path: The file to read. + :param object opts: + + - **encoding** (*string*) + Defines the encoding used to return the file contents: 'binary' | 'utf8' . The default is 'binary' + - **flags** (*string*) + Read flags, as defined in :js:func:`FS.open`. The default is 'r'. + + :returns: The file as a ``string`` or ``Uint8Array`` buffer, depending on the encoding. -FS.createLazyFile(parent, name, url, canRead, canWrite) -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Creates a file that will be loaded lazily on first access from a given -URL or local filesystem path, and returns a reference to it. WARNING: -Firefox and Chrome have recently disabled synchronous binary XHRs, which -means this cannot work for Javascript in regular HTML pages (but it -works within WebWorkers). -:: +.. js:function:: FS.writeFile(path, data, opts) - * `(string|object) parent`: The parent folder, either as a path (e.g. `'/usr/lib'`) or an object previously returned from a `FS.createFolder()` or `FS.createPath()` call. - * `string name`: The name of the new file. - * `string url`: In the browser, this is the URL whose contents will be returned when this file is accessed. In a command line engine, this will be the local (real) filesystem path from where the contents will be loaded. Note that writes to this file are virtual. - * `bool canRead`: Whether the file should have read permissions set from the program's point of view. - * `bool canWrite`: Whether the file should have write permissions set from the program's point of view. + Writes the entire contents of ``data`` to the file at ``path``. + + The value of ``opts`` determines whether ``data`` is treated either as a string (``encoding`` = 'utf8'), or as an ``ArrayBufferView`` (``encoding`` = 'binary'). For example: -Example -''''''' + .. code:: javascript -.. code:: javascript + FS.writeFile('file', 'foobar'); + var contents = FS.readFile('file', { encoding: 'utf8' }); + + :param string path: The file to which to write ``data``. + :param ArrayBufferView data: The data to write. + :param object opts: + + - **encoding** (*string*) + 'binary' | 'utf8' . The default is 'utf8' + - **flags** (*string*) + Write flags, as defined in :js:func:`FS.open`. The default is 'w'. - FS.createLazyFile('/', 'foo', 'other/page.htm', true, false); - FS.createLazyFile('/', 'bar', '/get_file.php?name=baz', true, true); -FS.createPreloadedFile(parent, name, url, canRead, canWrite) -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. js:function:: FS.createLazyFile(parent, name, url, canRead, canWrite) + + Creates a file that will be loaded lazily on first access from a given URL or local filesystem path, and returns a reference to it. + + .. warning:: Firefox and Chrome have recently disabled synchronous binary XHRs, which means this cannot work for JavaScript in regular HTML pages (but it works within WebWorkers). + + Example + + .. code:: javascript + + FS.createLazyFile('/', 'foo', 'other/page.htm', true, false); + FS.createLazyFile('/', 'bar', '/get_file.php?name=baz', true, true); + + + :param parent: The parent folder, either as a path (e.g. `'/usr/lib'`) or an object previously returned from a `FS.createFolder()` or `FS.createPath()` call. + :type parent: string/object + :param string name: The name of the new file. + :param string url: In the browser, this is the URL whose contents will be returned when this file is accessed. In a command line engine, this will be the local (real) filesystem path from where the contents will be loaded. Note that writes to this file are virtual. + :param bool canRead: Whether the file should have read permissions set from the program's point of view. + :param bool canWrite: Whether the file should have write permissions set from the program's point of view. + :returns: A reference to the new file. + :throws ERRNO_CODES.EIO: + :throws: if there is an invalid range or URL, or if synchronous binary XHRs have been disabled. + + + +.. js:function:: FS.createPreloadedFile(parent, name, url, canRead, canWrite) + + Preloads a file asynchronously. You should call this in ``preRun``, and then ``run()`` will be delayed until all preloaded files are ready. This is how ``--preload-file`` works in *emcc*. + + :param parent: The parent folder, either as a path (e.g. `'/usr/lib'`) or an object previously returned from a `FS.createFolder()` or `FS.createPath()` call. + :type parent: string/object + :param string name: The name of the new file. + :param string url: In the browser, this is the URL whose contents will be returned when this file is accessed. In a command line engine, this will be the local (real) filesystem path from where the contents will be loaded. Note that writes to this file are virtual. + :param bool canRead: Whether the file should have read permissions set from the program's point of view. + :param bool canWrite: Whether the file should have write permissions set from the program's point of view. + -Preloads a file asychronously. You should call this in preRun, and then -run() will be delayed until all preloaded files are ready. This is how -``--preload-file`` works in emcc. File types ----------- +=========== + +Emscripten's filesystem supports regular files, directories, symlinks, character devices, block devices and sockets. In a similar manner to most Unix systems, all of these file types are able to be operated on with the higher-level FS operations such as :js:func:`FS.read` :js:func:`FS.write`. + + +.. js:function:: FS.isFile(mode) + + Tests if the ``mode`` bitmask represents a file. + + + :param mode: A bitmask of possible file properties. + :returns: ``true`` if the ``mode`` bitmask represents a file. + :rtype: bool + + +.. js:function:: FS.isDir(mode) + + Tests if the ``mode`` bitmask represents a directory. -Emscripten's filesystem supports regular files, directories, symlinks, -character devices, block devices and sockets. In a similar manner to -most Unix systems, all of these file types are able to be operated on -with the higher-level FS operations such as -`FS.read <#fsreadstream-buffer-offset-length-position>`__ and -`FS.write <#fswritestream-buffer-offset-length-position-canown>`__. + :returns: ``true`` if the ``mode`` bitmask represents a directory. + :rtype: bool -FS.isFile(node \|\| mode) -^^^^^^^^^^^^^^^^^^^^^^^^^ -Returns true if the mode bitmask represents a file. -FS.isDir(node \|\| mode) -^^^^^^^^^^^^^^^^^^^^^^^^ +.. js:function:: FS.isLink(mode) -Returns true if the mode bitmask represents a directory. + Tests if the ``mode`` bitmask represents a symlink. -FS.isLink(node \|\| mode) -^^^^^^^^^^^^^^^^^^^^^^^^^ + :param mode: A bitmask of possible file properties. + :returns: ``true`` if the ``mode`` bitmask represents a symlink. + :rtype: bool -Returns true if the mode bitmask represents a symlink. -FS.isChrdev(node \|\| mode) -^^^^^^^^^^^^^^^^^^^^^^^^^^^ +.. js:function:: FS.isChrdev(mode) -Returns true if the mode bitmask represents a character device. + Tests if the ``mode`` bitmask represents a character device. -FS.isBlkdev(node \|\| mode) -^^^^^^^^^^^^^^^^^^^^^^^^^^^ + :param mode: A bitmask of possible file properties. + :returns: ``true`` if the ``mode`` bitmask represents a character device. + :rtype: bool -Returns true if the mode bitmask represents a block device. -FS.isSocket(node \|\| mode) -^^^^^^^^^^^^^^^^^^^^^^^^^^^ +.. js:function:: FS.isBlkdev(mode) + + Tests if the ``mode`` bitmask represents a block device. + + :param mode: A bitmask of possible file properties. + :returns: ``true`` if the ``mode`` bitmask represents a block device. + :rtype: bool + + +.. js:function:: FS.isSocket(mode) + + Tests if the ``mode`` bitmask represents a socket. + + :param mode: A bitmask of possible file properties. + :returns: ``true`` if the ``mode`` bitmask represents a socket. + :rtype: bool -Returns true if the mode bitmask represents a socket. Paths ------ +======= + -FS.cwd() -^^^^^^^^ +.. js:function:: FS.cwd() -Return the current working directory. + Gets the current working directory. -FS.lookupPath(path, opts) -^^^^^^^^^^^^^^^^^^^^^^^^^ + :returns: The current working directory. + + -- path ``string`` -- opts ``object`` -- parent ``bool`` default = false -- follow ``bool`` default = false +.. js:function:: FS.lookupPath(path, opts) -Lookups up the incoming path and returns an object of the format: + Lookups up the incoming path and returns an object containing both the resolved path and node. + + The ``opts`` allow you to specify whether the object or it's parent component, and whether a symlink or the item it points to are returned. For example: :: + + var lookup = FS.lookupPath(path, { parent: true }); + + :param string path: The incoming path. + :param object opts: Options for the path: + + - **parent** (*bool*) + If true, stop resolving the path once the next to the last component is reached. + For example, for the path ``/foo/bar`` with ``{ parent: true }``, would return receive back an object representing ``/foo``. The default is ``false``. + - **follow** (*bool*) + If true, follow the last component if it is a symlink. + For example, consider a symlink ``/foo/symlink`` that links to ``/foo/notes.txt``. if ``{ follow: true }``, an object representing ``/foo/notes.txt`` would be returned. If ``{ follow: false }`` an object representing the symlink file would be returned. The default is ``false``. -:: + :returns: an object with the the format: + + .. code-block:: JavaScript - { - path: resolved_path, - node: resolved_node - } + { + path: resolved_path, + node: resolved_node + } + :throws ERRNO_CODES.ELOOP: Lookup caught in a loop (recursive lookup is too deep or there are too many consecutive symlinks). -The ``parent`` option says to stop resolving the path once the next to -the last component is reached. For example, for the path ``/foo/bar`` -with ``{ parent: true }``, would return receive back an object -representing ``/foo``. -The ``follow`` option says whether to follow the last component in the -case that is is a symlink. To illustrate, let's say there exists a -symlink ``/foo/symlink`` that links to ``/foo/notes.txt``. If -``/foo/symlink`` is looked up with ``{ follow: false }`` an object -representing the symlink file itself would be returned. However if -``{ follow: true }`` is passed, an object representing -``/foo/notes.txt`` would be returned. -FS.getPath(node) -^^^^^^^^^^^^^^^^ +.. js:function:: FS.getPath(node) -Takes in a node object and return the absolute path to it, accounting -for mounts. + Gets the absolute path to ``node``, accounting for mounts. + + :param node: The current node. + :returns: The absolute path to ``node``. diff --git a/site/source/docs/getting_started/downloads.rst b/site/source/docs/getting_started/downloads.rst index ff35d25826844..5909d8d36bd58 100644 --- a/site/source/docs/getting_started/downloads.rst +++ b/site/source/docs/getting_started/downloads.rst @@ -1,7 +1,7 @@ .. _sdk-download-and-install: ====================================================== -Download and install (under-construction) +Download and install (ready-for-review) ====================================================== .. note:: The *Emscripten SDK* provides the whole Emscripten toolchain (*Clang*, *Python*, *Node.js* and *Visual Studio* integration) in a single easy-to-install package, with integrated support for :ref:`updating to newer SDKs <updating-the-emscripten-sdk>` as they are released. @@ -46,9 +46,9 @@ Check the relevant section below for instructions on installing your selected pa Windows: Installing using an NSIS installer -------------------------------------------- -The NSIS installers register the Emscripten SDK as a 'standard' Windows application. To install the SDK, download an NSIS .exe file (see above), double-click on it, and run through the installer to perform the installation. +The NSIS installers register the Emscripten SDK as a 'standard' Windows application. To install the SDK, download an NSIS .exe file, double-click on it, and run through the installer to perform the installation. -After the installer finishes, the full Emscripten toolchain will be available in the directory that was chosen during the installation, and no other steps are necessary. If your system has Visual Studio 2010 installed, the :term:`vs-tool` MSBuild plugin will be automatically installed as well. +After the installer finishes, the full Emscripten toolchain will be available in the directory that was chosen during the installation, and no other steps are necessary. If your system has *Visual Studio 2010* installed, the :term:`vs-tool` MSBuild plugin will be automatically installed as well. .. _all-os-installation_instructions-portable-SDK: @@ -56,12 +56,12 @@ After the installer finishes, the full Emscripten toolchain will be available in Windows, OSX and Linux: Installing the Portable SDK ---------------------------------------------------- -The Portable Emscripten SDK is a no-installer version of the SDK package. It is identical to the NSIS (web) installer, except that it does not interact with the Windows registry. This allows Emscripten to be used on a computer without administrative privileges, and means that the installation to be migrated from one location (directory or computer) to another by simply copying/zipping up the directory contents. +The *Portable Emscripten SDK* is a no-installer version of the SDK package. It is identical to the NSIS installer, except that it does not interact with the Windows registry. This allows Emscripten to be used on a computer without administrative privileges, and means that the installation to be migrated from one location (directory or computer) to another by simply copying/zipping up the directory contents. -If you want to use the Portable Emscripten SDK, the initial setup process is as follows: +If you want to use the *Portable Emscripten SDK*, the initial setup process is as follows: -1. Download and unzip the portable SDK package to a directory of your choice (see above). This directory will contain the Emscripten SDK. -#. Open a command prompt to the directory of the SDK and run the following :ref:`emsdk <emsdk>` commands to get the latest SDK tools and set them as :term:`active <Active Tool/SDK>`. Note that on Mac OS X, invoke the tool with **./emsdk** isntead of **emsdk**.: :: +1. Download and unzip the portable SDK package to a directory of your choice. This directory will contain the Emscripten SDK. +#. Open a command prompt to the directory of the SDK and run the following :ref:`emsdk <emsdk>` commands to get the latest SDK tools and set them as :term:`active <Active Tool/SDK>`. Note that on Mac OS X, invoke the tool with **./emsdk** instead of **emsdk**: :: # Fetch the latest registry of available tools. emsdk update @@ -85,7 +85,7 @@ Platform-specific notes Mac OS X ++++++++ -- *Git* is not installed automatically. Git is only needed if you want to use one of the development branches **emscripten-incoming** or **emscripten-master** directly, instead of the fixed releases. To install git on OSX: +- *Git* is not installed automatically. Git is only needed if you want to use tools from one of the development branches **emscripten-incoming** or **emscripten-master** directly. To install git on OSX: 1. Install XCode and the XCode Command Line Tools. This will provide *git* to the system PATH. For more help on this step, see `this stackoverflow post <http://stackoverflow.com/questions/9329243/xcode-4-4-command-line-tools>`_. 2. Install git directly from http://git-scm.com/. @@ -101,11 +101,11 @@ Mac OS X Linux ++++++++ -.. note:: Pre-built binaries of tools are not available on Linux. Installing a tool will automatically clone and build that tool from the sources inside **emsdk** directory. Emsdk does not interact with Linux package managers on the behalf of the user, nor does it install any tools to the system. All file changes are done inside the ``emsdk/`` directory. +.. note:: Pre-built binaries of tools are not available on Linux. Installing a tool will automatically clone and build that tool from the sources inside **emsdk** directory. *Emsdk* does not interact with Linux package managers on the behalf of the user, nor does it install any tools to the system. All file changes are done inside the **emsdk/** directory. - The system must have a working compiler environment available (because *emsdk* builds software from the source). - *Python*, *node.js* or *Java* are not provided by *emsdk*. The user is expected to install these beforehand with the *system package manager*. -- *Git* is not installed automatically. Git is only needed if you want to use one of the development branches **emscripten-incoming** or **emscripten-master** directly, instead of the fixed releases. +- *Git* is not installed automatically. Git is only needed if you want to use tools from one of the development branches **emscripten-incoming** or **emscripten-master**. .. todo:: **HamishW** Add instructions for installing Git on Linux. @@ -115,15 +115,21 @@ Linux Updating the SDK ================ -You only need to install the SDK once! After that you can update to the latest SDK at any time using :ref:`SDK Package Manager (emsdk) <emsdk>`. Type the following (omitting comments) on the *Emscripten Command Prompt*: :: +.. tip:: You only need to install the SDK once! After that you can update to the latest SDK at any time using :ref:`SDK Package Manager (emsdk) <emsdk>`. - emsdk update // Fetch the latest registry of available tools. - emsdk install latest // Download and install the latest SDK tools. - emsdk activate latest // Set up the compiler configuration to point to the "latest" SDK. +Type the following (omitting comments) on the :ref:`Emscripten Command Prompt <emcmdprompt>`: :: + + # Fetch the latest registry of available tools. + emsdk update + # Download and install the latest SDK tools. + emsdk install latest + # Set up the compiler configuration to point to the "latest" SDK. + emsdk activate latest The package manager can do many other maintenance tasks, ranging from fetching specific old versions of the SDK through to using the :ref:`versions of the tools on Github <emsdk-master-or-incoming-sdk>` (or even your own fork). Check out all the possibilities in the :ref:`emsdk_howto`. - +.. _downloads-uninstall-the-sdk: + Uninstalling the Emscripten SDK ======================================================== @@ -139,9 +145,9 @@ It is also possible to :ref:`remove specific SDKs using emsdk <emsdk-remove-tool Archived releases ================= -You can always install old SDK and compiler toolchains via the latest emsdk. If you need to fall back to an old version, download the Portable SDK version and use that to install a previous version of a tool. All old tool versions are available by typing `emsdk list --old`. +You can always install old SDK and compiler toolchains via the latest :ref:`emsdk <emsdk-get-latest-sdk>`. If you need to fall back to an old version, download the Portable SDK version and use that to install a previous version of a tool. All old tool versions are available by typing ``emsdk list --old``. -On Windows, you can install one of the **old versions** via an offline NSIS installer: +On Windows, you can also install one of the **old versions** via an offline NSIS installer: - `emsdk-1.16.0-full-64bit.exe <https://s3.amazonaws.com/mozilla-games/emscripten/releases/emsdk-1.16.0-full-64bit.exe>`_ (first stable fastcomp release) - `emsdk-1.13.0-full-32bit.exe <https://s3.amazonaws.com/mozilla-games/emscripten/releases/emsdk-1.13.0-full-64bit.exe>`_ (a unstable first fastcomp release with Clang 3.3) diff --git a/site/source/docs/site/glossary.rst b/site/source/docs/site/glossary.rst index 5fedc100640fa..6d0b0a3b69c88 100644 --- a/site/source/docs/site/glossary.rst +++ b/site/source/docs/site/glossary.rst @@ -8,8 +8,41 @@ Glossary (under-construction) :sorted: vs-tool - Visual Studio 2010 plugin to integrate MinGW, Clang and Emscripten to the VS IDE. Automatically added by the Emscripten SDK NSIS Installer if Visual Studio 2010 is present on the target system. + Visual Studio 2010 plugin to integrate MinGW, Clang and Emscripten to the VS IDE. Automatically added by the Emscripten SDK NSIS Installer if Visual Studio 2010 is present on the target system. Note, at time of writing this only supports Visual Studio 2010. + + +.. todo:: **HamishW** Is there a link we can put for the version support? Should remove the "Note, at time of writing" when fixed. + + +SDK Terms +========= + +The following terms are used when referring to the SDK and :ref:`emsdk`: + +.. glossary:: + + emsdk + The :ref:`emsdk <emsdk>` management script is used to control which SDK and tools are present and :term:`active <Active Tool/SDK>` on an installation. Most operations are of the form ``emsdk command``. To access the *emsdk* script, launch the *Emscripten Command Prompt*. + + Tool + The basic unit of software bundled in the :term:`SDK`. A Tool has a name and a version. For example, **clang-3.2-32bit** is a tool that contains the 32-bit version of the *Clang* v3.2 compiler. Other tools include *Emscripten*, *Java*, *Git*, *Node*, etc. + + SDK + A set of :term:`tools <Tool>`. For example, **sdk-1.5.6-32bit** is an SDK consisting of the tools: clang-3.2-32bit, node-0.10.17-32bit, python-2.7.5.1-32bit and emscripten-1.5.6. + + There are a number of different packages of the Emscripten SDKs including the :term:`Portable Emscripten SDK` and :term:`Windows NSIS Installer Emscripten SDK`. SDKs can be downloaded from :ref:`here <sdk-download-and-install>`. + + Active Tool/SDK + The :term:`emsdk` can store multiple versions of :term:`tools <Tool>` and :term:`SDKs <SDK>`. The active tools/SDK is the set of tools that are used by default on the *Emscripten Command Prompt*. This compiler configuration is stored in a user-specific persistent file (**~/.emscripten**) and can be changed using *emsdk*. + Portable Emscripten SDK + A portable, no-installer, version of the SDK package. It is identical to the :term:`NSIS SDK installer <Windows NSIS Installer Emscripten SDK>`, except that it does not interact with the Windows registry. This allows Emscripten to be used on a computer without administrative privileges, and means that the installation to be migrated from one location (directory or computer) to another by simply copying/zipping up the directory contents. + + Windows NSIS Installer Emscripten SDK + A Windows NSIS installer of the Emscripten SDK. This registers the Emscripten SDK as a ‘standard’ Windows application. allow it to be installed and removed from Windows like any other app. + + + Site / Sphinx diff --git a/site/source/docs/tools_reference/emcmdprompt.rst b/site/source/docs/tools_reference/emcmdprompt.rst new file mode 100644 index 0000000000000..5a0573436418b --- /dev/null +++ b/site/source/docs/tools_reference/emcmdprompt.rst @@ -0,0 +1,23 @@ +.. _emcmdprompt: + +=================================================================== +Emscripten Command Prompt (emcmdprompt.bat) (ready-for-review) +=================================================================== + + +Purpose +============================================ + +The *Emscripten Command Prompt* is a Windows command prompt which has been configured with the current :term:`active <Active Tool/SDK>` settings for Emscripten development. + +The prompt is launched by executing **emcmdprompt.bat** using the normal Windows mechanisms (for example, type "Emscripten" in the Windows 8 start screen and then open, double-clicking in Windows Explorer, etc.). + + +Command line syntax +============================================ + +The tool is not intended to be run from the command line. + + + + diff --git a/site/source/docs/tools_reference/emsdk.rst b/site/source/docs/tools_reference/emsdk.rst index bcf2fe510c347..466848c1f09bf 100644 --- a/site/source/docs/tools_reference/emsdk.rst +++ b/site/source/docs/tools_reference/emsdk.rst @@ -1,15 +1,15 @@ .. _emsdk: -===================================== -emsdk - Emscripten SDK Manager -===================================== +===================================================== +Emscripten SDK Manager (emsdk) (ready-for-review) +===================================================== **The Emscripten SDK management script (** ``emsdk`` **) is used to perform all SDK maintenance. You only need to "install" the SDK once; after that emsdk can do all further updates!** Purpose ============================================ -With ``emsdk`` you can download, install or remove *any* SDK or Tool, ranging from the very first, through to the bleeding edge updates still on Github. Most operations are of the form ``emsdk command``. To access the *emsdk*, launch the *Emscripten Command Prompt*. +With *emsdk* you can download, install or remove *any* :term:`SDK` or :term:`Tool`, ranging from the very first, through to the :ref:`bleeding edge updates <emsdk-master-or-incoming-sdk>` still on Github. Most operations are of the form ``emsdk command``. To access the *emsdk*, launch the :ref:`Emscripten Command Prompt <emcmdprompt>`. This document provides the command syntax, and a :ref:`set of guides <emsdk_howto>` explaining how to perform both common and advanced maintenance operations. @@ -19,11 +19,6 @@ Command line syntax **emsdk** [**help** [**--old**] | **list** | **update** | **install** *<tool/sdk>* | **uninstall** *<tool/sdk>* | **activate** *<tool/sdk>*] -or - -**emcmdprompt.bat** - -.. note:: For Mac OSX the commands are called with **./emsdk** and **./emcmdprompt.bat** respectively. Arguments --------- @@ -49,14 +44,17 @@ Arguments * - ``help`` - Lists all supported commands. The same list is output if no command is specified. -**emcmdprompt.bat** doesn't take any arguments. It spawns a new command prompt window with the Emscripten environment active. +.. note:: For Mac OSX the commands are called with **./emsdk** and **./emcmdprompt.bat** respectively. + +Note that **emcmdprompt.bat** is also displayed as an option in the ``emsdk help``. This is not intended to be called through the command line. See :ref:`emcmdprompt` for more information. + .. _emsdk-specified-tool-sdk: Tools and SDK targets ------------------------ -The ``<tool/sdk>`` given above is one of the targets listed using ``emsdk list`` (or ``emsdk list --old``). +The ``<tool/sdk>`` given above as a command argument is one of the targets listed using ``emsdk list`` (or ``emsdk list --old``). Note that some of the tools and SDK names include *master* or *incoming*: these targets are used to clone and pull the very latest versions from the Emscripten incoming and master branches. @@ -69,26 +67,9 @@ Finally, you can specify a target of ``latest`` to grab the most current SDK. SDK manager concepts ============================== -The *emsdk* can fetch the different versions of all the tools and SDKs. These are put into different directories under the main SDK installation folder, grouped by tool and version. - -A user-specific file (**~/.emscripten**) stores the "compiler configuration"; this configuration defines the specific set of tools that are :term:`active <Active Tool/SDK>`, and will be used by default if Emscripten in called on the **Emscripten Command Prompt*. - -The following terms are used when referring to the SDK and tool manager: - -.. glossary:: - - Tool - The basic unit of software bundled in the SDK. A Tool has a name and a version. For example, 'clang-3.2-32bit' is a Tool that contains the 32-bit version of the *Clang* v3.2 compiler. Other tools include *Emscripten*, *Java*, *Git*, *Node*, etc. - - SDK - A set of :term:`tools <Tool>`. For example, 'sdk-1.5.6-32bit' is an SDK consisting of the tools: clang-3.2-32bit, node-0.10.17-32bit, python-2.7.5.1-32bit and emscripten-1.5.6. - - Active Tool/SDK - The SDK can store multiple versions of tools and SDKs. The active tools/SDK is the set of tools that are used by default on the *Emscripten Command Prompt*. This compiler configuration is stored in a user-specific persistent file (**~/.emscripten**) and can be changed using *emsdk*. - - emsdk - This is the name of the manager script that Emscripten SDK is accessed through. Most operations are of the form ``emsdk command``. To access the *emsdk* script, launch the *Emscripten Command Prompt*. +The SDK contains a number of different :term:`tools <Tool>`, including *Clang*, *Emscripten*, *Java*, *Git*, *Node*, etc. The *emsdk* can fetch the different versions of all these tools and also specific SDKs. These are put into different directories under the main SDK installation folder, grouped by tool and version. +A user-specific file (**~/.emscripten**) stores the active "compiler configuration"; the :term:`active <Active Tool/SDK>` configuration is the specific set of tools that are used by default if Emscripten in called on the :ref:`Emscripten Command Prompt <emcmdprompt>`. Users can call *emsdk* with the ``activate`` argument to make a specific tool or SDK active. .. _emsdk_howto: @@ -98,16 +79,23 @@ The following terms are used when referring to the SDK and tool manager: The following topics explain how to perform both common and advanced maintenance operations, ranging from installing the latest SDK through to installing your own fork from Github. +.. note:: The examples below show the commands for Windows and Linux. The commands are the same on Mac OSX, but you need to replace **emsdk** with **./emsdk**. + +.. _emsdk-get-latest-sdk: How do I just get the latest SDK? ------------------------------------------------------------------------------------------------ Use the ``update`` argument to fetch the current registry of available tools, and then the ``latest`` target to get the most recent SDK: :: - emsdk update // Fetch the latest registry of available tools. - emsdk install latest // Download and install the latest SDK tools. - emsdk activate latest // Set up the compiler configuration to point to the "latest" SDK. + # Fetch the latest registry of available tools. + emsdk update + + # Download and install the latest SDK tools. + emsdk install latest + + # Set up the compiler configuration to point to the "latest" SDK. + emsdk activate latest -Note that the commands are the same on Mac OSX, but you need to replace **emsdk** with **./emsdk**. How do I use emsdk? @@ -120,6 +108,7 @@ How do I check which versions of the SDK and tools are installed? ------------------------------------------------------------------------------------------------ To get a list of all currently installed tools and SDK versions (and all available tools) run: :: + emsdk list A line will be printed for each tool/SDK that is available for installation. The text ``INSTALLED`` will be shown for each tool that has already been installed. If a tool/SDK is currently active, a star (\*) will be shown next to it. @@ -138,9 +127,14 @@ Use the ``install`` argument to download and install a new tool or an SDK versio How do I remove a tool or an SDK? ---------------------------------------------------------------- -Use the ``uninstall`` argument to delete the given tool or SDK from the local computer: :: +Use the ``uninstall`` argument to delete a given tool or SDK from the local computer: :: emsdk uninstall <tool/sdk name> + + +See :ref:`downloads-uninstall-the-sdk` if you need to completely remove Emscripten from your system. + + How do I check for updates to the Emscripten SDK? @@ -148,8 +142,11 @@ How do I check for updates to the Emscripten SDK? First use the ``update`` command to fetch package information for all new tools and SDK versions. Then use ``install <tool/sdk name>`` to install a new version: :: - emsdk update // Fetch the latest registry of available tools. - emsdk install <tool/sdk name> // Download and install the specified new version. + # Fetch the latest registry of available tools. + emsdk update + + # Download and install the specified new version. + emsdk install <tool/sdk name> How do I change the currently active SDK version? @@ -163,13 +160,15 @@ Toggle between different tools and SDK versions using the :term:`activate <Activ How do I install an old Emscripten compiler version? ---------------------------------------------------------------- -*Emsdk* contains a history of old compiler versions that you can use to maintain your migration path. Use the ``list --old`` argument to get a list of archived tool and SDK versions, and ``emsdk install <name_of_tool>`` to install it: :: +*Emsdk* contains a history of old compiler versions that you can use to maintain your migration path. Use the ``list --old`` argument to get a list of archived tool and SDK versions, and ``install <name_of_tool>`` to install it: :: emsdk list --old emsdk install <name_of_tool> On Windows, you can directly install an old SDK version by using one of the :ref:`archived offline NSIS installers <archived-nsis-windows-sdk-releases>`. - + + + .. _emsdk-master-or-incoming-sdk: How do I track the latest Emscripten development with the SDK? @@ -192,6 +191,15 @@ To switch to using the latest upstream git development branch ``incoming``, run If you want to use the upstream stable branch ``master``, then replace ``-incoming-`` with ``-master-`` above. +.. note:: On Windows, *git* may fail with the error message: + + :: + + Unable to find remote helper for 'https' when cloning a repository with https:// url. + + The workaround is to uninstall git from *emsdk* (``emsdk uninstall git-1.8.3``) and install `Git for Windows <http://msysgit.github.io>`_. This issue is reported `here <https://github.com/juj/emsdk/issues/13>`_. + +.. todo:: **HamishW** Check whether the bug (https://github.com/juj/emsdk/issues/13) is fixed and remove the above note if it is. How do I use my own Emscripten Github fork with the SDK? diff --git a/site/source/docs/tools_reference/index.rst b/site/source/docs/tools_reference/index.rst index 2e33782ff19ba..9c871ad1d946f 100644 --- a/site/source/docs/tools_reference/index.rst +++ b/site/source/docs/tools_reference/index.rst @@ -11,6 +11,5 @@ This section provides reference for the main :term:`tools <Tool>` in the Emscrip :maxdepth: 1 emsdk - - + emcmdprompt From 3d9e1e8e1bae78e65a020dc9572e69e878fc2597 Mon Sep 17 00:00:00 2001 From: Alon Zakai <alonzakai@gmail.com> Date: Fri, 1 Aug 2014 21:49:21 -0700 Subject: [PATCH 23/30] pass through null pointers and null types in cxa_catch_exception; fixes #2616 --- src/library.js | 10 +- tests/core/test_exceptions_convert.cpp | 132 +++++++++++++++++++++++++ tests/core/test_exceptions_convert.txt | 3 + tests/test_core.py | 7 ++ 4 files changed, 150 insertions(+), 2 deletions(-) create mode 100644 tests/core/test_exceptions_convert.cpp create mode 100644 tests/core/test_exceptions_convert.txt diff --git a/src/library.js b/src/library.js index 6c84e590a38fe..f9fa21c55a90e 100644 --- a/src/library.js +++ b/src/library.js @@ -4006,11 +4006,17 @@ LibraryManager.library = { __cxa_find_matching_catch__deps: ['__resumeException', '__cxa_last_thrown_exception', '__cxa_exception_header_size'], __cxa_find_matching_catch: function(thrown, throwntype) { if (thrown == -1) thrown = ___cxa_last_thrown_exception; + if (!thrown) { + // just pass through the null ptr + {{{ makeStructuralReturn([0, 0]) }}}; + } var header = thrown - ___cxa_exception_header_size; if (throwntype == -1) throwntype = {{{ makeGetValue('header', 0, 'void*') }}}; var typeArray = Array.prototype.slice.call(arguments, 2); - - assert(throwntype); + if (!throwntype) { + // just pass through the thrown ptr + {{{ makeStructuralReturn(['thrown', 0]) }}}; + } var pointer = Module['___cxa_is_pointer_type'](throwntype); // can_catch receives a **, add indirection diff --git a/tests/core/test_exceptions_convert.cpp b/tests/core/test_exceptions_convert.cpp new file mode 100644 index 0000000000000..08938ef5c9e05 --- /dev/null +++ b/tests/core/test_exceptions_convert.cpp @@ -0,0 +1,132 @@ +#include <ios> +#include <iostream> +#include <sstream> +#include <stdexcept> + +namespace +{ + struct TestEnum + { + enum type + { + Zero, + One + }; + }; + + // An input operator a-la-boost date_time. This input operator will catch + // anything and rethrow if the exception mask for the input stream is set to + // throw on failure. + std::istream& operator>>(std::istream& in, TestEnum::type& value) + { + try { + std::string raw; + if (not (in >> raw)) { return in; } + if (raw == "Zero") { value = TestEnum::Zero; return in; } + if (raw == "One") { value = TestEnum::One; return in; } + + // The boost input operator uses it's own facet for input which can + // throw, so we simulate something failing by just throwing an exception + // directly. + throw std::exception(); + } + catch (...) { + const std::ios_base::iostate exception_mask = in.exceptions(); + if (std::ios_base::failbit & exception_mask) { + try { in.setstate(std::ios_base::failbit); } + catch(std::ios_base::failure&) {} + throw; // rethrow original exception + } + else { + in.setstate(std::ios_base::failbit); + } + } + return in; + } +} + +int main() +{ + try { + // Show that the input operator works. + std::istringstream iss("One"); + TestEnum::type value = TestEnum::Zero; + + // We expect this to work. + iss >> value; + if (iss.fail()) { + std::cout + << "Failed to convert 'One' to TestEnum::type... fail" + << std::endl; + } + else { + std::cout + << "Successfully converted 'One' to TestEnum::type: " << value + << "... ok" << std::endl; + } + } + catch (...) { + std::cout + << "Unknown exception caught converting 'One' to TestEnum... fail" + << std::endl; + } + + try { + // Show that invalid input set the fail bit on the input stream and no + // exception is thrown, since we did not enable them on the stream. + std::istringstream iss("Two"); + TestEnum::type value = TestEnum::Zero; + + // We expect this to fail. + iss >> value; + if (iss.fail()) { + std::cout + << "Failed to convert 'Two' to TestEnum::type... ok" + << std::endl; + } + else { + std::cout + << "Successfully converted 'Two' to TestEnum::type: " << value + << "... fail" << std::endl; + } + } + catch (...) { + std::cout + << "Unknown exception caught converting 'Two' to TestEnum... fail" + << std::endl; + } + + try { + // Show that setting the input stream to throw on failure currently + // results in a JS exception being emitted. + std::istringstream iss("Three"); + TestEnum::type value = TestEnum::Zero; + + // Tell the stream to throw on failure. + iss.exceptions(std::ios_base::failbit); + + // We expect this to fail. + iss >> value; + if (iss.fail()) { + std::cout + << "No exception thrown; Failed to convert 'Three' to TestEnum::type..." + "fail" << std::endl; + } + else { + std::cout + << "Successfully converted 'Three' to TestEnum::type: " << value + << "... fail" << std::endl; + } + } + catch(const std::ios_base::failure& ex) { + std::cout << "Caught exception: " << ex.what() << "... ok" << std::endl; + } + catch (...) { + std::cout + << "Unknown exception caught converting 'Three' to TestEnum... fail" + << std::endl; + } + + return 0; +} + diff --git a/tests/core/test_exceptions_convert.txt b/tests/core/test_exceptions_convert.txt new file mode 100644 index 0000000000000..fca657ce4e8c1 --- /dev/null +++ b/tests/core/test_exceptions_convert.txt @@ -0,0 +1,3 @@ +Successfully converted 'One' to TestEnum::type: 1... ok +Failed to convert 'Two' to TestEnum::type... ok +Unknown exception caught converting 'Three' to TestEnum... fail diff --git a/tests/test_core.py b/tests/test_core.py index 98e454155be90..8542428500681 100644 --- a/tests/test_core.py +++ b/tests/test_core.py @@ -1478,6 +1478,13 @@ def test_exceptions_virtual_inheritance(self): self.do_run_from_file(src, output) + def test_exceptions_convert(self): + if os.environ.get('EMCC_FAST_COMPILER') == '0': return self.skip('needs fastcomp') + Settings.DISABLE_EXCEPTION_CATCHING = 0 + test_path = path_from_root('tests', 'core', 'test_exceptions_convert') + src, output = (test_path + s for s in ('.cpp', '.txt')) + self.do_run_from_file(src, output) + def test_exceptions_multi(self): Settings.DISABLE_EXCEPTION_CATCHING = 0 test_path = path_from_root('tests', 'core', 'test_exceptions_multi') From e4045d174384c15375fd4c26a0475700fef6ae49 Mon Sep 17 00:00:00 2001 From: Alon Zakai <alonzakai@gmail.com> Date: Sat, 2 Aug 2014 10:53:26 -0700 Subject: [PATCH 24/30] remove unnecessary first two arguments to cxa_find_matching_catch --- src/jsifier.js | 2 +- src/library.js | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/jsifier.js b/src/jsifier.js index 1f6440dd150c2..c8714380dfdd7 100644 --- a/src/jsifier.js +++ b/src/jsifier.js @@ -1308,7 +1308,7 @@ function JSify(data, functionsOnly) { return ret; } var catchTypeArray = item.catchables.map(finalizeLLVMParameter).map(function(element) { return asmCoercion(element, 'i32') }).join(','); - var ret = asmCoercion('___cxa_find_matching_catch(-1, -1' + (catchTypeArray.length > 0 ? ',' + catchTypeArray : '') +')', 'i32'); + var ret = asmCoercion('___cxa_find_matching_catch(' + catchTypeArray +')', 'i32'); if (USE_TYPED_ARRAYS == 2) { ret = makeVarDef(item.assignTo) + '$0 = ' + ret + '; ' + makeVarDef(item.assignTo) + '$1 = tempRet0;'; item.assignTo = null; diff --git a/src/library.js b/src/library.js index f9fa21c55a90e..40d7e0648b003 100644 --- a/src/library.js +++ b/src/library.js @@ -4004,19 +4004,19 @@ LibraryManager.library = { // We'll do that here, instead, to keep things simpler. __cxa_find_matching_catch__deps: ['__resumeException', '__cxa_last_thrown_exception', '__cxa_exception_header_size'], - __cxa_find_matching_catch: function(thrown, throwntype) { - if (thrown == -1) thrown = ___cxa_last_thrown_exception; + __cxa_find_matching_catch: function() { + var thrown = ___cxa_last_thrown_exception; if (!thrown) { // just pass through the null ptr {{{ makeStructuralReturn([0, 0]) }}}; } var header = thrown - ___cxa_exception_header_size; - if (throwntype == -1) throwntype = {{{ makeGetValue('header', 0, 'void*') }}}; - var typeArray = Array.prototype.slice.call(arguments, 2); + var throwntype = {{{ makeGetValue('header', 0, 'void*') }}}; if (!throwntype) { // just pass through the thrown ptr {{{ makeStructuralReturn(['thrown', 0]) }}}; } + var typeArray = Array.prototype.slice.call(arguments); var pointer = Module['___cxa_is_pointer_type'](throwntype); // can_catch receives a **, add indirection From 2f3f0081414b411aa8edfe34185eb4425d533cf8 Mon Sep 17 00:00:00 2001 From: Alon Zakai <alonzakai@gmail.com> Date: Sat, 2 Aug 2014 11:23:42 -0700 Subject: [PATCH 25/30] stop execution even when waiting to exit in node; #2615 --- src/postamble.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/postamble.js b/src/postamble.js index 7fd4eb1951505..a2ce89947308a 100644 --- a/src/postamble.js +++ b/src/postamble.js @@ -190,10 +190,9 @@ function exit(status) { }, 500); } else if (ENVIRONMENT_IS_SHELL && typeof quit === 'function') { quit(status); - } else { - // no proper way to exit with a return code, throw an exception to halt the current execution - throw new ExitStatus(status); } + // if we reach here, we must throw an exception to halt the current execution + throw new ExitStatus(status); } Module['exit'] = Module.exit = exit; From 1c3412cccdbd109c08357823382360782a0ad307 Mon Sep 17 00:00:00 2001 From: Alon Zakai <alonzakai@gmail.com> Date: Mon, 4 Aug 2014 13:52:40 -0700 Subject: [PATCH 26/30] make .a link groups work also when linking just to bitcode; fixes #2568 --- emcc | 10 ++++++---- tests/test_other.py | 25 ++++++++++++++++++++++++- 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/emcc b/emcc index 43e2cdd0590a0..d4201bcfa8e14 100755 --- a/emcc +++ b/emcc @@ -1499,6 +1499,9 @@ try: #if DEBUG: shutil.copyfile(temp_file, os.path.join(TEMP_DIR, 'to_opt.bc') # useful when LLVM opt aborts shared.Building.llvm_opt(temp_file, llvm_opts) + # Decide what we will link + linker_inputs = [val for _, val in sorted(temp_files + link_flags)] + # If we were just asked to generate bitcode, stop there if final_suffix not in JS_CONTAINING_SUFFIXES: if not specified_target: @@ -1522,10 +1525,9 @@ try: assert len(original_input_files) == 1 or not has_dash_c, 'fatal error: cannot specify -o with -c with multiple files' + str(sys.argv) + ':' + str(original_input_files) # We have a specified target (-o <target>), which is not JavaScript or HTML, and # we have multiple files: Link them - logging.debug('link: ' + str(temp_files) + specified_target) + logging.debug('link: ' + str(linker_inputs) + specified_target) # Sort arg tuples and pass the extracted values to link. - link_args = [f for (i, f) in sorted(temp_files)] - shared.Building.link(link_args, specified_target) + shared.Building.link(linker_inputs, specified_target) logging.debug('stopping at bitcode') exit(0) @@ -1547,7 +1549,7 @@ try: # First, combine the bitcode files if there are several. We must also link if we have a singleton .a if len(input_files) + len(extra_files_to_link) > 1 or \ (not LEAVE_INPUTS_RAW and not (suffix(temp_files[0][1]) in BITCODE_ENDINGS or suffix(temp_files[0][1]) in DYNAMICLIB_ENDINGS) and shared.Building.is_ar(temp_files[0][1])): - linker_inputs = [val for _, val in sorted(temp_files + link_flags)] + extra_files_to_link + linker_inputs += extra_files_to_link logging.debug('linking: ' + str(linker_inputs)) shared.Building.link(linker_inputs, in_temp(target_basename + '.bc'), force_archive_contents=len([temp for i, temp in temp_files if not temp.endswith(STATICLIB_ENDINGS)]) == 0) final = in_temp(target_basename + '.bc') diff --git a/tests/test_other.py b/tests/test_other.py index 738d4afe4c103..35b767092087f 100644 --- a/tests/test_other.py +++ b/tests/test_other.py @@ -1046,7 +1046,7 @@ def test_multiply_defined_libsymbols_2(self): self.assertContained('result: 62', run_js(os.path.join(self.get_dir(), 'a.out.js'))) - def test_link_group_asserts(self): + def test_link_group(self): lib_src_name = os.path.join(self.get_dir(), 'lib.c') open(lib_src_name, 'w').write('int x() { return 42; }') @@ -1078,6 +1078,29 @@ def test(lib_args, err_expected): test(['-Wl,--end-group', lib_name, '-Wl,--start-group'], '--end-group without --start-group') test(['-Wl,--start-group', lib_name, '-Wl,--end-group'], None) + def test_link_group_bitcode(self): + one = open('1.c', 'w').write(r''' +int f(void); +int main() { + f(); + return 0; +} + ''') + two = open('2.c', 'w').write(r''' +#include <stdio.h> +int f() { + printf("Hello\n"); + return 0; +} + ''') + + Popen([PYTHON, EMCC, '-o', '1.o', '1.c']).communicate() + Popen([PYTHON, EMCC, '-o', '2.o', '2.c']).communicate() + Popen([PYTHON, EMAR, 'crs', '2.a', '2.o']).communicate() + Popen([PYTHON, EMCC, '-o', 'out.bc', '-Wl,--start-group', '2.a', '1.o', '-Wl,--end-group']).communicate() + Popen([PYTHON, EMCC, 'out.bc']).communicate() + self.assertContained('Hello', run_js('a.out.js')) + def test_circular_libs(self): def tmp_source(name, code): file_name = os.path.join(self.get_dir(), name) From 57b3f35a88c389f83b1870e8ca8cb9193c9419d6 Mon Sep 17 00:00:00 2001 From: Alon Zakai <alonzakai@gmail.com> Date: Mon, 4 Aug 2014 16:32:53 -0700 Subject: [PATCH 27/30] ensure -lX libraries are linked in last, not according to their order in the inputs; fixes regression from 6556a69f282ec534512c3e6a119328fe98886a97 --- emcc | 2 +- tests/test_other.py | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/emcc b/emcc index d4201bcfa8e14..bbf66151dcf85 100755 --- a/emcc +++ b/emcc @@ -1186,7 +1186,7 @@ try: lib_dirs.append(arg[2:]) newargs[i] = '' elif arg.startswith('-l'): - libs.append((i, arg[2:])) + libs.append((next_arg_index + 1 + i, arg[2:])) # -l libraries must be linked in last newargs[i] = '' elif arg.startswith('-Wl,'): # Multiple comma separated link flags can be specified. Create fake diff --git a/tests/test_other.py b/tests/test_other.py index 35b767092087f..e815be87270f2 100644 --- a/tests/test_other.py +++ b/tests/test_other.py @@ -1101,6 +1101,12 @@ def test_link_group_bitcode(self): Popen([PYTHON, EMCC, 'out.bc']).communicate() self.assertContained('Hello', run_js('a.out.js')) + # link using -l syntax, ensure ordering works (group-related, but not exactly testing of groups; ordering was introduced for groups, and broke this) + Popen([PYTHON, EMCC, '-o', 'out.bc', '-L.', '-l2', '1.o']).communicate() + Popen([PYTHON, EMCC, 'out.bc']).communicate() + self.assertContained('Hello', run_js('a.out.js')) + + def test_circular_libs(self): def tmp_source(name, code): file_name = os.path.join(self.get_dir(), name) From 91ac0e524aa4c9859a3ed03fd95aa65020653a3e Mon Sep 17 00:00:00 2001 From: Alon Zakai <alonzakai@gmail.com> Date: Tue, 5 Aug 2014 13:07:00 -0700 Subject: [PATCH 28/30] fix benchmark return code checking --- tests/test_benchmark.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_benchmark.py b/tests/test_benchmark.py index 16abbfdd8070f..1b82b1e45b13f 100644 --- a/tests/test_benchmark.py +++ b/tests/test_benchmark.py @@ -118,7 +118,7 @@ def process(filename): self.filename = final def run(self, args): - return run_js(self.filename, engine=self.engine, args=args, stderr=PIPE, full_output=True) + return run_js(self.filename, engine=self.engine, args=args, stderr=PIPE, full_output=True, assert_returncode=None) # Benchmarkers try: From a31556de062e4fb3d128c981da725ed378194219 Mon Sep 17 00:00:00 2001 From: Alon Zakai <alonzakai@gmail.com> Date: Tue, 5 Aug 2014 15:13:42 -0700 Subject: [PATCH 29/30] use emscripten_force_exit in sockets.test_nodejs_sockets_echo, fixing it --- tests/sockets/test_sockets_echo_client.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/sockets/test_sockets_echo_client.c b/tests/sockets/test_sockets_echo_client.c index 48c031a4c54ef..af01311d5f21f 100644 --- a/tests/sockets/test_sockets_echo_client.c +++ b/tests/sockets/test_sockets_echo_client.c @@ -44,8 +44,10 @@ void finish(int result) { } #ifdef __EMSCRIPTEN__ REPORT_RESULT(); -#endif + emscripten_force_exit(result); +#else exit(result); +#endif } void main_loop() { From 46d00a9b4f825955cbc5588285db92d237525074 Mon Sep 17 00:00:00 2001 From: Alon Zakai <alonzakai@gmail.com> Date: Tue, 5 Aug 2014 15:25:29 -0700 Subject: [PATCH 30/30] 1.22.0 --- emscripten-version.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/emscripten-version.txt b/emscripten-version.txt index 5b3a48eab21e4..af3b687c7e180 100644 --- a/emscripten-version.txt +++ b/emscripten-version.txt @@ -1,2 +1,2 @@ -1.21.10 +1.22.0