⚒️
Apple Silicon (M1) Mac用GNU Arm Embedded Toolchainの作り方
はじめに
仕事の関係でGNU Arm Embedded Toolchainが必要なのだが、ArmからダウンロードできるものはIntel用なのが残念。Rosetta 2でも十分速いのだがやはりNativeがよいなということでビルドすることにした。
を参考にして少し手を加えている。
事前準備
- Xcode Command Line Tools
- Homebrew
をインストールしておく。
gccのビルドに必要なライブラリなどをHomebrewでインストールする。
brew install libmpc
ダウンロード
適当なGNUのミラーサイトから、
- binutils-2.35.tar.xz
- newlib-4.1.0.tar.gz
- gcc-10.2.0.tar.xz
をダウンロードする。
binutilsのビルドとインストール
prefixはお好みの場所にどうぞ。
tar zxf binutils-2.35.tar.xz
cd cd binutils-2.35/
./configure --prefix=/usr/local/arm-none-eabi-gcc --disable-werror --target=arm-none-eabi --enable-interwork --enable-multilib
make -j8
make install
gccのビルドとインストール
ソースコードの展開。
tar zxf newlib-4.1.0.tar.gz
tar zxf gcc-10.2.0.tar.xz
cd gcc-10.2.0/
ln -s ../newlib-4.1.0/newlib .
普通にビルドするとエラーになるのでこんなパッチを当てる。
--- gcc-10.2.0.orig/gcc/config/host-darwin.c 2020-07-23 15:35:17.000000000 +0900
+++ gcc-10.2.0/gcc/config/host-darwin.c 2021-01-16 09:53:40.000000000 +0900
@@ -22,6 +22,8 @@
#include "coretypes.h"
#include "diagnostic-core.h"
#include "config/host-darwin.h"
+#include "hosthooks.h"
+#include "hosthooks-def.h"
/* Yes, this is really supposed to work. */
static char pch_address_space[1024*1024*1024] __attribute__((aligned (4096)));
@@ -75,3 +77,5 @@
return ret;
}
+
+const struct host_hooks host_hooks = HOST_HOOKS_INITIALIZER;
ビルドの続き。
../configure --prefix=/usr/local/arm-none-eabi-gcc --target=arm-none-eabi --enable-interwork --enable-multilib --with-newlib --enable-langages="c,c++" --with-gmp=/opt/homebrew --with-mpfr=/opt/homebrew --with-mpc=/opt/homebrew --with-multilib-list=rmprofile,aprofile
make -j8
make install
PATHに/usr/local/arm-none-eabi-gcc
を追加すると使えるようになる。
さいごに
STM32用のNuttxをビルドして動いたのでたぶん大丈夫。
Discussion