diff options
author | Alon Zakai <alonzakai@gmail.com> | 2014-02-13 14:00:50 -0800 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2014-02-13 14:01:34 -0800 |
commit | ea8830dc5c54a65bd5587096c07935bf46688167 (patch) | |
tree | 5eab19e648989ca317976f3fb4019f6b7b1d4156 | |
parent | c9be5fb89ebc7b45a22d3782f7f7da4ce8043ae2 (diff) |
improve emcc help on shell file, and add minimal shell file example
-rwxr-xr-x | emcc | 49 | ||||
-rw-r--r-- | src/shell_minimal.html | 132 |
2 files changed, 157 insertions, 24 deletions
@@ -276,21 +276,6 @@ Options that are modified or new in %s include: Note: Closure is only run if js opts are being done (-O2 or above, or --js-opts 1). - --js-transform <cmd> <cmd> will be called on the generated code - before it is optimized. This lets you modify - the JavaScript, for example adding some code - or removing some code, in a way that those - modifications will be optimized together with - the generated code properly. <cmd> will be - called with the filename of the generated - code as a parameter; to modify the code, you - can read the original data and then append to - it or overwrite it with the modified data. - <cmd> is interpreted as a space-separated - list of arguments, for example, <cmd> of - "python processor.py" will cause a python - script to be run. - --pre-js <file> A file whose contents are added before the generated code. This is done *before* optimization, so it will be minified @@ -349,6 +334,16 @@ Options that are modified or new in %s include: --embed-file and --preload-file wildcard is supported + --shell-file <path> The path name to a skeleton HTML file used + when generating HTML output. The shell file + used needs to have this token inside it: + {{{ SCRIPT }}} + (see src/shell.html and + src/shell_minimal.html for examples) + Note that this argument is ignored if a + target other than HTML is specified using + the -o option. + --compression <codec> **THIS OPTION IS DEPRECATED** Compress both the compiled code and embedded/ @@ -372,6 +367,21 @@ Options that are modified or new in %s include: --minify 0 Identical to -g1 + --js-transform <cmd> <cmd> will be called on the generated code + before it is optimized. This lets you modify + the JavaScript, for example adding some code + or removing some code, in a way that those + modifications will be optimized together with + the generated code properly. <cmd> will be + called with the filename of the generated + code as a parameter; to modify the code, you + can read the original data and then append to + it or overwrite it with the modified data. + <cmd> is interpreted as a space-separated + list of arguments, for example, <cmd> of + "python processor.py" will cause a python + script to be run. + --split <size> Splits the resulting javascript file into pieces to ease debugging. This option only works if Javascript is generated (target -o <name>.js). @@ -408,15 +418,6 @@ Options that are modified or new in %s include: errors. However, you will need to manually link to the shared libraries later on yourself. - --shell-file <path> The path name to a skeleton HTML file used - when generating HTML output. The shell file - used needs to have this token inside it: - {{{ SCRIPT }}} - (see src/shell.html for an example) - Note that this argument is ignored if a - target other than HTML is specified using - the -o option. - --js-library <lib> A JavaScript library to use in addition to those in Emscripten's src/library_* diff --git a/src/shell_minimal.html b/src/shell_minimal.html new file mode 100644 index 00000000..7a3a8d08 --- /dev/null +++ b/src/shell_minimal.html @@ -0,0 +1,132 @@ +<!doctype html> +<html lang="en-us"> + <head> + <meta charset="utf-8"> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <title>Emscripten-Generated Code</title> + <style> + .emscripten { padding-right: 0; margin-left: auto; margin-right: auto; display: block; } + textarea.emscripten { font-family: monospace; width: 80%; } + div.emscripten { text-align: center; } + div.emscripten_border { border: 1px solid black; } + /* the canvas *must not* have any border or padding, or mouse coords will be wrong */ + canvas.emscripten { border: 0px none; } + + .spinner { + height: 50px; + width: 50px; + margin: 0px auto; + -webkit-animation: rotation .8s linear infinite; + -moz-animation: rotation .8s linear infinite; + -o-animation: rotation .8s linear infinite; + animation: rotation 0.8s linear infinite; + border-left: 10px solid rgb(0,150,240); + border-right: 10px solid rgb(0,150,240); + border-bottom: 10px solid rgb(0,150,240); + border-top: 10px solid rgb(100,0,200); + border-radius: 100%; + background-color: rgb(200,100,250); + } + @-webkit-keyframes rotation { + from {-webkit-transform: rotate(0deg);} + to {-webkit-transform: rotate(360deg);} + } + @-moz-keyframes rotation { + from {-moz-transform: rotate(0deg);} + to {-moz-transform: rotate(360deg);} + } + @-o-keyframes rotation { + from {-o-transform: rotate(0deg);} + to {-o-transform: rotate(360deg);} + } + @keyframes rotation { + from {transform: rotate(0deg);} + to {transform: rotate(360deg);} + } + + </style> + </head> + <body> + <hr/> + <figure style="overflow:visible;" id="spinner"><div class="spinner"></div><center style="margin-top:0.5em"><strong>emscripten</strong></center></figure> + <div class="emscripten" id="status">Downloading...</div> + <div class="emscripten"> + <progress value="0" max="100" id="progress" hidden=1></progress> + </div> + <div class="emscripten_border"> + <canvas class="emscripten" id="canvas" oncontextmenu="event.preventDefault()"></canvas> + </div> + <hr/> + <div class="emscripten"> + <input type="checkbox" id="resize">Resize canvas + <input type="checkbox" id="pointerLock" checked>Lock/hide mouse pointer + + <input type="button" value="Fullscreen" onclick="Module.requestFullScreen(document.getElementById('pointerLock').checked, + document.getElementById('resize').checked)"> + </div> + + <hr/> + <textarea class="emscripten" id="output" rows="8"></textarea> + <hr> + <script type='text/javascript'> + var statusElement = document.getElementById('status'); + var progressElement = document.getElementById('progress'); + var spinnerElement = document.getElementById('spinner'); + + var Module = { + preRun: [], + postRun: [], + print: (function() { + var element = document.getElementById('output'); + element.value = ''; // clear browser cache + return function(text) { + text = Array.prototype.slice.call(arguments).join(' '); + // These replacements are necessary if you render to raw HTML + //text = text.replace(/&/g, "&"); + //text = text.replace(/</g, "<"); + //text = text.replace(/>/g, ">"); + //text = text.replace('\n', '<br>', 'g'); + element.value += text + "\n"; + element.scrollTop = element.scrollHeight; // focus on bottom + }; + })(), + printErr: function(text) { + text = Array.prototype.slice.call(arguments).join(' '); + if (0) { // XXX disabled for safety typeof dump == 'function') { + dump(text + '\n'); // fast, straight to the real console + } else { + console.log(text); + } + }, + canvas: document.getElementById('canvas'), + setStatus: function(text) { + if (!Module.setStatus.last) Module.setStatus.last = { time: Date.now(), text: '' }; + if (text === Module.setStatus.text) return; + var m = text.match(/([^(]+)\((\d+(\.\d+)?)\/(\d+)\)/); + var now = Date.now(); + if (m && now - Date.now() < 30) return; // if this is a progress update, skip it if too soon + if (m) { + text = m[1]; + progressElement.value = parseInt(m[2])*100; + progressElement.max = parseInt(m[4])*100; + progressElement.hidden = false; + spinnerElement.hidden = false; + } else { + progressElement.value = null; + progressElement.max = null; + progressElement.hidden = true; + if (!text) spinnerElement.hidden = true; + } + statusElement.innerHTML = text; + }, + totalDependencies: 0, + monitorRunDependencies: function(left) { + this.totalDependencies = Math.max(this.totalDependencies, left); + Module.setStatus(left ? 'Preparing... (' + (this.totalDependencies-left) + '/' + this.totalDependencies + ')' : 'All downloads complete.'); + } + }; + Module.setStatus('Downloading...'); + </script> + {{{ SCRIPT }}} + </body> +</html> |