Raspberry Pi などの AArch64 な Linux で Swift を動かす【Swift 5.3.2】
Raspberry Pi 3 や Raspberry Pi 4 など、ARM 64bit の CPU を搭載した端末と Linux で Swift を動かしてみます。
過去に Swift-Arm を使って Raspberry Pi (armv7l) で Swift を使えるようにした という記事はこちら 👉 Raspberry Pi で Swift を使えるようにする【Swift 5】 - Qiita
諸準備
今回は Raspberry Pi 4 Model B と Mac 上の Docker で動作を確認しました。どちらも OS は Ubuntu 20.04.1 LTS となります。各環境の詳細はこのページの下部に記載しました。
Swift.org - Getting Started の On Linux にあるように、必要な依存関係をインストールします。
$ sudo apt update
$ sudo apt full-upgrade -y
# Ubuntu 20.04 の場合
$ sudo apt install \
binutils \
git \
gnupg2 \
libc6-dev \
libcurl4 \
libedit2 \
libgcc-9-dev \
libpython2.7 \
libsqlite3-0 \
libstdc++-9-dev \
libxml2 \
libz3-dev \
pkg-config \
tzdata \
zlib1g-dev
途中で tzdata
がタイムゾーンを指定するための地域・都市について聞いてきます。
ビルド済みパッケージをダウンロードする
@futurejones (Twitter / GitHub) さんが公開してくださっている Jenkins から、OS に合わせたビルド済みのパッケージをダウンロードします。記事執筆時点での最新である Swift 5.3.2 のビルド済みパッケージがある OS は以下のとおりです。
この記事では Ubuntu 20.04 のみを確認しています。
$ mkdir swift
$ cd swift
# Ubuntu 20.04 の場合
$ wget http://futurejones.xyz:8080/view/Ubuntu%2020.04/job/swift-5.3.x-ubuntu-20.04/lastSuccessfulBuild/artifact/output/swiftlang-5.3.2-ubuntu-20.04-release-aarch64-4-2021-01-03.tar.gz
展開してパスを通す
ダウンロードしてきたビルド済みのパッケージを展開します。展開してできた usr/bin
の中に swift
がいるので、そこにパスを通しておきます。
$ tar xvf swiftlang-5.3.2-ubuntu-20.04-release-aarch64-4-2021-01-03.tar.gz
$ ls usr/bin/
clang lldb-argdumper sourcekit-lsp swift-demangle
clang++ lldb-server swift swift-package
clang-10 llvm-cov swift-api-checker.py swift-run
clang-cl llvm-profdata swift-api-digester swift-symbolgraph-extract
clang-cpp plutil swift-autolink-extract swift-test
clangd repl_swift swift-build swiftc
lldb sdk-module-lists swift-build-tool
$ export PATH=/path/to/swift/usr/bin:"${PATH}"
動作を確認する
無事にパスを通せれば swift
が使えます 🎉
$ swift --version
Swift version 5.3.2 (swift-5.3.2-RELEASE)
Target: aarch64-unknown-linux-gnu
適当に swift package
で遊んでみましょう。
$ mkdir swift-playground
$ cd swift-playground/
$ swift package init --type executable
Creating executable package: swift-playground
Creating Package.swift
Creating README.md
Creating .gitignore
Creating Sources/
Creating Sources/swift-playground/main.swift
Creating Tests/
Creating Tests/LinuxMain.swift
Creating Tests/swift-playgroundTests/
Creating Tests/swift-playgroundTests/swift_playgroundTests.swift
Creating Tests/swift-playgroundTests/XCTestManifests.swift
$ swift run
[4/4] Linking swift-playground
Hello, world!
なお、このままでは REPL を実行できませんが、この記事では取り扱いません。
環境
Raspberry Pi 4 Model B
- Ubuntu 20.04.1 LTS (GNU/Linux 5.4.0-1015-raspi aarch64)
- Broadcom BCM2711, Quad core Cortex-A72 (ARM v8) 64-bit SoC @ 1.5GHz
- 8GB LPDDR4-3200 SDRAM
$ uname -a
Linux ubuntu 5.4.0-1026-raspi #29-Ubuntu SMP PREEMPT Mon Dec 14 17:01:16 UTC 2020 aarch64 aarch64 aarch64 GNU/Linux
ただし、この Raspberry Pi 4 Model B は wimpysworld/desktopify によって Desktop 化している[1]。
Mac 上の Docker
- Ubuntu 20.04.1 LTS (GNU/Linux 4.19.104-linuxkit aarch64)
- CPUs: 6
- Memory: 12.00GB
- Swap: 2GB
$ uname -a
Linux 0aaad4e776a9 4.19.104-linuxkit #1 SMP PREEMPT Sat Feb 15 00:49:47 UTC 2020 aarch64 aarch64 aarch64 GNU/Linux
Docker のホスト Mac
- MacBook Pro (13-inch, M1, 2020)
- macOS Big Sur 11.1 (Build 20C69)
- 8コアCPU、8コアGPU、16コアNeural Engineを搭載したApple M1チップ
- 16GBユニファイドメモリ
Discussion