
แปลโมดูล 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.cw2c2 สามารถคอมไพล์โมดูลเป็นไฟล์ 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-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
หากต้องการเปิดใช้งานสารฆ่าเชื้อ ให้แสดงรายการไว้ในตัวแปร 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