# ARM(aarch64)版Ubuntuでコンパイラ実験の実験1に取り組む方法
## はじめに
これは何らかの事情でarm64版のUbuntu Linux例えば
- Apple Silicon搭載のMac上の仮想マシン上のUbuntu Linux (aarch64/arm64)
- Snapdragon X搭載のARM版Windows 11 PC上のWSL2のUbuntu Linux
- Raspberry Pi 3/4/5上の64ビット版Ubuntu Linux
で実験をおこないたいという人のための非公式の参考資料である。入学時に学科の指定した環境ではないので正式なサポートはおこなわないが,決して難しい作業ではない。ただし,
- `make asciinema`でダウンロードされるasciinemaはx86_64版なのでaarch64版をダウンロードする
- WSL2環境を前提にした設定(`open`や`pbcopy`/`pbpaste`等)は当然ながら動作しないので必要なら代替手段を用意する
など自力での対応は当然必要である(それができない人が指定外のMac等を敢えて選んで使っているとも思えないが).
:::info
:bulb: 以下の環境にインストールしたaarch64/arm64版のUbuntu 24.04 LTSで検証した。
- Mac mini (M1) + MacOS 15上の[multipass](https://canonical.com/multipass)
- Mac mini (M1) + MacOS 18上の[UTM](https://docs.getutm.app/) (Apple Virtualizationモード)
- Mac mini (M1) + MacOS 26上の[tart](https://tart.run/)
- Surface Pro 11 (Snapdragon X Elite) + Windows 11のWSL2
- Raspberry Pi 4
:::
## 作業の相違点と必要なパッケージ
アーキテクチャに依存する実験1のみ変更が必要になる。実験2,3はアーキテクチャに依らないので正規の実験手順のままでよい。
実験1の課題では`x86_64`のマシン上で`aarch64`/`arm64`向けのバイナリをクロスコンパイルしているが,`aarch64`/`arm64`マシンの上ではこれは単なるネイティブコンパイルになる。逆に`x86_64`向けのバイナリはクロスコンパイルによって生成する必要がある。そのためには,`x86_64`をターゲットとするクロスコンパイルのためのツール群をインストールする。具体的には
```
g++-x86-64-linux-gnu
```
をインストールする。
## 実行例
例として`example/fib.pc`の`x86_64`向きのバイナリをクロスコンパイルするには以下のようにする。
```
cat example/fib.pc \
| ./picoc \
| clang -Wno-override-module \
-x ir - -O2 -o fib.x86_64 -static \
-target x86_64-linux-gnu
```
生成されたバイナリ`fib.x86_64`をエミュレータで実行するには以下のようにする。
```
qemu-x86_64 fib.x86_64
```
以下はM1 Macのtartで起動したUbuntu仮想マシンでの実際の様子の画像:

:::warning
:heavy_exclamation_mark: 実験1のレポートには自分の用いた実験環境と実際の実験手順をきちんと明記すること。そうでないと間違いとみなされてレポートの得点が極端に低くなる可能性がある。
:::