macOSでのクロスコンパイラのビルド方法
macOSでのクロスコンパイラのビルド方法について書いていく。
gcc
この記事の執筆時点での最新バージョンのgcc9.1.0をビルドするが,よほど古くない限りは同じ方法でできるはずだ。
gcc-9.1.0のダウンロードと解凍:
$ wget http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-9.1.0/gcc-9.1.0.tar.gz $ tar -zxvf gcc-9.1.0.tar.gz && rm -f gcc-9.1.0.tar.gz
そして,gcc-buildディレクトリを作ってconfigure
する。ここで,Homebrewでbinutilsをインストールしている場合,ビルドに失敗することがあるため,brew unlink binutils
を実行する。それでもまだ失敗する場合は一時的にbrew uninstall binutils
でアンインストールして,rm -rf ./*
でgcc-build以下の全てのファイルを削除する(削除しないと,再configureに失敗する)。
$ mkdir gcc-build $ cd gcc-build
gccのビルドに必要なgmp, mpfr, mpcはいずれもbrew install
でインストールできるため,ない場合はインストールする。
gmp, mpfr, mpcのあるディレクトリのPathをbrew --prefix パッケージ名
で表示し,そのPathをconfigure時に-with-パッケージ名="ディレクトリのPath"
で引数として渡す。
configure:
$ ../gcc-9.1.0/configure --prefix=インストール先 --target="ターゲット名(例: x86_64-elf)" --with-gmp="gmpのPath" --with-mpfr="mpfrのPath" --with-mpc="mpcのPath" AR="/usr/bin/ar" RANLIB="/usr/bin/ranlib"
AR="/usr/bin/ar" RANLIB="/usr/bin/ranlib"
の部分は,Homebrewでインストールされたbinutilsが影響を及ぼしている可能性があるため,/usr/bin以下のarとranlibを指定している。
そして,ビルド&インストールを実行する。
このとき,make all-gcc
に引数として,-j
と,その後ろにCPUのコア数を渡すと,CPUに応じてビルドが最適化される。
$ make all-gcc $ make install-gcc
binutils
binutilsも執筆時点での最新バージョンのbinutils2.32をビルドする。
binutils-2.32のダウンロードと解凍:
$ wget http://ftp.jaist.ac.jp/pub/GNU/binutils/binutils-2.32.tar.gz $ tar -zxvf binutils-2.32.tar.gz && rm -f binutils-2.32.tar.gz
gccのビルドと同じように,binutils-buildディレクトリを作って,そこでビルドを行う。
$ mkdir binutils-build $ cd binutils-build
そして,configureを行う。
$ ../binutils-2.32/configure --prefix="インストール先" --target="ターゲット名(例: x86_64-elf)"
ビルドは,gccとは違い,all-binutilsなどつけなくて良い。binutilsのビルドも,make -jコア数
でCPUに対して最適化できる。
$ make $ make install