
WebAssembly モジュールをポータブル C に変換します。wabt の wasm2c からインスピレーションを受けています。
捉えどころのないユニバーサル バイナリとしての WebAssembly に向けた取り組み:
↗ different
source code → WebAssembly → C89 → OSes,
(C++, Rust, ...) ↘ CPUs
namesカスタム セクションで指定されている場合).debug_lineカスタム セクションで提供されている場合)。 libdwarf をインストールする必要があります。以下の手順を参照してください。システムが少なくとも CMake 2.8.12 でサポートされている場合は、CMake を使用して機能を検出することを優先します。 CMake のないシステムでは、Make を使用することもできます。
cd w2c2
cmake -B build
cmake --build build cd wasi
cmake -B build
cmake --build buildたとえば、 module.wasm module.c (およびmodule.h ) にコンパイルするには、次のようにします。
./w2c2 module.wasm module.cw2c2 は、モジュールを個別の C ファイルにコンパイルできます。これは、大規模なモジュールをコンパイルする場合やリソースが限られているホスト上で行うことをお勧めします。
たとえば、 module.wasm (およびmodule.h ) を、それぞれ 100 個の関数を含む複数のファイルにコンパイルするには、次のようにします。
./w2c2 -f 100 module.wasm module.cw2c2 がスレッド化サポートを使用してビルドされた場合、モジュールを並列でコンパイルできます。デフォルトでは、w2c2 は利用可能な CPU コアと同じ数のワーカー スレッドを生成します。
ワーカー スレッドの数を手動で指定するには、 -tフラグを使用して数値を渡します。
たとえば、2 つのスレッドを使用してコンパイルするには:
./w2c2 -t 2 module.wasm module.cコアマーク:
cd examples/coremark
make
./coremarkPython 3 と wabt ( 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 (スレッド提案より) デバッグ リリースをビルドするには、 BUILD=debug makeに渡します。
サニタイザーを有効にするには、 makeに渡されるSANITIZERS変数にサニタイザーをリストします (例: make BUILD=debug SANITIZERS="base clang address thread" 。
base未定義動作サニタイザーを有効にしますclang Clang 固有のサニタイザーを有効にしますthreadスレッドサニタイザーを有効にしますaddressアドレスサニタイザーを有効にします Linux では、 libdwarf-devのような名前のパッケージをインストールしてみてください。
macOS では、Homebrew を使用してlibdwarf ( dwarfはありません!) をインストールできます。
現在、w2c2 はデフォルトで v0.4.2 以上の libdwarf API を使用します。 v0.6.0 も正常に動作することがテストされています。
バージョン 0.4.2 未満を使用している場合は、 -DDWARF_OLD=1 CMake に渡してみてください。バージョン 20200114 は動作することが確認されています。
バージョン 0.1.1 以降、libdwarf には pkg-config ファイルが付属しており、CMake はこのファイルを自動的に検出できるはずです。
CMake によって libdwarf が自動的に見つからない場合は、次のメッセージが表示されます。
-- Checking for module 'libdwarf'
-- No package 'libdwarf' found
その場合でも、次のオプションのバリエーションを渡すことで、必要な情報を手動で提供できます。
-DDWARF_FOUND=1 -DDWARF_LIBRARIES=-ldwarf -DDWARF_LIBRARY_DIRS=/usr/lib -DDWARF_INCLUDE_DIRS=/usr/include/libdwarf