Ajouter un commentaire

Exécuter Clang dans le navigateur avec les WebAssembly

Par:
francoistonic

mer, 16/10/2024 - 08:26

Comment exécuter directement un binaire C sur un navigateur ? Syrus Akbary publie un post décrivant cette possibilité tout en explorant les capacités du SDK Wasmer JS. Wasmer permet justement d'exécuter du code C compilé (clang) via JavaScript ou tout navigateur compatible WebAssembly. 

Il faut au prélable installer wasmer et compiler le code pour wasm. La compilation se fait avec WASI et WASIX. Le support de clang dans Wasmer pèse environ 100 Mo. Les équipes Wasmer travaille à diviser par 3 ce poids. 

L'utilisation de clang dans son projet JS est possible avec par exemple le Wasmer JS SDK, par exemple :

import {
  init,
  Wasmer,
  Directory
} from "https://unpkg.com/@wasmer/sdk@latest/dist/index.mjs";

await init();

const clang = await Wasmer.fromRegistry("clang/clang");
const project = new Directory();
await project.writeFile("example.c",
`#include<stdio.h>

int main() {
printf("Hello World");
return 0;
}
`);

let instance = await clang.entrypoint.run({
args: ["/project/example.c", "-o", "/project/example.wasm"],
mount: { "/project": project },
});
const output = await instance.wait();

if (!output.ok) {
throw new Error(`Clang failed. Exit: ${output.code}:`);
}

// The generated wasm file from clang
let wasm = await project.readFile("example.wasm");

const example = await Wasmer.fromFile(wasm);
const result = await example.entrypoint.run();
const outputExample = await result.wait();

// This should be "Hello World"
console.log(outputExample.stdout);

Pour découvrir le post complet : https://wasmer.io/posts/clang-in-browser

Filtered HTML

Plain text

CAPTCHA
Cette question permet de vérifier que vous n'êtes pas un robot spammeur :-)
 X   X  M   M  W     W  PPPP   RRRR  
X X MM MM W W P P R R
X M M M W W W PPPP RRRR
X X M M W W W P R R
X X M M W W P R RR