Import preliminary compilation script for webassembly

Thanks to @facekapow

This still needs quite a bit of work, so don't add to the distfiles yet
This commit is contained in:
Frank Denis 2017-03-12 17:44:29 +01:00
parent 036326683c
commit d4dbf0cc4f
2 changed files with 250 additions and 0 deletions

132
dist-build/emscripten-wasm.sh Executable file

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,118 @@
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="google" content="notranslate" />
<style>
body {
background: white;
color: black;
}
.test p {
margin: 1px;
}
.test {
font-family: monospace;
white-space: pre;
}
.err {
background: red;
color: white;
}
.passed {
background: green;
color: white;
}
</style>
</head>
<body>
<h1></h1>
<section class="test" id="test-res"></section>
<script>
window.testMain = function() {
function runTest(tname) {
var xhr, expected, hn, idx = 0, passed = true;
function outputReceived(e) {
var found = e.data;
var p = document.createElement('p');
if (found !== expected[idx++]) {
p.className = 'err';
passed = false;
}
p.appendChild(document.createTextNode(found));
document.getElementById('test-res').appendChild(p);
if (idx >= expected.length) {
if (passed) {
hn.appendChild(document.createTextNode(' - PASSED'));
hn.className = 'passed';
} else {
hn.appendChild(document.createTextNode(' - FAILED'));
hn.className = 'err';
}
if (window.ontestresult) window.ontestresult(passed); // used for the full suite
}
}
hn = document.getElementsByTagName('h1')[0];
hn.appendChild(document.createTextNode('Test: ' + tname));
try {
xhr = new ActiveXObject('Microsoft.XMLHTTP');
} catch (e) {
xhr = new XMLHttpRequest();
}
xhr.open('GET', tname + '.exp');
xhr.onreadystatechange = function() {
if (xhr.readyState != 4 || (xhr.status != 200 && xhr.status != 302 && xhr.status != 0)) return;
expected = xhr.responseText.split('\n');
if (expected.length > 0 && expected[expected.length - 1] === '') expected.pop();
expected.push('--- SUCCESS ---');
window.addEventListener('test-output', outputReceived, false);
var wasmXhr = null;
try {
wasmXhr = new ActiveXObject('Microsoft.XMLHTTP');
} catch (e) {
wasmXhr = new XMLHttpRequest();
}
wasmXhr.open('GET', tname + '.wasm');
wasmXhr.responseType = 'arraybuffer';
wasmXhr.onreadystatechange = function() {
if (wasmXhr.readyState != 4 || (wasmXhr.status != 200 && wasmXhr.status != 302 && wasmXhr.status != 0)) return;
window.Module = window.Module || {};
Module.wasmBinary = wasmXhr.response;
var s = document.getElementsByTagName('script')[0];
var st = document.createElement('script');
st.src = tname + '.js';
s.parentNode.insertBefore(st, s);
}
wasmXhr.send(null);
}
xhr.send(null);
}
runTest('{{tname}}');
};
</script>
<script>
(function() {
function inIframe() {
try {
// foolproof, but modern
// also might be blocked to prevent XSS
return !!window.frameElement;
} catch (e) {
try {
// might be blocked by same origin policy
return window.self !== window.top;
} catch (e) {
return true;
}
}
}
if (!inIframe()) window.testMain(); // run the test automatically if the user loaded the page directly
})();
</script>
</body>
</html>