在 WSL2 中构建 Swift (Linux)

Swift 生态系统正在 Apple 平台之外积极开发,如今在 Windows 下使用 Windows Subsystem for Linux (WSL2) 进行编写已经相当方便。值得考虑的是,对于 Linux/WSL 下的程序集,可以使用 Swift 的轻量级版本 – 无需专有的 Apple 框架(例如 SwiftUI、UIKit、AppKit、CoreData、CoreML、ARKit、SpriteKit 和其他 iOS/macOS 特定的库),但对于控制台实用程序和后端来说,这已经足够了。在这篇文章中,我们将逐步介绍准备环境并从 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

用 swiftc 安装 `swiftly` 和现成的 swift

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

来源