Экосистема Swift активно развивается за пределами платформ Apple, и сегодня писать на нём под Windows вполне комфортно, используя Windows Subsystem for Linux (WSL2). Стоит учитывать, что для сборок под Linux/WSL доступен облегченный вариант Swift — без проприетарных Apple-фреймворков (таких как SwiftUI, UIKit, AppKit, CoreData, CoreML, ARKit, SpriteKit и других специфичных для iOS/macOS библиотек), однако для консольных утилит и бэкенда этого более чем достаточно. В этой заметке мы шаг за шагом разберём процесс подготовки окружения и сборки компилятора Swift из исходных кодов внутри WSL2 (на примере Ubuntu/Debian).
Обновляем список пакетов и саму систему:
sudo apt update && sudo apt upgrade -y
Устанавливаем необходимые зависимости для сборки:
sudo apt install -y \
git cmake ninja-build clang python3 python3-pip \
libicu-dev libxml2-dev libcurl4-openssl-dev \
libedit-dev libsqlite3-dev swig libncurses5-dev \
pkg-config tzdata rsync
Устанавливаем компилятор и компоновщик (LLVM и LLD):
sudo apt install -y llvm lld
Клонируем репозиторий Swift со всеми зависимостями:
git clone https://github.com/apple/swift.git
cd swift
utils/update-checkout --clone
Устанавливаем `swiftly` и готовый swift с swiftc
curl -O https://download.swift.org/swiftly/linux/swiftly-$(uname -m).tar.gz && \
tar zxf swiftly-$(uname -m).tar.gz && \
./swiftly init --quiet-shell-followup && \
. "${SWIFTLY_HOME_DIR:-$HOME/.local/share/swiftly}/env.sh" && \
hash -r
Запускаем сборку (это займёт продолжительное время):
utils/build-script \
--release-debuginfo \
--swift-darwin-supported-archs="x86_64" \
--llvm-targets-to-build="X86" \
--skip-build-benchmarks \
--skip-test-cmark \
--skip-test-swift \
--skip-ios \
--skip-tvos \
--skip-watchos \
--skip-build-libdispatch=false \
--skip-build-cmark=false \
--skip-build-foundation \
--skip-build-lldb \
--skip-build-xctest \
--skip-test-swift
После завершения сборки добавляем путь к компилятору в PATH (укажите ваш путь до папки сборки):
export PATH=/root/Sources/3rdparty/build/Ninja-RelWithDebInfoAssert/swift-linux-x86_64/bin/swiftc:$PATH
Проверяем, что установленная версия Swift работает:
swift --version
Создаём тестовый файл и запускаем его:
echo "print(\"Hello, World!\")" > hello.swift
swift hello.swift
Также можно скомпилировать бинарный файл и запустить его:
swiftc hello.swift
./hello
Источники
- Getting Started with Swift on Windows
- Swiftly (инструмент для управления версиями)
- Сборка Swift из исходных кодов