قم بتنزيل حزم SDK هنا.
لا يحتوي هذا المستودع على كود مترجم أو مكتبة بحد ذاتها؛ يستخدم وحدات git الفرعية لإنشاء شجرة Clang وLLVM، بالإضافة إلى شجرة Wasi-libc.
يتم الاحتفاظ بجزء libc من SDK هذا في Wasi-libc.
يمكن تجميع Upstream Clang وLLVM (من الإصدار 9.0 فصاعدًا) لـ WASI خارج الصندوق، ويتم تضمين دعم WebAssembly فيها افتراضيًا. لذلك، كل ما يتم فعله هنا هو توفير إصدارات تم تكوينها لتعيين الهدف الافتراضي وsysroot للراحة.
يمكن للمرء أيضًا استخدام تثبيت Clang القياسي، وإنشاء sysroot من المصادر المذكورة أعلاه، والتجميع باستخدام --target=wasm32-wasi --sysroot=/path/to/sysroot
. في هذا السيناريو، سيحتاج المرء أيضًا إلى كائنات libclang_rt.builtins-wasm32.a
المتوفرة بشكل منفصل في تنزيلات الإصدار والتي يجب استخراجها إلى $CLANG_INSTALL_DIR/$CLANG_VERSION/lib/wasi/
.
يستخدم هذا المستودع وحدة git الفرعية، لاستنساخها تحتاج إلى استخدام الأمر أدناه:
git clone --recursive https://github.com/WebAssembly/wasi-sdk.git
تحتاج عملية بناء Wasm-sdk إلى بعض الحزم:
cmake
clang
ninja
python3
يرجى الرجوع إلى وثائق نظام التشغيل لديك لتثبيت هذه الحزم.
يستخدم بناء wasi-sdk
CMake وينقسم إلى نصفين. أولاً يمكنك بناء سلسلة الأدوات نفسها:
cmake -G Ninja -B build/toolchain -S . -DWASI_SDK_BUILD_TOOLCHAIN=ON -DCMAKE_INSTALL_PREFIX=build/install
cmake --build build/toolchain --target install
عندما تقوم بالتطوير محليًا، قد ترغب أيضًا في تمرير -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
للمساعدة في عمليات إعادة البناء. علامات CMake الأخرى المدعومة هي:
-DLLVM_CMAKE_FLAGS
- علامات إضافية لتمريرها إلى cmake
عند إنشاء LLVM/Clang.-DRUST_TARGET
- هدف Rust الثلاثي المحدد لبناء wasm-component-ld
له، وهو مفيد للترجمات المتقاطعة. يجب الآن أن يكون مترجم clang
موجودًا في build/install/bin/clang
ولكنه مجرد مترجم، ولم يتم إنشاء sysroot بعد. بعد ذلك، الخطوة الثانية من البناء هي إنشاء sysroot:
cmake -G Ninja -B build/sysroot -S .
-DCMAKE_INSTALL_PREFIX=build/install
-DCMAKE_TOOLCHAIN_FILE=build/install/share/cmake/wasi-sdk.cmake
-DCMAKE_C_COMPILER_WORKS=ON
-DCMAKE_CXX_COMPILER_WORKS=ON
cmake --build build/sysroot --target install
يجب أن تكون سلسلة الأدوات الكاملة موجودة الآن عند build/install
وتكون جاهزة للاستخدام في تجميع تعليمات WebAssembly البرمجية. علامات CMake المدعومة هي:
-DWASI_SDK_DEBUG_PREFIX_MAKE=OFF
- قم بتعطيل -fdebug-prefix-map
عند إنشاء كود C/C++ لاستخدام مسارات المضيف الكاملة بدلاً من ذلك.-DWASI_SDK_INCLUDE_TESTS=ON
- يستخدم لبناء الاختبارات.-DWASI_SDK_TEST_HOST_TOOLCHAIN=ON
- اختبر مكتبات Wasi-libc وsysroot الخاصة بسلسلة الأدوات المضيفة، ولا تقم بإنشاء أو استخدام مكتبات جديدة للاختبارات.-DWASI_SDK_TARGETS=..
- قائمة الأهداف التي سيتم إنشاؤها، بشكل افتراضي يتم تجميع جميع أهداف WASI.-DWASI_SDK_INSTALL_TO_CLANG_RESOURCE_DIR=ON
- قم بتثبيت برنامج التحويل البرمجي-rt على دليل موارد برنامج التحويل البرمجي. قد يكون ذلك مناسبًا إذا كنت تريد استخدام سلسلة الأدوات (على سبيل المثال ./build/install/bin/clang
) في مكانها. إذا كنت ترغب في إنشاء عناصر التوزيع، فيمكنك استخدام الهدف dist
كما يلي:
cmake --build build/toolchain --target dist
cmake --build build/sysroot --target dist
سيتم إنشاء Tarballs ضمن build/toolchain/dist
و build/sysroot/dist
. لاحظ أن هذه كرات قطرانية منفصلة لسلسلة الأدوات وsysroot. لإنشاء كرة قطران واحدة لمجموعة SDK بأكملها، ستحتاج أولاً إلى نسخ جميع كرات القطران إلى مجلد جديد ثم تشغيل البرنامج النصي ./ci/merge-artifacts.sh
:
mkdir dist-my-platform
cp build/toolchain/dist/ * build/sysroot/dist/ * dist-my-platform
./ci/merge-artifacts.sh
سيؤدي هذا إلى إنتاج dist/wasi-sdk-*.tar.gz
وهو نفس عناصر الإصدار لهذا المستودع.
أخيرًا، يمكنك أيضًا تجميع العديد من الخطوات المذكورة أعلاه، باستثناء merge-artifact.sh
باستخدام البرنامج النصي CI لتنفيذ كل من سلسلة الأدوات وبناء sysroot:
./ci/build.sh
يمكن العثور على الحزمة المضمنة في دليل build/dist
. لإصدار نسخة جديدة من الحزمة على GitHub، راجع RELEASING.md.
قد يبدو التثبيت النموذجي من ثنائيات الإصدار كما يلي:
WASI_OS=linux
WASI_ARCH=x86_64
WASI_VERSION=24
WASI_VERSION_FULL= ${WASI_VERSION} .0
wget https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk- ${WASI_VERSION} /wasi-sdk- ${WASI_VERSION_FULL} - ${WASI_ARCH} - ${WASI_OS} .tar.gz
tar xvf wasi-sdk- ${WASI_VERSION_FULL} - ${WASI_ARCH} - ${WASI_OS} .tar.gz
استخدم clang المثبت في دليل wasi-sdk
:
WASI_SDK_PATH= ` pwd ` /wasi-sdk- ${WASI_VERSION_FULL} - ${WASI_ARCH} - ${WASI_OS}
CC= " ${WASI_SDK_PATH} /bin/clang --sysroot= ${WASI_SDK_PATH} /share/wasi-sysroot "
$CC foo.c -o foo.wasm
ملاحظة: يحتوي ${WASI_SDK_PATH}/share/wasi-sysroot
على تضمينات/مكتبات/إلخ الخاصة بـWASI. خيار --sysroot=...
ليس ضروريًا إذا كان WASI_SDK_PATH
هو /opt/wasi-sdk
. لاستكشاف الأخطاء وإصلاحها، يمكن للمرء استبدال مسار --sysroot
ببناء يدوي لـ Wasi-libc.
استخدم ملف سلسلة الأدوات لإعداد منصة Wasi-sdk .
$ cmake -DCMAKE_TOOLCHAIN_FILE=${WASI_SDK_PATH}/share/cmake/wasi-sdk.cmake ...
أو منصة Wasi-sdk-thread
$ cmake -DCMAKE_TOOLCHAIN_FILE=${WASI_SDK_PATH}/share/cmake/wasi-sdk-pthread.cmake ...
يتعرف Autoconf 2.70 الآن على WASI.
للراحة عند إنشاء حزم لم يتم تحديثها بعد، يتم تثبيت ملفات config.sub وconfig.guess المحدثة على share/misc/config.*
في دليل التثبيت.
نحن نقدم صورة عامل إرساء تتضمن WASI SDK والتي يمكن استخدامها لبناء المشاريع دون تثبيت منفصل لـ SDK. تم تضمين Autotools وCMake وNinja في هذه الصورة، وتم تعيين متغيرات البيئة القياسية لاستخدام WASI SDK للبناء.
على سبيل المثال، يمكن لهذا الأمر إنشاء مشروع قائم على الإنشاء باستخدام صورة Docker.
docker run -v `pwd`:/src -w /src ghcr.io/webassembly/wasi-sdk make
لاحظ القيود الملحوظة أدناه عند إنشاء المشاريع، على سبيل المثال، ستحتاج العديد من المشاريع إلى تعطيل دعم سلاسل الرسائل في خطوة التكوين قبل البناء باستخدام WASI SDK.
هذا المستودع لا يدعم حتى الآن استثناءات C++ . كود C++ مدعوم فقط مع استثناءات -fno-في الوقت الحالي. يجري العمل حاليًا على دعم معالجة الاستثناءات على مستوى اللغة والذي سيدعم الميزات.
راجع دعم C setjmp/longjmp حول دعم setjmp/longjmp.
يدعم هذا المستودع بشكل تجريبي سلاسل المحادثات ذات --target=wasm32-wasi-threads
. يستخدم خيوط WebAssembly الأولية (الذرات، wait
/ notify
، الذاكرة المشتركة) وخيوط Wasi لإنتاج سلاسل الرسائل. ملحوظة: هذا تجريبي – لا تتوقع استقرارًا على المدى الطويل!
هذا المستودع لا يدعم المكتبات الديناميكية بعد. في حين أن هناك بعض الجهود لتصميم نظام للمكتبات الديناميكية في وسم، إلا أنه لا يزال قيد التطوير وغير قابل للاستخدام بشكل عام بعد.
لا يوجد دعم للشبكات . إن هدف WASI هو دعم التواصل في المستقبل.