はじめに
ARM用のJITコンパイラxbyak_aarch64を動かしてみる。ここでは、Google ColabでQEMUを使って動かす。なお、QEMUは、AARCH64の命令を(Google Colabのバイナリの前提である)x86_64の命令に変換するために使っている。
まず、以下のパッケージが必要である。
!apt update
!apt install binutils-aarch64-linux-gnu cpp-8-aarch64-linux-gnu cpp-aarch64-linux-gnu
!apt install g++-8-aarch64-linux-gnu g++-aarch64-linux-gnu gcc-8-aarch64-linux-gnu gcc-8-aarch64-linux-gnu-base:amd64 gcc-aarch64-linux-gnu pkg-config-aarch64-linux-gnu
!apt install qemu qemu-block-extra:amd64 qemu-system-arm qemu-system-common qemu-user qemu-user-static qemu-utils qemu-system-aarch64
次に、環境変数を設定ののち、ソースコードのダウンロード、そしてサンプルコードのコンパイルおよび実行を行う。
- 環境変数設定
- LD_PRELOADは、デフォルトだとtcmallocをロードするがうまく動かないので削除している。
- xbyak_aarch64のダウンロード
- コンパイル
- 実行 ($3+4$の足し算をしている)
%env LD_LIBRARY_PATH=/usr/aarch64-linux-gnu/lib
%env PATH=$PATH:/usr/aarch64-linux-gnu/lib:/usr/bin:/bin
%env LD_PRELOAD=
!ln -s /usr/aarch64-linux-gnu/lib/ld-linux-aarch64.so.1 /lib/ld-linux-aarch64.so.1
!git clone http://github.com/fujitsu/xbyak_aarch64
!cd xbyak_aarch64/sample;aarch64-linux-gnu-g++ add.cpp
!/usr/bin/qemu-aarch64 xbyak_aarch64/sample/a.out
注意事項
Qemu 3.1は、2018年12月にリリースされている。このため、Qemu 2.1が配布されているUbuntu 18.04では、すべての命令が動くとは限らない(コアダンプする場合がある)。よって、Qemu 3.1にマニュアルインストールするか、Ubuntu 19.04(Disco)以降に乗り換える必要がある。