背景
aarch64 対応な C++ プロジェクトを Github Actions(CI)で使いたい(CI ビルドしたい).
Github Actions 自体は, 現状 x86-64 Linux のみの対応のようです.
native(エミュレータ) の方法
run-on-arch-action を使います.
中身としては, qemu で aarch64 環境を動かしています.
最近は qemu も NEON 対応してきたので, Arm SVE(Scalable Vector Extension) 命令など, 特殊な命令セットを使わないのであれば aarch64 バイナリでユニットテストコードを動かすなども問題なくできるかと思われます.
qemu で動かす Ubuntu 環境はちょっと違いますのでご注意ください. gcc など開発系は入っていませんし, sudo などが使えません. apt でも build-essential
package は用意されれていません.
cross-compile の方法
apt で aarch64 gcc クロスコンパイラを入れるなどして, クロスコンパイラでやる手もあります.
サンプル
embree-aarch64 https://github.com/lighttransport/embree-aarch64 を Github actions 対応しました.
https://github.com/lighttransport/embree-aarch64/actions
https://github.com/lighttransport/embree-aarch64/blob/master/.github/workflows/ccpp.yml
Embree のビルドが時間かかるので, cross-compile でも 1 時間, qemu aarch64 だと 3 時間くらいかかります.
name: BuildCI
on: [push, pull_request]
jobs:
build-native-aarch64:
runs-on: ubuntu-18.04
name: Build on native aarch64
steps:
- uses: actions/checkout@v1
- uses: uraimo/run-on-arch-action@v1.0.5
id: aarch64-build-on-qemu-aarch64
with:
architecture: aarch64
distribution: ubuntu18.04
run: |
apt-get update
apt-get install -y cmake gcc g++
./scripts/bootstrap-aarch64-linux.sh
cd build-aarch64
make VERBOSE=1
build-cross-aarch64:
runs-on: ubuntu-18.04
name: Build on cross aarch64
steps:
- name: Checkout
uses: actions/checkout@v1
- name: CmakeAndBuild
run: |
sudo apt-get update
sudo apt-get install -y build-essential
sudo apt-get install -y gcc-8-aarch64-linux-gnu g++-8-aarch64-linux-gnu
./scripts/bootstrap-aarch64-gcc-cross-linux.sh
cd build-aarch64-cross
make VERBOSE=1
その他
YAML, インデント間違えたりなどすると動かないので, ビルド構成を記述するには向かないきがしますね.
(インデントチェックしてくれる Github 上での yaml エディタは初回 workflow 作成時しか使えないっぽいようで辛い)
TODO
- Test run を qemu aarch64 で行えるようにする.
- 自前 aarch64 環境を用意し, self-hosting でビルドできるようにする(A72 コアな ROCKPro64 発注中. 最近の 6~8 GB メモリ搭載高性能スマホに Termux 入れる手もあるかも?).