3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Github Actions で C++ アプリの AARCH64 Linux ビルドを行う

Last updated at Posted at 2019-11-19

背景

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 入れる手もあるかも?).
3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?