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 コンパイラの構築中エラーで止まる)