
Ü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 angegeben sind.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.cw2c2 ist in der Lage, ein Modul in separate C-Dateien zu kompilieren. Dies wird beim Kompilieren großer Module und auf Hosts mit begrenzten Ressourcen empfohlen.
So kompilieren Sie beispielsweise module.wasm (und module.h ) in mehrere Dateien mit jeweils 100 Funktionen:
./w2c2 -f 100 module.wasm module.cWenn 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.cKernmarke:
cd examples/coremark
make
./coremark Erfordert Python 3 und wabt (für 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 (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