Unduh paket SDK di sini.
Repositori ini tidak berisi kompiler atau kode perpustakaan itu sendiri; ia menggunakan submodul git untuk menarik pohon Clang dan LLVM hulu, serta pohon wasi-libc.
Bagian libc dari SDK ini dipertahankan di wasi-libc.
Dentang hulu dan LLVM (mulai 9.0 dan seterusnya) dapat dikompilasi untuk WASI, dan dukungan WebAssembly disertakan di dalamnya secara default. Jadi, semua yang dilakukan di sini adalah menyediakan build yang dikonfigurasi untuk menetapkan target default dan sysroot demi kenyamanan.
Seseorang juga dapat menggunakan instalasi Clang standar, membangun sysroot dari sumber yang disebutkan di atas, dan mengkompilasi dengan --target=wasm32-wasi --sysroot=/path/to/sysroot
. Dalam skenario ini, seseorang juga memerlukan objek libclang_rt.builtins-wasm32.a
yang tersedia secara terpisah dalam unduhan rilis yang harus diekstraksi ke dalam $CLANG_INSTALL_DIR/$CLANG_VERSION/lib/wasi/
.
Repositori ini menggunakan submodul git, untuk mengkloningnya Anda perlu menggunakan perintah di bawah ini:
git clone --recursive https://github.com/WebAssembly/wasi-sdk.git
Proses pembangunan Wasm-sdk memerlukan beberapa paket:
cmake
clang
ninja
python3
Silakan merujuk ke dokumentasi OS Anda untuk menginstal paket-paket tersebut.
Membangun wasi-sdk
menggunakan CMake dan dipecah menjadi dua bagian. Pertama, Anda dapat membuat rantai alat itu sendiri:
cmake -G Ninja -B build/toolchain -S . -DWASI_SDK_BUILD_TOOLCHAIN=ON -DCMAKE_INSTALL_PREFIX=build/install
cmake --build build/toolchain --target install
Saat Anda mengembangkan secara lokal, Anda mungkin juga ingin meneruskan -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
untuk membantu pembangunan kembali. Tanda CMake lain yang didukung adalah:
-DLLVM_CMAKE_FLAGS
- tanda tambahan untuk diteruskan ke cmake
saat membuat LLVM/Clang.-DRUST_TARGET
- target Rust rangkap tiga yang spesifik untuk membangun wasm-component-ld
, berguna untuk kompilasi silang. Kompiler clang
sekarang seharusnya berada di build/install/bin/clang
tetapi ini hanya sebuah kompiler, sysroot belum dibuat. Selanjutnya langkah build yang kedua adalah membangun 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
Toolchain lengkap sekarang seharusnya ada saat build/install
dan siap digunakan dalam mengkompilasi kode WebAssembly. Tanda CMake yang didukung adalah:
-DWASI_SDK_DEBUG_PREFIX_MAKE=OFF
- nonaktifkan -fdebug-prefix-map
saat membuat kode C/C++ untuk menggunakan jalur host lengkap.-DWASI_SDK_INCLUDE_TESTS=ON
- digunakan untuk pengujian bangunan.-DWASI_SDK_TEST_HOST_TOOLCHAIN=ON
- uji pustaka wasi-libc dan sysroot toolchain host, jangan membuat atau menggunakan pustaka baru untuk pengujian.-DWASI_SDK_TARGETS=..
- daftar target yang akan dibangun, secara default semua target WASI dikompilasi.-DWASI_SDK_INSTALL_TO_CLANG_RESOURCE_DIR=ON
- instal compiler-rt ke direktori sumber daya kompiler. mungkin nyaman jika Anda ingin menggunakan rantai alat (mis. ./build/install/bin/clang
) di tempatnya. Jika Anda ingin membuat artefak distribusi, Anda dapat menggunakan target dist
seperti:
cmake --build build/toolchain --target dist
cmake --build build/sysroot --target dist
Tarball akan dibuat di bawah build/toolchain/dist
dan build/sysroot/dist
. Perhatikan bahwa ini adalah tarball terpisah untuk toolchain dan sysroot. Untuk membuat satu tarball untuk keseluruhan SDK, pertama-tama Anda perlu menyalin semua tarball ke dalam folder baru, lalu menjalankan skrip ./ci/merge-artifacts.sh
:
mkdir dist-my-platform
cp build/toolchain/dist/ * build/sysroot/dist/ * dist-my-platform
./ci/merge-artifacts.sh
Ini akan menghasilkan dist/wasi-sdk-*.tar.gz
yang sama dengan artefak rilis untuk repositori ini.
Terakhir, Anda juga dapat menggabungkan banyak langkah di atas, kecuali merge-artifact.sh
dengan menggunakan skrip CI untuk menjalankan build toolchain dan sysroot:
./ci/build.sh
Paket yang dibangun dapat ditemukan di direktori build/dist
. Untuk merilis versi baru paket di GitHub, lihat RELEASING.md.
Instalasi tipikal dari binari rilis mungkin terlihat seperti berikut:
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
Gunakan dentang yang diinstal di direktori 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
Catatan: ${WASI_SDK_PATH}/share/wasi-sysroot
berisi penyertaan/perpustakaan/dll khusus WASI. Opsi --sysroot=...
tidak diperlukan jika WASI_SDK_PATH
adalah /opt/wasi-sdk
. Untuk pemecahan masalah, seseorang dapat mengganti jalur --sysroot
dengan versi manual dari wasi-libc.
Gunakan file toolchain untuk mengatur platform wasi-sdk .
$ cmake -DCMAKE_TOOLCHAIN_FILE=${WASI_SDK_PATH}/share/cmake/wasi-sdk.cmake ...
atau platform benang wasi-sdk
$ cmake -DCMAKE_TOOLCHAIN_FILE=${WASI_SDK_PATH}/share/cmake/wasi-sdk-pthread.cmake ...
Autoconf 2.70 sekarang mengenali WASI.
Untuk kenyamanan saat membuat paket yang belum diperbarui, file config.sub dan config.guess yang diperbarui diinstal di share/misc/config.*
di direktori instalasi.
Kami menyediakan gambar buruh pelabuhan termasuk WASI SDK yang dapat digunakan untuk membangun proyek tanpa instalasi SDK secara terpisah. Autotools, CMake, dan Ninja disertakan dalam gambar ini, dan variabel lingkungan standar disetel untuk menggunakan WASI SDK untuk pembuatannya.
Misalnya, perintah ini dapat membangun proyek berbasis make dengan image Docker.
docker run -v `pwd`:/src -w /src ghcr.io/webassembly/wasi-sdk make
Perhatikan batasan penting di bawah ini saat membuat proyek, misalnya banyak proyek memerlukan dukungan thread yang dinonaktifkan pada langkah konfigurasi sebelum membangun dengan WASI SDK.
Repositori ini belum mendukung pengecualian C++ . Kode C++ hanya didukung dengan -fno-Exception untuk saat ini. Pekerjaan dukungan untuk penanganan pengecualian sedang dilakukan pada tingkat bahasa yang akan mendukung fitur-fitur tersebut.
Lihat dukungan C setjmp/longjmp tentang dukungan setjmp/longjmp.
Repositori ini secara eksperimental mendukung thread dengan --target=wasm32-wasi-threads
. Ia menggunakan benang primitif WebAssembly (atom, wait
/ notify
, memori bersama) dan benang wasi untuk benang pemijahan. Catatan: ini bersifat eksperimental — jangan mengharapkan stabilitas jangka panjang!
Repositori ini belum mendukung perpustakaan dinamis . Meskipun ada beberapa upaya untuk merancang sistem perpustakaan dinamis di wasm, sistem ini masih dalam pengembangan dan belum dapat digunakan secara umum.
Tidak ada dukungan untuk jaringan . Tujuan WASI adalah mendukung jaringan di masa depan.