Descargue los paquetes SDK aquí.
Este repositorio no contiene ningún código de compilador o biblioteca en sí; Utiliza submódulos de git para incorporar el árbol Clang y LLVM ascendente, así como el árbol wasi-libc.
La parte libc de este SDK se mantiene en wasi-libc.
Upstream Clang y LLVM (desde 9.0 en adelante) pueden compilar para WASI de forma inmediata, y la compatibilidad con WebAssembly está incluida en ellos de forma predeterminada. Entonces, todo lo que se hace aquí es proporcionar compilaciones configuradas para establecer el destino predeterminado y sysroot para mayor comodidad.
También se podría usar una instalación estándar de Clang, crear un sysroot a partir de las fuentes mencionadas anteriormente y compilar con --target=wasm32-wasi --sysroot=/path/to/sysroot
. En este escenario, también se necesitarían los objetos libclang_rt.builtins-wasm32.a
disponibles por separado en las descargas de la versión, que deben extraerse en $CLANG_INSTALL_DIR/$CLANG_VERSION/lib/wasi/
.
Este repositorio usa el submódulo git, para clonarlo necesita usar el siguiente comando:
git clone --recursive https://github.com/WebAssembly/wasi-sdk.git
El proceso de compilación de Wasm-sdk necesita algunos paquetes:
cmake
clang
ninja
python3
Consulte la documentación de su sistema operativo para instalar esos paquetes.
La construcción wasi-sdk
usa CMake y se divide en dos mitades. Primero puedes construir la cadena de herramientas en sí:
cmake -G Ninja -B build/toolchain -S . -DWASI_SDK_BUILD_TOOLCHAIN=ON -DCMAKE_INSTALL_PREFIX=build/install
cmake --build build/toolchain --target install
Cuando esté desarrollando localmente, es posible que también desee pasar -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
para ayudar con las reconstrucciones. Otros indicadores de CMake compatibles son:
-DLLVM_CMAKE_FLAGS
: indicadores adicionales para pasar a cmake
al compilar LLVM/Clang.-DRUST_TARGET
: el triple objetivo específico de Rust para construir wasm-component-ld
, útil para compilaciones cruzadas. El compilador clang
ahora debería estar ubicado en build/install/bin/clang
pero es solo un compilador, el sysroot aún no está compilado. A continuación, el segundo paso de la compilación es compilar el 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
Ahora debería haber una cadena de herramientas completa en build/install
y lista para usar en la compilación del código WebAssembly. Los indicadores de CMake admitidos son:
-DWASI_SDK_DEBUG_PREFIX_MAKE=OFF
: deshabilite -fdebug-prefix-map
al compilar código C/C++ para utilizar rutas de host completas.-DWASI_SDK_INCLUDE_TESTS=ON
: se utiliza para pruebas de construcción.-DWASI_SDK_TEST_HOST_TOOLCHAIN=ON
: prueba las bibliotecas wasi-libc y sysroot de la cadena de herramientas del host, no cree ni utilice bibliotecas nuevas para las pruebas.-DWASI_SDK_TARGETS=..
- una lista de objetivos para construir; de forma predeterminada, se compilan todos los objetivos WASI.-DWASI_SDK_INSTALL_TO_CLANG_RESOURCE_DIR=ON
: instala el compilador-rt en el directorio de recursos del compilador. Puede ser conveniente si desea utilizar la cadena de herramientas (por ejemplo, ./build/install/bin/clang
) en el lugar. Si desea crear artefactos de distribución, puede utilizar el objetivo dist
de esta manera:
cmake --build build/toolchain --target dist
cmake --build build/sysroot --target dist
Los archivos tar se crearán en build/toolchain/dist
y build/sysroot/dist
. Tenga en cuenta que estos son archivos tar separados para la cadena de herramientas y sysroot. Para crear un único tarball para todo el SDK, primero deberá copiar todos los tarballs en una nueva carpeta y luego ejecutar el script ./ci/merge-artifacts.sh
:
mkdir dist-my-platform
cp build/toolchain/dist/ * build/sysroot/dist/ * dist-my-platform
./ci/merge-artifacts.sh
Esto producirá dist/wasi-sdk-*.tar.gz
que es el mismo que los artefactos de lanzamiento para este repositorio.
Finalmente, también puede agrupar muchos de los pasos anteriores, menos merge-artifact.sh
utilizando el script CI para realizar la compilación de la cadena de herramientas y sysroot:
./ci/build.sh
El paquete compilado se puede encontrar en el directorio build/dist
. Para publicar una nueva versión del paquete en GitHub, consulte RELEASING.md.
Una instalación típica desde los binarios de la versión podría verse como la siguiente:
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
Utilice el clang instalado en el directorio 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
Nota: ${WASI_SDK_PATH}/share/wasi-sysroot
contiene las inclusiones/bibliotecas/etc. específicas de WASI. La opción --sysroot=...
no es necesaria si WASI_SDK_PATH
es /opt/wasi-sdk
. Para solucionar problemas, se puede reemplazar la ruta --sysroot
con una compilación manual de wasi-libc.
Utilice un archivo de cadena de herramientas para configurar la plataforma wasi-sdk .
$ cmake -DCMAKE_TOOLCHAIN_FILE=${WASI_SDK_PATH}/share/cmake/wasi-sdk.cmake ...
o la plataforma wasi-sdk-thread
$ cmake -DCMAKE_TOOLCHAIN_FILE=${WASI_SDK_PATH}/share/cmake/wasi-sdk-pthread.cmake ...
Autoconf 2.70 ahora reconoce WASI.
Para mayor comodidad al crear paquetes que aún no están actualizados, los archivos config.sub y config.guess actualizados se instalan en share/misc/config.*
en el directorio de instalación.
Proporcionamos una imagen de Docker que incluye WASI SDK que se puede usar para crear proyectos sin una instalación separada del SDK. En esta imagen se incluyen Autotools, CMake y Ninja, y las variables de entorno estándar están configuradas para usar WASI SDK para la compilación.
Por ejemplo, este comando puede crear un proyecto basado en Make con la imagen de Docker.
docker run -v `pwd`:/src -w /src ghcr.io/webassembly/wasi-sdk make
Tome nota de las limitaciones notables a continuación al crear proyectos; por ejemplo, muchos proyectos necesitarán que el soporte de subprocesos esté deshabilitado en un paso de configuración antes de compilarlo con WASI SDK.
Este repositorio aún no admite excepciones de C++ . El código C++ solo se admite con excepciones -fno por ahora. Se está trabajando en el soporte para el manejo de excepciones a nivel de idioma que admitirá las funciones.
Consulte el soporte de C setjmp/longjmp sobre el soporte de setjmp/longjmp.
Este repositorio admite experimentalmente subprocesos con --target=wasm32-wasi-threads
. Utiliza las primitivas de subprocesos de WebAssembly (atómicos, wait
/ notify
, memoria compartida) y subprocesos wasi para generar subprocesos. Nota: esto es experimental; ¡no espere estabilidad a largo plazo!
Este repositorio aún no admite bibliotecas dinámicas . Si bien se están realizando algunos esfuerzos para diseñar un sistema para bibliotecas dinámicas en wasm, todavía está en desarrollo y aún no es utilizable en general.
No hay soporte para redes . Sin embargo, el objetivo de WASI es apoyar la creación de redes en el futuro.