CGOを使ったgoプログラムを、ARM向けにクロスビルドしたくなった。
そのためには、ターゲット用のクロスコンパイラーをインストールする必要があるようだ。
環境
- MacBook Air (M1, 2020)
- macOS Big Sur 11.3.1
- Go 1.16.5
ターゲットの環境
- Armadillo-IoT A6
- アーキテクチャ: ARMv7
- ABI: armeabihf
既存の方法
これらの方法は、ARM公式のビルド済ツールチェインをインストールする方法。
しかし、ARM公式で用意してくれているのは、gcc-arm-none-eabiなツールチェインのみ。
別のページでは、EABI HFなツールチェインも配布してくれているが、Mac用は無い orz
RaspberryPi:Macでクロスコンパイル&デバッグ
こちらの記事のように、ソースからツールチェインをビルドする方法もあるが、めんどくさい。
基本的対処方針
Pre-built ARM/Linux C cross-compilers for MacOS
Mac OS用のビルト済ツールチェインを公開してくれている人がいたので、これを使う。
しかし、ビルドスクリプトを公開してくれていないので、中身がどうなっているのか大変怪しい。
crosstool-ngを使ってビルドしたらしいので、本来は、自前でビルドするのが正しい姿勢だろう。
インストール手順
arm-unknown-linux-gnueabihfのtarボールをダウンロードし、展開する。
% cd ~/Download
% wget https://github.com/thinkski/osx-arm-linux-toolchains/releases/download/8.3.0/arm-unknown-linux-gnueabihf.tar.xz
% sudo mkdir -p /opt/toolchain
% cd /opt/toolchain
% sudo tar xJvf ~/Download/arm-unknown-linux-gnueabihf.tar.xz
パスを通す
.zshrcに追記
export PATH="$PATH:/opt/toolchain/arm-unknown-linux-gnueabihf/bin"
シェルを再起動して、動作確認
% exec $SHELL
% arm-unknown-linux-gnueabihf-gcc --version
arm-unknown-linux-gnueabihf-gcc (crosstool-NG 1.24.0) 8.3.0
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.