
يترجم وحدات 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.cw2c2 قادر على تجميع الوحدة النمطية في ملفات 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-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 تمكن مطهر السلوك غير المحدد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