R8C 用コンパイラの構築 gcc-4.9.3

Windows の開発環境で、MSYS2 がメインになってから、
長い間、最新の gcc で m32c(R8C)のコンパイラの構築に失敗していた。
コンパイラの構築には時間がかかる為、オプションの影響などもあまり正確に認識していな
かった。
休みに入ったので、コンパイラと格闘してみた結果、
gcc-5.2.0 で、m32c 用 gcc の構築に成功したので、「要点」を書いておこうと思う。
gcc-5.2.0 の構築は出来たものの、バイナリーを作成してデバイスに書き込んでも、正常に動作しなかったので、
とりあえず、動作が確認されているバージョン(gcc-4.8.3、gcc-4.9.3)を使う。

※「gcc-4.7.4」は現状では、MSYS2 のカレントのコンパイラが 4.9 系では、正常にコンパイル
できない~
いつもながら、クロス gcc の構築には、苦労する・・・

Windows、OS-X で試したので、多分再現性は高いと思う。

Windows では、MSYS2 環境で行い、OS-X では、macport で行う。
基本的に、MSYS2 環境の方が、多少ハードルが高いけど、MSYS2 は、ツールのインストール
が pacman で出来るので、以前より簡単となっている。

まず、MSYS2をインストールする。
※詳しいインストールの方法は、ネットで探すと沢山出てくるので、参考にされたい。
※MSYS2には、3つの実行環境があり、今回は、「msys2_shell.bat」環境で行う。
・まず、システムをアップデート

% update-core

完了したら、ターミナルをクローズして、再度ターミナルを開き、残りを更新。

% pacman -Su

次に、ビルドに必要なツール類をインストールする。(MSYS2)

% pacman -S gcc
% pacman -S texinfo
% pacman -S mpc-devel
% pacman -S diffutils
% pacman -S automake

※他にもあるかもしれないので、適宜インストールする。
※もし、何かツールが無くてコンパイルに失敗したら、ビルドディレクトリーを消して、
「configure」からやり直すのが「確実」だと思う。

・ソースコードのアーカイブを取っておく、今回は以下の組み合わせで行った。
※「gcc-4.8.3」を使う場合は、「4.9.3」を「4.8.3」に読み替えて行う。

    binutils-2.25.1.tar.gz
    gcc-4.9.3.tar.gz
    newlib-2.2.0.tar.gz

・binutils-2.25.1 の構築

% cd
% tar xfvz binutils-2.25.1.tar.gz
% cd binutils-2.25.1
% mkdir m32c_build
% cd m32c_build
% ../configure --target=m32c-elf --prefix=/usr/local/m32c-elf --disable-nls
% make
% make install

・「/usr/local/m32c-elf/bin」へPATHを通して、シェルを起動しなおす。

・C コンパイラの構築
※少し古い gcc のソースコードでは、MSYS2 環境を認識する定義が無い為、「automake-1.15」の
設定をコピーする。(その時の最新をコピーすれば良いと思われる、今回は 1.15 を使った)

% cd
% tar xfvz gcc-4.9.3.tar.gz
% cd gcc-4.9.3
% cp /usr/share/automake-1.15/config.guess .
% mkdir m32c_build
% cd m32c_build
% ../configure --prefix=/usr/local/m32c-elf --target=m32c-elf --enable-languages=c --disable-libssp --with-newlib --disable-nls --disable-threads --disable-libgomp --disable-libmudflap --disable-libstdcxx-pch --disable-multilib --disable-bootstrap
% make
% make install

・newlib-2.2.0 の構築

% cd
% tar xfvz newlib-2.2.0.tar.gz
% cd newlib-2.2.0
% mkdir m32c_build
% cd m32c_build
% ../configure --target=m32c-elf --prefix=/usr/local/m32c-elf
% make
% make install

・C++ コンパイラの構築

% cd
% cd gcc-4.9.3
% cd m32c_build
% ../configure --prefix=/usr/local/m32c-elf --target=m32c-elf --enable-languages=c,c++ --disable-libssp --with-newlib --disable-nls --disable-threads --disable-libgomp --disable-libmudflap --disable-libstdcxx-pch --disable-multilib --disable-bootstrap
% make
% make install

エラー無く終了すれば、完了!

r8cprog の構築も MSYS2 で出来るので、これでやっと R8C の開発環境が全て MSYS2 で完結する~

一応、I2C_RTC_test をビルドして、M120 に書き込んでテストしてみた。
※問題なく動作しているようである。

※「configure」で、「m32c」を「rx」に変更すれば、RX マイコン用 gcc が構築出来る。
※ rx マイコン用 gcc の構築では、4.9.3 を使う。(4.8.3 は C コンパイラの構築中エラーで止まる)

参考リンク:
最低限のクロスコンパイラの作り方
MSYS2における正しいパッケージの更新方法