WSL2 で Swift を構築する (Linux)

Swift エコシステムは Apple プラットフォームの外で積極的に開発されており、現在では Windows Subsystem for Linux (WSL2) を使用して Windows 上で Swift エコシステムに書き込むのが非常に快適です。 Linux/WSL でのアセンブリの場合、独自の Apple フレームワーク (SwiftUI、UIKit、AppKit、CoreData、CoreML、ARKit、SpriteKit、その他の iOS/macOS 固有のライブラリなど) なしで、Swift の軽量バージョンが利用可能であることを考慮する価値がありますが、コンソール ユーティリティとバックエンドの場合はこれで十分です。この投稿では、環境を準備し、WSL2 内のソース コードから Swift コンパイラーを構築するプロセスを段階的に説明します (例として 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

ソース