ここから SDK パッケージをダウンロードします。
このリポジトリには、コンパイラやライブラリ コード自体は含まれていません。 git サブモジュールを使用して、上流の Clang および LLVM ツリー、さらに wasi-libc ツリーを取り込みます。
この SDK の libc 部分は wasi-libc で維持されます。
アップストリームの 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
これらのパッケージをインストールするには、OS のドキュメントを参照してください。
wasi-sdk
ビルドは CMake を使用し、2 つに分割されます。まず、ツールチェーン自体を構築できます。
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
- LLVM/Clang のビルド時にcmake
に渡す追加のフラグ。-DRUST_TARGET
- wasm-component-ld
をビルドするための特定の Rust ターゲット トリプル。クロスコンパイルに役立ちます。 clang
コンパイラはbuild/install/bin/clang
に配置されるはずですが、これは単なるコンパイラであり、sysroot はまだ構築されていません。次に、ビルドの 2 番目のステップとして、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
- C/C++ コードをビルドするときに-fdebug-prefix-map
無効にして、代わりに完全なホスト パスを使用します。-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
- Compiler-rt をコンパイラのリソース ディレクトリにインストールします。ツールチェーン (例: ./build/install/bin/clang
) をインプレースで使用したい場合に便利です。配布アーティファクトを構築したい場合は、次のようにdist
ターゲットを使用できます。
cmake --build build/toolchain --target dist
cmake --build build/sysroot --target dist
Tarball はbuild/toolchain/dist
およびbuild/sysroot/dist
の下に作成されます。これらはツールチェーンと sysroot 用に別個の tarball であることに注意してください。 SDK 全体に対して 1 つの tarball を作成するには、まずすべての tarball を新しいフォルダーにコピーしてから、 ./ci/merge-artifacts.sh
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
生成されます。
最後に、CI スクリプトを使用してツールチェーンと sysroot ビルドの両方を実行することで、 merge-artifact.sh
除いた上記の手順の多くをさらにバンドルできます。
./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
wasi-sdk
ディレクトリにインストールされている Clang を使用します。
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 固有の include/libraries などが含まれています。 WASI_SDK_PATH
が/opt/wasi-sdk
の場合、 --sysroot=...
オプションは必要ありません。トラブルシューティングの場合、 --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.*
にインストールされます。
SDK を別途インストールせずにプロジェクトの構築に使用できる WASI SDK を含む Docker イメージを提供します。このイメージには Autotools、CMake、Ninja が含まれており、ビルドに WASI SDK を使用するように標準環境変数が設定されています。
たとえば、このコマンドは Docker イメージを使用して make ベースのプロジェクトをビルドできます。
docker run -v `pwd`:/src -w /src ghcr.io/webassembly/wasi-sdk make
プロジェクトをビルドするときは、以下の注目すべき制限事項に注意してください。たとえば、多くのプロジェクトでは、WASI SDK を使用してビルドする前の構成ステップでスレッド サポートを無効にする必要があります。
このリポジトリはまだC++ 例外をサポートしていません。現時点では、C++ コードは -fno-Exceptions を使用した場合のみサポートされています。例外処理のサポートに関する作業は、機能をサポートする言語レベルで進行中です。
setjmp/longjmp のサポートについては、「C setjmp/longjmp サポート」を参照してください。
このリポジトリは--target=wasm32-wasi-threads
を使用したスレッドを実験的にサポートしています。 WebAssembly のスレッド プリミティブ (アトミックス、 wait
/ notify
、共有メモリ) とスレッドの生成に wasi スレッドを使用します。注: これは実験的なものです。長期的な安定性は期待できません。
このリポジトリはまだ動的ライブラリをサポートしていません。 wasm で動的ライブラリ用のシステムを設計する取り組みはいくつかありますが、まだ開発中であり、まだ一般的には使用できません。
ネットワークはサポートされていません。ただし、将来的にはネットワークをサポートすることが WASI の目標です。