
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.cw2c2 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.cLorsque 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 nombre à l'aide de l'indicateur -t .
Par exemple, pour compiler en utilisant 2 threads :
./w2c2 -t 2 module.wasm module.cMarque principale :
cd examples/coremark
make
./coremark Nécessite Python 3 et wabt (pour wast2json ).
cd tests
make gen
make run-testsargs_getargs_sizes_getclock_res_getclock_time_getenviron_getenviron_sizes_getfd_advisefd_allocatefd_closefd_datasyncfd_fdstat_getfd_fdstat_set_flagsfd_fdstat_set_rightsfd_filestat_getfd_filestat_set_sizefd_filestat_set_timesfd_preadfd_prestat_getfd_prestat_dir_namefd_pwritefd_readfd_readdirfd_renumberfd_seekfd_syncfd_tellfd_writepath_create_directorypath_filestat_getpath_filestat_set_timespath_linkpath_openpath_readlinkpath_remove_directorypath_renamepath_symlinkpath_unlink_filepoll_oneoffproc_exitrandom_getsched_yieldsock_recvsock_sendsock_shutdownthread-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