
Traduce módulos WebAssembly a C portátil. Inspirado en wasm2c de wabt.
Trabajando hacia WebAssembly como el binario universal esquivo:
↗ different
source code → WebAssembly → C89 → OSes,
(C++, Rust, ...) ↘ CPUs
names.debug_line . Requiere la instalación de libdwarf. Vea las instrucciones a continuación.Si su sistema es compatible con al menos CMake 2.8.12, prefiera usar CMake para detectar funciones. En sistemas sin CMake también puedes usar Make.
cd w2c2
cmake -B build
cmake --build build cd wasi
cmake -B build
cmake --build build Por ejemplo, para compilar module.wasm en module.c (y module.h ):
./w2c2 module.wasm module.cw2c2 puede compilar un módulo en archivos C separados. Esto se recomienda al compilar módulos grandes y en hosts con recursos limitados.
Por ejemplo, para compilar module.wasm (y module.h ), en varios archivos con 100 funciones cada uno:
./w2c2 -f 100 module.wasm module.cCuando w2c2 se creó con soporte de subprocesos, puede compilar un módulo en paralelo. De forma predeterminada, w2c2 genera tantos subprocesos de trabajo como núcleos de CPU estén disponibles.
Para especificar manualmente el número de subprocesos de trabajo, pase el número utilizando el indicador -t .
Por ejemplo, para compilar usando 2 subprocesos:
./w2c2 -t 2 module.wasm module.cMarca principal:
cd examples/coremark
make
./coremark Requiere Python 3 y wabt (para 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 (de la propuesta de hilos) Para crear una versión de depuración, pase BUILD=debug para make .
Para habilitar los desinfectantes, enumerelos en la variable SANITIZERS pasada a make , por ejemplo, make BUILD=debug SANITIZERS="base clang address thread" .
base habilita el desinfectante de comportamiento indefinido.clang habilita desinfectantes específicos de Clangthread habilita el desinfectante de hiloaddress habilita el desinfectante de direcciones. En Linux, intente instalar un paquete llamado libdwarf-dev
En macOS, puedes usar Homebrew e instalar libdwarf (¡no dwarf !)
Actualmente, w2c2 utiliza de forma predeterminada la API libdwarf de >=v0.4.2. También se ha probado que v0.6.0 funciona correctamente.
Si usa una versión <0.4.2, intente pasar -DDWARF_OLD=1 a CMake. Se sabe que la versión 20200114 funciona.
Desde la versión 0.1.1, libdwarf viene con un archivo pkg-config, que CMake debería poder detectar automáticamente.
Si CMake no puede encontrar libdwarf automáticamente, recibirá el siguiente mensaje:
-- Checking for module 'libdwarf'
-- No package 'libdwarf' found
En ese caso, aún puedes proporcionar la información necesaria manualmente pasando una variación de las siguientes opciones:
-DDWARF_FOUND=1 -DDWARF_LIBRARIES=-ldwarf -DDWARF_LIBRARY_DIRS=/usr/lib -DDWARF_INCLUDE_DIRS=/usr/include/libdwarf