メモです。
以前の記事で Mac で使えるように GCC をビルドしたよという記事を流したのですが、不用意にライブラリバージョン名を限定してパスを指定してしまったため、バージョンアップで動かなくなるというポンコツっぷりを発揮してしまったのでビルドし直しました。その時にやった忘れそうなことをメモっておきます。
使用バージョン
追記(2018/10/11): gcc 6.4.0 に関する文言を削除
こちらの GitHub リポジトリどおり、gcc 6.4.0 です。最近は C++17 を使いたいということで 8.2.0 を入れていますw
実行コマンド
コマンドはパクリですが、ログとして記載しておきます。
追記(2018/10/11): --disable-multilib
を削除
# binutils
$ mkdir rx_build && cd rx_build
$ ../configure --target=rx-elf --prefix=/usr/local/rx-elf --disable-nls --with-system-zlib
# gcc(その1)
$ ./contrib/download_prerequisites # 展開したディレクトリのルートで実行
$ mkdir rx_build && cd rx_build
$ CXX='g++-7' ../configure --prefix=/usr/local/rx-elf --target=rx-elf --enable-languages=c --disable-libssp --with-newlib --disable-nls --disable-threads --disable-libgomp --disable-libmudflap --disable-libstdcxx-pch --enable-lto --with-system-zlib
# newlib
$ mkdir rx_build && cd rx_build
$ ../configure --target=rx-elf --prefix=/usr/local/rx-elf --enable-multilib
# gcc(その2)
$ mkdir rx_build && cd rx_build
$ CXX='g++-7' ../configure --prefix=/usr/local/rx-elf --target=rx-elf --enable-languages=c,c++ --disable-libssp --with-newlib --disable-nls --disable-threads --disable-libgomp --disable-libmudflap --disable-libstdcxx-pch --enable-lto --with-system-zlib
以下、ハマった点と解決策です。
ハマリポイントと解決策
「MPC とか、ちゃんとしたバージョンの奴使えよ」って言われた
brew
で入れているのに言われました。と思ったら、brew
の mpfr
が要件の 0.8.0+ を満たしていないことが判明。そこで
./contrib/download_prerequisites
を実行することで、プロジェクト内に mpc やら mpfr やらのファイルをダウンロードできます。これを実行することでバージョンの不整合を防げました。
make中に fancy_abort
だなんだってキレられる
なんかこれは Xcode に入っている llvm
では無理ということらしい。ということで、CXX='g++-7'
とすることで、ビルド時に使用する C++ コンパイラ を llvm
(clang++) でなく gnu gcc
(g++) として回避しました。それにしても、.c
ファイルに #include <new>
ってなんだよ。
おわりに
木曜の全休をコンパイラビルドに費やしてしまった。やっぱ素直に Linux 使ったほうがこういうのに向いてるよね(言っちゃった)。
同様に SH 用コンパイラーも実行不能となっていましたが、同様にやって解決しました。疲れた。
あと、ビルド中にターミナルのタイトルに sed
って出ると「あぁ、gcc 開発者もシェル芸やるんだなあ」と思いますね(謎)