⚒️

Apple Silicon (M1) Mac用GNU Arm Embedded Toolchainの作り方

2021/01/16に公開

はじめに

仕事の関係でGNU Arm Embedded Toolchainが必要なのだが、ArmからダウンロードできるものはIntel用なのが残念。Rosetta 2でも十分速いのだがやはりNativeがよいなということでビルドすることにした。

https://future-architect.github.io/articles/20200608/
を参考にして少し手を加えている。

事前準備

  • 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