DebianでH8用のGCCをビルドする(2020年版)


結論

以下の組み合わせでH8/300H用のツールチェインがビルド可能。(11/4 追記:ただしnewlibの動作を実機マイコンで確認していない。GCCはH8/3664Fでの動作を確認済み)

  • Debian 10.6
  • binutils-2.30
  • gcc-8.4.0
  • newlib-2.5.0

はじめに

Debian/UbuntuにはH8/300H用のパッケージ(gcc-h8300-hms 3.4.6,binutils-h8300-hms 2.16.1)が用意されているものの,既にバージョンが古くnewlibもない。
また,各所で紹介されている情報も古くなりつつあるため,最低限のアップデート情報を紹介する。

準備

以下のパッケージをインストールする。

apt install build-essential libgmp-dev libmpfr-dev libmpc-dev bison flex texinfo
apt install porg

porgは野良ビルドを管理するためのツール。野良ビルド管理 porg のメモ。などを参照のこと。

手順

構築手順およびconfigureオプションは以下の通り。(スクリプトとして実行できる)

#!/bin/sh

# get and extract archives
wget http://ftp.gnu.org/gnu/binutils/binutils-2.30.tar.bz2
wget https://mirror.jre655.com/GNU/gcc/gcc-8.4.0/gcc-8.4.0.tar.xz
wget ftp://sourceware.org/pub/newlib/newlib-2.5.0.tar.gz

tar xfv binutils-2.30.tar.bz2 
tar xfv gcc-8.4.0.tar.xz
tar xfv newlib-2.5.0.tar.gz 


# prepair directories
mkdir h8300-elf
mkdir h8300-elf/binutils
mkdir h8300-elf/gcc_stage1
mkdir h8300-elf/newlib
mkdir h8300-elf/gcc


# build binutils
cd h8300-elf/binutils
../../binutils-2.30/configure --prefix=/usr/local --target=h8300-elf --disable-nls --disable-initfini-array --enable-lto 
make -j4 
sudo porg -lp binutils-h8300-elf "make install"
cd ../..
porgball -x binutils-h8300-elf


# build gcc stage1
cd h8300-elf/gcc_stage1
../../gcc-8.4.0/configure --prefix=/usr/local --target=h8300-elf --disable-nls --disable-initfini-array --enable-lto --disable-decimal-float --disable-fixed-point --disable-libatomic --disable-libgomp --disable-libquadmath --disable-libssp --disable-libstdcxx-pch --disable-threads --disable-tls --enable-languages=c  --with
-newlib
make -j4 all-gcc
sudo porg -lp gcc-h8300-elf-stage1 "make install"
cd ../..


# build newlib
cd h8300-elf/newlib
../../newlib-2.5.0/configure --prefix=/usr/local --target=h8300-elf
make -j4
sudo porg -r gcc-h8300-elf-stage1
sudo porg -lp newlib-h8300-elf "make install"
cd ../..
porgball -x newlib-h8300-elf


# build gcc agein
cd h8300-elf/gcc
../../gcc-8.4.0/configure --prefix=/usr/local --target=h8300-elf --disable-nls --disable-initfini-array --enable-lto --disable-decimal-float --disable-fixed-point --disable-libatomic --disable-libgomp --disable-libquadmath --disable-libssp --disable-libstdcxx-pch --disable-threads --disable-tls --enable-languages=c,c++  --with-newlib --disable-shared  --disable-libstdc__-v3 
make -j4 
sudo porg -lp gcc-h8300-elf "make install"
cd ../..
porgball -x gcc-h8300-elf

newlibなしでC++を作ろうとすると失敗するので,GCCの構築を2回やっています。

Windowsなら

GNU Toolchain for Hitachi H8/300 series for Windowsにあるバイナリを使わせてもらうのがよいと思います。

参考文献

  1. ひかえん2の日記 2017-01-01 DebianでH8用(h8300-hms)のGCCをビルドする, http://hikaen2.hatenablog.com/entry/20170101/1483251025 ,2020-10-26 閲覧
  2. ひかえん2の日記 2013-11-12 Debian GNU/Linux の gcc-h8300-hms について, http://hikaen2.hatenablog.com/entry/20131112/1384249433 ,2020-10-26 閲覧
  3. なんとなく活動記録。 2019/7/20 各種マイコン用gccのバージョン・ビルド法等まとめ, http://blueeyes.sakura.ne.jp/2019/07/20/2459/ ,2020-10-26 閲覧
  4. saito's memo newlibベースのgccツールチェインの作成, https://memo.saitodev.com/home/arm/arm_gcc_newlib/ ,2020-10-26 閲覧
  5. 未処理の例外が発生しました 2019/04/20 GNU Toolchain for Hitachi H8/300 series for Windows, http://exception.blog.shinobi.jp/iot/gnu%20toolchain%20for%20hitachi ,2020-10-26 閲覧