แปลโมดูล WebAssembly เป็น C แบบพกพา แรงบันดาลใจจาก wasm2c ของ wabt
การทำงานเพื่อมุ่งสู่ 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.c
w2c2 สามารถคอมไพล์โมดูลเป็นไฟล์ C แยกกันได้ แนะนำให้ใช้เมื่อรวบรวมโมดูลขนาดใหญ่และบนโฮสต์ที่มีทรัพยากรจำกัด
ตัวอย่างเช่น ในการคอมไพล์ module.wasm
(และ module.h
) ออกเป็นหลายไฟล์โดยแต่ละไฟล์มี 100 ฟังก์ชัน:
./w2c2 -f 100 module.wasm module.c
เมื่อ w2c2 ถูกสร้างขึ้นด้วยการรองรับเธรด จะสามารถคอมไพล์โมดูลแบบขนานได้ ตามค่าเริ่มต้น w2c2 จะสร้างเธรดผู้ปฏิบัติงานมากเท่ากับคอร์ CPU ที่พร้อมใช้งาน
หากต้องการระบุจำนวนเธรดของผู้ปฏิบัติงานด้วยตนเอง ให้ส่งหมายเลขโดยใช้แฟล็ก -t
ตัวอย่างเช่น หากต้องการคอมไพล์โดยใช้ 2 เธรด:
./w2c2 -t 2 module.wasm module.c
เครื่องหมายหลัก:
cd examples/coremark
make
./coremark
ต้องใช้ Python 3 และ wabt (สำหรับ 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
(จากข้อเสนอเธรด) หากต้องการสร้างรุ่นดีบัก ให้ส่ง BUILD=debug
เพื่อ make
หากต้องการเปิดใช้งานสารฆ่าเชื้อ ให้แสดงรายการไว้ในตัวแปร SANITIZERS
ที่ส่งไปยัง make
เช่น make BUILD=debug SANITIZERS="base clang address thread"
base
เปิดใช้งาน Undefaviour Behavior Sanitizerclang
เปิดใช้งานน้ำยาฆ่าเชื้อเฉพาะของ Clangthread
เปิดใช้งาน Thread Sanitizeraddress
เปิดใช้งาน Address Sanitizer บน Linux ให้ลองติดตั้งแพ็คเกจชื่อเช่น libdwarf-dev
บน macOS คุณสามารถใช้ Homebrew และติดตั้ง libdwarf
(ไม่ใช่ dwarf
!)
ขณะนี้ w2c2 มีค่าเริ่มต้นให้ใช้ libdwarf API ที่ >=v0.4.2 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