Menerjemahkan modul WebAssembly ke C portabel. Terinspirasi oleh wasm2c wabt.
Bekerja menuju WebAssembly sebagai Biner Universal yang Sulit Dicapai:
↗ different
source code → WebAssembly → C89 → OSes,
(C++, Rust, ...) ↘ CPUs
names
.debug_line
. Membutuhkan libdwarf untuk diinstal. Lihat petunjuk di bawah.Jika sistem Anda didukung oleh setidaknya CMake 2.8.12, lebih baik gunakan CMake untuk mendeteksi fitur. Pada sistem tanpa CMake Anda juga dapat menggunakan Make.
cd w2c2
cmake -B build
cmake --build build
cd wasi
cmake -B build
cmake --build build
Misalnya, untuk mengkompilasi module.wasm
ke module.c
(dan module.h
):
./w2c2 module.wasm module.c
w2c2 dapat mengkompilasi modul menjadi file C terpisah. Hal ini direkomendasikan ketika mengkompilasi modul besar dan pada host dengan sumber daya terbatas.
Misalnya, untuk mengkompilasi module.wasm
(dan module.h
), menjadi beberapa file dengan masing-masing 100 fungsi:
./w2c2 -f 100 module.wasm module.c
Ketika w2c2 dibangun dengan dukungan threading, ia mampu mengkompilasi modul secara paralel. Secara default, w2c2 memunculkan thread pekerja sebanyak inti CPU yang tersedia.
Untuk menentukan jumlah thread pekerja secara manual, teruskan nomor tersebut menggunakan flag -t
.
Misalnya untuk kompilasi menggunakan 2 thread:
./w2c2 -t 2 module.wasm module.c
Tanda inti:
cd examples/coremark
make
./coremark
Membutuhkan Python 3 dan wabt (untuk 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
(dari proposal thread) Untuk membuat rilis debug, teruskan BUILD=debug
ke make
.
Untuk mengaktifkan pembersih, cantumkan pembersih tersebut dalam variabel SANITIZERS
yang diteruskan ke make
, misalnya make BUILD=debug SANITIZERS="base clang address thread"
.
base
mengaktifkan Pembersih Perilaku Tidak Terdefinisiclang
mengaktifkan pembersih khusus Clangthread
mengaktifkan Pembersih Threadaddress
mengaktifkan Pembersih Alamat Di Linux, coba instal paket bernama libdwarf-dev
Di macOS, Anda dapat menggunakan Homebrew dan menginstal libdwarf
(bukan dwarf
!)
w2c2 saat ini secara default menggunakan libdwarf API >=v0.4.2. v0.6.0 telah diuji untuk berhasil juga.
Jika menggunakan versi <0.4.2, coba teruskan -DDWARF_OLD=1
ke CMake. Versi 20200114 diketahui berfungsi.
Sejak versi 0.1.1, libdwarf dikirimkan dengan file pkg-config, yang seharusnya dapat dideteksi oleh CMake secara otomatis.
Jika libdwarf tidak dapat ditemukan secara otomatis oleh CMake, Anda mendapatkan pesan berikut:
-- Checking for module 'libdwarf'
-- No package 'libdwarf' found
Dalam hal ini Anda masih dapat memberikan informasi yang diperlukan secara manual dengan memberikan variasi opsi berikut:
-DDWARF_FOUND=1 -DDWARF_LIBRARIES=-ldwarf -DDWARF_LIBRARY_DIRS=/usr/lib -DDWARF_INCLUDE_DIRS=/usr/include/libdwarf