Swift in WSL2 (Linux) erstellen

Das Swift-Ökosystem entwickelt sich aktiv außerhalb der Apple-Plattformen, und heute ist es recht komfortabel, darin unter Windows mit dem Windows-Subsystem für Linux (WSL2) zu schreiben. Es ist zu bedenken, dass für Assemblys unter Linux/WSL eine schlanke Version von Swift verfügbar ist – ohne proprietäre Apple-Frameworks (wie SwiftUI, UIKit, AppKit, CoreData, CoreML, ARKit, SpriteKit und andere iOS/macOS-spezifische Bibliotheken), aber für Konsolen-Dienstprogramme und das Backend ist dies mehr als ausreichend. In diesem Beitrag werden wir den Prozess der Vorbereitung der Umgebung und der Erstellung des Swift-Compilers aus dem Quellcode in WSL2 Schritt für Schritt durchgehen (am Beispiel von Ubuntu/Debian).

Wir aktualisieren die Liste der Pakete und das System selbst:

sudo apt update && sudo apt upgrade -y

Installieren Sie die erforderlichen Abhängigkeiten für den Build:

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

Installieren Sie den Compiler und Linker (LLVM und LLD):

sudo apt install -y llvm lld

Klonen Sie das Swift-Repository mit allen Abhängigkeiten:

git clone https://github.com/apple/swift.git
cd swift
utils/update-checkout --clone

Installieren Sie „swiftly“ und fertiges Swift mit 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

Beginnen wir mit dem Build (dies wird lange dauern):

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

Nachdem der Build abgeschlossen ist, fügen Sie den Pfad zum Compiler zu PATH hinzu (geben Sie Ihren Pfad zum Build-Ordner an):

export PATH=/root/Sources/3rdparty/build/Ninja-RelWithDebInfoAssert/swift-linux-x86_64/bin/swiftc:$PATH

Wir überprüfen, ob die installierte Version von Swift funktioniert:

swift --version

Erstellen Sie eine Testdatei und führen Sie sie aus:

echo "print(\"Hello, World!\")" > hello.swift
swift hello.swift

Sie können die Binärdatei auch kompilieren und ausführen:

swiftc hello.swift
./hello

Quellen