Raspberry Pi などの AArch64 な Linux で Swift を動かす【Swift 5.3.2】

5 min read読了の目安(約4600字

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ユニファイドメモリ

参考

脚注
  1. 第624回 Raspberry Pi 4にデスクトップ版Ubuntuをインストール:Ubuntu Weekly Recipe|gihyo.jp … 技術評論社 を参考 ↩︎