Загрузите пакеты 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
Тарболы будут созданы в каталогах 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.*
в каталоге установки.
Мы предоставляем образ Docker, включающий WASI SDK, который можно использовать для создания проектов без отдельной установки SDK. В этот образ включены Autotools, CMake и Ninja, а стандартные переменные среды настроены на использование WASI SDK для сборки.
Например, эта команда может создать проект на основе make с образом Docker.
docker run -v `pwd`:/src -w /src ghcr.io/webassembly/wasi-sdk make
При создании проектов обратите внимание на заметные ограничения, приведенные ниже. Например, для многих проектов потребуется отключить поддержку потоков на этапе настройки перед сборкой с помощью WASI SDK.
Этот репозиторий пока не поддерживает исключения C++ . Код C++ на данный момент поддерживается только с исключениями -fno. Работа над поддержкой обработки исключений ведется на уровне языка, который будет поддерживать эти функции.
Подробнее о поддержке setjmp/longjmp см. в разделе Поддержка setjmp/longjmp в C.
Этот репозиторий экспериментально поддерживает потоки с --target=wasm32-wasi-threads
. Он использует примитивы потоков WebAssembly (атомарность, wait
/ notify
, разделяемая память) и васи-потоки для создания потоков. Примечание: это экспериментальный вариант — не ждите долгосрочной стабильности!
Этот репозиторий пока не поддерживает динамические библиотеки . Хотя предпринимаются некоторые попытки разработать систему для динамических библиотек в Wasm, она все еще находится в разработке и еще не пригодна для широкого использования.
Нет поддержки сети . Целью WASI является поддержка сети в будущем.