Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/build-wasm.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ jobs:

- name: Build wasm
run: |
emcc -std=c89 -s STANDALONE_WASM=1 wasm/hello.c -o wasm/hello.wasm
emcc -std=c89 --no-entry -s STANDALONE_WASM=1 wasm/hello.c -o wasm/hello.wasm

# If you use Jekyll, build here; otherwise just ship the repo contents.
- name: Configure Pages
Expand Down
43 changes: 38 additions & 5 deletions pages/dummy.html
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,31 @@ <h2>WebAssembly Greeting Demo</h2>
const wasmUrl = '/wasm/hello.wasm';
const loadButton = document.getElementById('load-wasm');
const output = document.getElementById('wasm-result');
const utf8Decoder = new TextDecoder('utf-8');

function createWasiImports() {
const noop = () => 0;

return {
wasi_snapshot_preview1: {
proc_exit(code) {
if (code !== 0) {
throw new Error(`WebAssembly module exited with code ${code}`);
}
},
fd_close: noop,
fd_fdstat_get: noop,
fd_seek: noop,
fd_write: noop,
environ_get: noop,
environ_sizes_get: noop,
args_get: noop,
args_sizes_get: noop,
clock_time_get: noop,
random_get: noop,
},
};
}

async function loadGreetingFromWasm() {
output.textContent = 'Loading greeting...';
Expand All @@ -41,23 +66,31 @@ <h2>WebAssembly Greeting Demo</h2>
}

const buffer = await response.arrayBuffer();
const { instance } = await WebAssembly.instantiate(buffer, {});
const imports = createWasiImports();
const { instance } = await WebAssembly.instantiate(buffer, imports);
const { exports } = instance;

if (typeof exports.get_greeting !== 'function' || typeof exports.get_greeting_length !== 'function') {
const getGreeting = exports.get_greeting || exports._get_greeting;
const getGreetingLength = exports.get_greeting_length || exports._get_greeting_length;

if (typeof getGreeting !== 'function' || typeof getGreetingLength !== 'function') {
throw new Error('Expected WebAssembly exports were not found.');
}

const pointer = exports.get_greeting();
const length = exports.get_greeting_length();
if (typeof exports._initialize === 'function') {
exports._initialize();
}

const memory = exports.memory;

if (!(memory instanceof WebAssembly.Memory)) {
throw new Error('WebAssembly memory export is missing.');
}

const pointer = getGreeting();
const length = getGreetingLength();
const bytes = new Uint8Array(memory.buffer, pointer, length);
const greeting = new TextDecoder('utf-8').decode(bytes);
const greeting = utf8Decoder.decode(bytes);

output.textContent = greeting;
} catch (error) {
Expand Down
5 changes: 0 additions & 5 deletions wasm/hello.c
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,3 @@ size_t get_greeting_length(void)
{
return sizeof(GREETING) - 1;
}

int main(void)
{
return 0;
}