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もない。
また，各所で紹介されている情報も古くなりつつあるため，最低限のアップデート情報を紹介する。

## 準備

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

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

porgは野良ビルドを管理するためのツール。[野良ビルド管理 porg のメモ。]( https://qiita.com/japboy/items/57063e3e0fc021617dd3 )などを参照のこと。


## 手順

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

```shell
#!/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](http://exception.blog.shinobi.jp/iot/gnu%20toolchain%20for%20hitachi )にあるバイナリを使わせてもらうのがよいと思います。


## 参考文献
1. ひかえん２の日記 2017-01-01 DebianでH8用(h8300-hms)のGCCをビルドする, http://hikaen2.hatenablog.com/entry/20170101/1483251025 ,2020-10-26 閲覧
1. ひかえん２の日記 2013-11-12 Debian GNU/Linux の gcc-h8300-hms について, http://hikaen2.hatenablog.com/entry/20131112/1384249433 ,2020-10-26 閲覧
1. なんとなく活動記録。 2019/7/20 各種マイコン用gccのバージョン・ビルド法等まとめ, http://blueeyes.sakura.ne.jp/2019/07/20/2459/ ,2020-10-26 閲覧
1. saito's memo newlibベースのgccツールチェインの作成, https://memo.saitodev.com/home/arm/arm_gcc_newlib/ ,2020-10-26 閲覧
1. 未処理の例外が発生しました 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 閲覧