Übersetzt WebAssembly-Module in portables C. Inspiriert von wasm2c von wabt.
Auf dem Weg zu WebAssembly als schwer fassbarer universeller Binärdatei:
↗ different
source code → WebAssembly → C89 → OSes,
(C++, Rust, ...) ↘ CPUs
names
bereitgestellt werden.debug_line
bereitgestellt werden. Erfordert die Installation von libdwarf. Siehe Anweisungen unten.Wenn Ihr System mindestens von CMake 2.8.12 unterstützt wird, verwenden Sie lieber CMake, um Funktionen zu erkennen. Auf Systemen ohne CMake können Sie auch Make verwenden.
cd w2c2
cmake -B build
cmake --build build
cd wasi
cmake -B build
cmake --build build
So kompilieren Sie beispielsweise module.wasm
zu module.c
(und module.h
):
./w2c2 module.wasm module.c
w2c2 ist in der Lage, ein Modul in separate C-Dateien zu kompilieren. Dies empfiehlt sich beim Kompilieren großer Module und auf Hosts mit begrenzten Ressourcen.
Um beispielsweise module.wasm
(und module.h
) in mehrere Dateien mit jeweils 100 Funktionen zu kompilieren:
./w2c2 -f 100 module.wasm module.c
Wenn w2c2 mit Threading-Unterstützung erstellt wurde, ist es in der Lage, ein Modul parallel zu kompilieren. Standardmäßig erzeugt w2c2 so viele Arbeitsthreads, wie CPU-Kerne verfügbar sind.
Um die Anzahl der Arbeitsthreads manuell anzugeben, übergeben Sie die Zahl mit dem Flag -t
.
So kompilieren Sie beispielsweise mit zwei Threads:
./w2c2 -t 2 module.wasm module.c
Kernmarke:
cd examples/coremark
make
./coremark
Erfordert Python 3 und wabt (für 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
(aus dem Thread-Vorschlag) Um eine Debug-Version zu erstellen, übergeben Sie BUILD=debug
an make
.
Um Desinfektionsmittel zu aktivieren, listen Sie sie in der an make
übergebenen SANITIZERS
Variablen auf, z. B. make BUILD=debug SANITIZERS="base clang address thread"
.
base
aktiviert den Undefined Behavior Sanitizerclang
aktiviert Clang-spezifische Desinfektionsmittelthread
aktiviert den Thread Sanitizeraddress
aktiviert den Address Sanitizer Versuchen Sie unter Linux, ein Paket mit dem Namen libdwarf-dev
zu installieren
Unter macOS können Sie Homebrew verwenden und libdwarf
(nicht dwarf
!) installieren.
w2c2 verwendet derzeit standardmäßig die libdwarf-API von >=v0.4.2. v0.6.0 wurde ebenfalls erfolgreich getestet.
Wenn Sie eine Version <0.4.2 verwenden, versuchen Sie, -DDWARF_OLD=1
an CMake zu übergeben. Es ist bekannt, dass die Version 20200114 funktioniert.
Seit Version 0.1.1 wird libdwarf mit einer pkg-config-Datei ausgeliefert, die CMake automatisch erkennen sollte.
Wenn libdwarf von CMake nicht automatisch gefunden werden kann, erhalten Sie die folgende Meldung:
-- Checking for module 'libdwarf'
-- No package 'libdwarf' found
In diesem Fall können Sie die erforderlichen Informationen dennoch manuell bereitstellen, indem Sie eine Variation der folgenden Optionen übergeben:
-DDWARF_FOUND=1 -DDWARF_LIBRARIES=-ldwarf -DDWARF_LIBRARY_DIRS=/usr/lib -DDWARF_INCLUDE_DIRS=/usr/include/libdwarf