Mac(OS sierra)で非llvmのgccをビルドする手順

Lionより新しいOSを使用しているMacでは、llvmを使わないgccがないらしく,例えばクロスコンパイル用のgccをビルドするためには、 非llvm-gcc が必要とのことなので、非llvm-gcc をビルドするまでの手順を書いておこうと思います。

記事の内容

非llvmのgccのビルド手順
追加でシンボリックリンクを変更する手順

バージョンですが、今回ビルドするgccでクロスコンパイル用gccをビルドする前提なのであれば、非llvmのgcc >= クロスコンパイル用gccとなるようにバージョンを確認。今回は7.2.0で行いました。

必要なソースコードをダウンロードして展開する

・新しくホルダーを作成し、移動

$ cd
$ mkdir N-gcc-7.2.0
$ cd N-gcc-7.2.0


・必要なソースコードのダウンロード
※各バージョンを見るなら→→→ GCC GMP MPFR MPC libiconv

$ curl -O https://ftp.gnu.org/gnu/gcc/gcc-7.2.0/gcc-7.2.0.tar.gz
$ curl -O https://ftp.gnu.org/gnu/gmp/gmp-6.1.2.tar.bz2
$ curl -O https://ftp.gnu.org/gnu/mpfr/mpfr-3.1.6.tar.gz
$ curl -O https://ftp.gnu.org/gnu/mpc/mpc-1.0.3.tar.gz
$ curl -O https://ftp.gnu.org/gnu/libiconv/libiconv-1.15.tar.gz


・それぞれ展開します

$ tar zxvf gcc-7.2.0.tar.gz
$ tar jxvf gmp-6.1.2.tar.bz2
$ tar zxvf mpfr-3.1.6.tar.gz
$ tar zxvf mpc-1.0.3.tar.gz
$ tar zxvf libiconv-1.15.tar.gz


↓ こんな感じになってます。

それぞれビルドしてインストールする

GMP ※marsskyの部分は自分のユーザー名、以下同

$ mkdir gmp-build
$ cd gmp-build
$ ../gmp-6.1.2/configure --prefix=/Users/marssky/N-gcc-7.2.0
$ make -j4
$ make install
$ cd ..


MPFR

$ mkdir mpfr-build
$ cd mpfr-build
$ ../mpfr-3.1.6/configure --prefix=/Users/marssky/N-gcc-7.2.0 --with-gmp=/Users/marssky/N-gcc-7.2.0
$ make -j4
$ make install
$ cd ..


MPC

$ mkdir mpc-build
$ cd mpc-build
$ ../mpc-1.0.3/configure --prefix=/Users/marssky/N-gcc-7.2.0 --with-gmp=/Users/marssky/N-gcc-7.2.0 --with-mpfr=/Users/marssky/N-gcc-7.2.0
$ make -j4
$ make install
$ cd ..


libiconv

$ mkdir libiconv-build
$ cd libiconv-build
$ ../libiconv-1.15/configure --prefix=/usr/local
$ make -j4
$ make install
$ cd ..


GCC

$ mkdir gcc-build
$ cd gcc-build
$ ../gcc-7.2.0/configure\
   --prefix=/Users/marssky/N-gcc-7.2.0 \
   --with-gmp=/Users/marssky/N-gcc-7.2.0 \
   --with-mpfr=/Users/marssky/N-gcc-7.2.0 \
   --with-mpc=/Users/marssky/N-gcc-7.2.0 \
   --program-suffix=7.2.0 \
   --enable-languages=c,c++ \
   --with-system-zlib \
   --enable-stage1-checking \
   --enable-plugin \
   --enable-lto \
   --disable-multilib \
   --with-libiconv-prefix=/usr/local
$ sudo make bootstrap
$ sudo make install

以上で、非llvmのgccのビルドが終了しました。
ビルドしたGCCのパスを通しておきます。

$ export PATH=/Users/marssky/N-gcc-7.2.0/bin:$PATH


【シンボリックリンクを変更する場合の作業】
今あるgccの名前を変える

$ sudo mv /usr/bin/gcc /usr/bin/gcc_bak20170918


Operation not permittedが出る場合は、リカバリーモードで起動しSIPを切る。

$ csrutil disable


今あるgccの名前を変える(再度挑戦)

$ sudo mv /usr/bin/gcc /usr/bin/gcc_bak20170918


新しいgccのリンクを作成する

$ sudo ln -s /Users/marssky/N-gcc-7.2.0/bin/gcc7.2.0 /usr/bin/gcc


変わったか確認

$ gcc -v