يترجم وحدات WebAssembly إلى C المحمولة. مستوحاة من wabt's 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
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 عددًا من سلاسل العمليات العاملة مثل مراكز وحدة المعالجة المركزية المتوفرة.
لتحديد عدد مؤشرات الترابط العاملة يدويًا، قم بتمرير الرقم باستخدام العلامة -t
.
على سبيل المثال، للتجميع باستخدام خيطين:
./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
تمكن مطهر السلوك غير المحددclang
المطهرات الخاصة بـ Clangthread
استخدام مطهر الخيطaddress
يمكّن مطهر العنوان على نظام Linux، حاول تثبيت حزمة باسم libdwarf-dev
على نظام التشغيل macOS، يمكنك استخدام Homebrew وتثبيت libdwarf
(وليس dwarf
!)
يستخدم w2c2 افتراضيًا حاليًا استخدام libdwarf API الخاص بـ >=v0.4.2. تم اختبار الإصدار 0.6.0 ليعمل بنجاح أيضًا.
إذا كنت تستخدم إصدارًا <0.4.2، فحاول تمرير -DDWARF_OLD=1
إلى CMake. من المعروف أن الإصدار 20200114 يعمل.
منذ الإصدار 0.1.1، يأتي libdwarf مزودًا بملف pkg-config، والذي يجب أن يتمكن CMake من اكتشافه تلقائيًا.
إذا تعذر العثور على libdwarf تلقائيًا بواسطة CMake، فستحصل على الرسالة التالية:
-- 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