O ecossistema Swift está se desenvolvendo ativamente fora das plataformas Apple e hoje é bastante confortável escrever nele no Windows usando o Windows Subsystem for Linux (WSL2). Vale a pena considerar que para assemblies no Linux/WSL, uma versão leve do Swift está disponível – sem estruturas proprietárias da Apple (como SwiftUI, UIKit, AppKit, CoreData, CoreML, ARKit, SpriteKit e outras bibliotecas específicas do iOS/macOS), mas para utilitários de console e backend isso é mais que suficiente. Neste post, vamos percorrer passo a passo o processo de preparação do ambiente e construção do compilador Swift a partir do código-fonte dentro do WSL2 (usando Ubuntu/Debian como exemplo).
Atualizamos a lista de pacotes e o próprio sistema:
sudo apt update && sudo apt upgrade -y
Instale as dependências necessárias para a compilação:
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
Instale o compilador e vinculador (LLVM e LLD):
sudo apt install -y llvm lld
Clone o repositório Swift com todas as dependências:
git clone https://github.com/apple/swift.git
cd swift
utils/update-checkout --clone
Instale o `swiftly` e o swift pronto com 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
Vamos começar a construção (isso levará muito tempo):
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
Após a conclusão da compilação, adicione o caminho do compilador ao PATH (especifique o caminho para a pasta de compilação):
export PATH=/root/Sources/3rdparty/build/Ninja-RelWithDebInfoAssert/swift-linux-x86_64/bin/swiftc:$PATH
Verificamos se a versão instalada do Swift está funcionando:
swift --version
Crie um arquivo de teste e execute-o:
echo "print(\"Hello, World!\")" > hello.swift
swift hello.swift
Você também pode compilar o binário e executá-lo:
swiftc hello.swift
./hello
Fontes
- Introdução ao Swift no Windows
- Swiftly (ferramenta de controle de versão)
- Construindo Swift a partir do código-fonte