Traduit les modules WebAssembly en C portable. Inspiré par wasm2c de wabt.
Travailler vers WebAssembly en tant que binaire universel insaisissable :
↗ different
source code → WebAssembly → C89 → OSes,
(C++, Rust, ...) ↘ CPUs
names
.debug_line
. Nécessite l'installation de libdwarf. Voir les instructions ci-dessous.Si votre système est pris en charge par au moins CMake 2.8.12, préférez utiliser CMake pour détecter les fonctionnalités. Sur les systèmes sans CMake, vous pouvez également utiliser Make.
cd w2c2
cmake -B build
cmake --build build
cd wasi
cmake -B build
cmake --build build
Par exemple, pour compiler module.wasm
en module.c
(et module.h
) :
./w2c2 module.wasm module.c
w2c2 est capable de compiler un module dans des fichiers C séparés. Ceci est recommandé lors de la compilation de modules volumineux et sur des hôtes aux ressources limitées.
Par exemple, pour compiler module.wasm
(et module.h
), en plusieurs fichiers contenant chacun 100 fonctions :
./w2c2 -f 100 module.wasm module.c
Lorsque w2c2 a été construit avec le support des threads, il est capable de compiler un module en parallèle. Par défaut, w2c2 génère autant de threads de travail que de cœurs de processeur disponibles.
Pour spécifier manuellement le nombre de threads de travail, transmettez le numéro à l'aide de l'indicateur -t
.
Par exemple, pour compiler en utilisant 2 threads :
./w2c2 -t 2 module.wasm module.c
Marque principale :
cd examples/coremark
make
./coremark
Nécessite Python 3 et wabt (pour wast2json
).
cd tests
make gen
make run-tests
args_get
args_sizes_get
clock_res_get
clock_time_get
environ_get
environ_sizes_get
fd_advise
fd_allocate
fd_close
fd_datasync
fd_fdstat_get
fd_fdstat_set_flags
fd_fdstat_set_rights
fd_filestat_get
fd_filestat_set_size
fd_filestat_set_times
fd_pread
fd_prestat_get
fd_prestat_dir_name
fd_pwrite
fd_read
fd_readdir
fd_renumber
fd_seek
fd_sync
fd_tell
fd_write
path_create_directory
path_filestat_get
path_filestat_set_times
path_link
path_open
path_readlink
path_remove_directory
path_rename
path_symlink
path_unlink_file
poll_oneoff
proc_exit
random_get
sched_yield
sock_recv
sock_send
sock_shutdown
thread-spawn
(à partir de la proposition de threads) Pour créer une version de débogage, transmettez BUILD=debug
à make
.
Pour activer les désinfectants, répertoriez-les dans la variable SANITIZERS
passée à make
, par exemple make BUILD=debug SANITIZERS="base clang address thread"
.
base
active le désinfectant à comportement non définiclang
active les désinfectants spécifiques à Clangthread
active le Thread Sanitizeraddress
active l'Address Sanitizer Sous Linux, essayez d'installer un package nommé comme libdwarf-dev
Sur macOS, vous pouvez utiliser Homebrew et installer libdwarf
(pas dwarf
!)
w2c2 utilise actuellement par défaut l'API libdwarf de >=v0.4.2. La version 0.6.0 a également été testée pour fonctionner avec succès.
Si vous utilisez une version <0.4.2, essayez de passer -DDWARF_OLD=1
à CMake. La version 20200114 est connue pour fonctionner.
Depuis la version 0.1.1, libdwarf est livré avec un fichier pkg-config, que CMake devrait être capable de détecter automatiquement.
Si libdwarf ne peut pas être trouvé automatiquement par CMake, vous obtenez le message suivant :
-- Checking for module 'libdwarf'
-- No package 'libdwarf' found
Dans ce cas, vous pouvez toujours fournir les informations nécessaires manuellement en passant une variante des options suivantes :
-DDWARF_FOUND=1 -DDWARF_LIBRARIES=-ldwarf -DDWARF_LIBRARY_DIRS=/usr/lib -DDWARF_INCLUDE_DIRS=/usr/include/libdwarf