
Traduz módulos WebAssembly para C portátil. Inspirado no wasm2c do wabt.
Trabalhando para que o WebAssembly seja o Binário Universal Elusivo:
↗ different
source code → WebAssembly → C89 → OSes,
(C++, Rust, ...) ↘ CPUs
names.debug_line . Requer que o libdwarf esteja instalado. Veja as instruções abaixo.Se o seu sistema for compatível com pelo menos CMake 2.8.12, prefira usar o CMake para detectar recursos. Em sistemas sem CMake você também pode usar Make.
cd w2c2
cmake -B build
cmake --build build cd wasi
cmake -B build
cmake --build build Por exemplo, para compilar module.wasm para module.c (e module.h ):
./w2c2 module.wasm module.cw2c2 é capaz de compilar um módulo em arquivos C separados. Isto é recomendado ao compilar módulos grandes e em hosts com recursos limitados.
Por exemplo, para compilar module.wasm (e module.h ), em vários arquivos com 100 funções cada:
./w2c2 -f 100 module.wasm module.cQuando o w2c2 foi construído com suporte a threading, ele é capaz de compilar um módulo em paralelo. Por padrão, w2c2 gera tantos threads de trabalho quantos núcleos de CPU estiverem disponíveis.
Para especificar manualmente o número de threads de trabalho, passe o número usando o sinalizador -t .
Por exemplo, para compilar usando 2 threads:
./w2c2 -t 2 module.wasm module.cMarca principal:
cd examples/coremark
make
./coremark Requer Python 3 e 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 (da proposta de threads) Para construir uma versão de depuração, passe BUILD=debug para make .
Para habilitar sanitizadores, liste-os na variável SANITIZERS passada para make , por exemplo make BUILD=debug SANITIZERS="base clang address thread" .
base ativa o Desinfetante de Comportamento Indefinidoclang permite desinfetantes específicos do Clangthread ativa o Thread Sanitizeraddress ativa o Address Sanitizer No Linux, tente instalar um pacote chamado libdwarf-dev
No macOS, você pode usar o Homebrew e instalar libdwarf (não dwarf !)
O w2c2 atualmente usa como padrão a API libdwarf de >=v0.4.2. v0.6.0 também foi testado para funcionar com sucesso.
Se estiver usando uma versão <0.4.2, tente passar -DDWARF_OLD=1 para o CMake. Sabe-se que a versão 20200114 funciona.
Desde a versão 0.1.1, o libdwarf vem com um arquivo pkg-config, que o CMake deve ser capaz de detectar automaticamente.
Se o libdwarf não puder ser encontrado automaticamente pelo CMake, você receberá a seguinte mensagem:
-- Checking for module 'libdwarf'
-- No package 'libdwarf' found
Nesse caso você ainda pode fornecer as informações necessárias manualmente, passando uma variação das seguintes opções:
-DDWARF_FOUND=1 -DDWARF_LIBRARIES=-ldwarf -DDWARF_LIBRARY_DIRS=/usr/lib -DDWARF_INCLUDE_DIRS=/usr/include/libdwarf