先日、
avr-libcのHomePageを眺めていた時に
time.hを見つけました。
time.hはその名の通り時刻に関する操作を行うライブラリです。時計を作るのに使えそうだなと思い、簡単なコードを書いてコンパイルしたところコンパイラが"time.hがない"と言うではありませんか! ソースコードを確認したけどスペルミスはない。「またまた、ご冗談を…」と/usr/lib/avr/include/を覗いてみたところ確かに無かった。(絶句)
どうやらavr-libcのバージョンが異なるのが原因のようです。
そこでRaspberry PiのAVR開発環境を最新化することにしました。
(1)最新化に必要なソフト
せっかくなのでgccも最新化します。
・binutils-2.29.1.tar.xz
https://www.gnu.org/software/binutils/
・gcc-7.2.0.tar.xz
https://gcc.gnu.org/
・gmp-6.1.2.tar.xz
https://gmplib.org/
・mpfr-3.1.6.tar.xz
http://www.mpfr.org/
・mpc-1.0.3.tar.gz
http://www.multiprecision.org/index.php?prog=mpc
・avr-libc-2.0.0.tar.bz2
http://www.nongnu.org/avr-libc/
・avr-size用パッチ
https://gist.github.com/larsimmisch/4190960
(2)コンパイル手順
avr-libcのHomePageにコンパイル手順の説明があります。基本的にこの手順で実施すればOKです。
(2-1)環境設定
$ mkdir ~/local
$ PREFIX=$HOME/local
$ export PREFIX
$ PATH=$PATH:$PREFIX/bin
$ export PATH
(2-2)GNU Binutilsのコンパイル
$ cd ~/src/avr
$ wget https://ftp.gnu.org/gnu/binutils/binutils-2.29.1.tar.xz
$ tar xvf binutils-2.29.1.tar.xz
$ wget https://gist.github.com/larsimmisch/4190960/archive/16c6b9627f8451eeebd644a4b9a741edfdb0c45e.zip
$ unzip 16c6b9627f8451eeebd644a4b9a741edfdb0c45e.zip
$ cd binutils-2.29.1/binutils
$ patch -u < ../../4190960-16c6b9627f8451eeebd644a4b9a741edfdb0c45e/avr-binutils-size.patch
$ cd ..
$ mkdir obj-avr
$ cd obj-avr/
$ ../configure --prefix=$PREFIX --target=avr --disable-nls
$ make -j4
$ make install
(2-3) GNU gmpのコンパイル
gccをコンパイルするためにはgmp, mpfr, mpcが必要なため、先にコンパイルします。
$ cd ~/src/avr
$ wget https://gmplib.org/download/gmp/gmp-6.1.2.tar.xz
$ tar xvf gmp-6.1.2.tar.xz
$ cd gmp-6.1.2/
$ ./configure --prefix=$PREFIX
$ make -j4
$ make -j4 check
$ make install
(2-4) GNU mpfrのコンパイル
$ cd ~/src/avr
$ wget http://www.mpfr.org/mpfr-current/mpfr-3.1.6.tar.xz
$ tar xvf mpfr-3.1.6.tar.xz
$ cd mpfr-3.1.6
$ ./configure --prefix=$PREFIX --with-gmp-build=../gmp-6.1.2
$ make -j4
$ make -j4 check
$ make install
(2-5) GNU mpcのコンパイル
$ cd ~/src/avr
$ wget ftp://ftp.gnu.org/gnu/mpc/mpc-1.0.3.tar.gz
$ tar xvf mpc-1.0.3.tar.gz
$ cd mpc-1.0.3
$ ./configure --prefix=$PREFIX --with-gmp=$PREFIX --with-mpfr=$PREFIX
$ make -j4
$ make -j4 check
$ make install
(2-6) gccのコンパイル
$ cd ~/src/avr
$ wget http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-7.2.0/gcc-7.2.0.tar.xz
$ tar xvf gcc-7.2.0.tar.xz
$ cd gcc-7.2.0/
$ mkdir obj-avr
$ cd obj-avr
$ ../configure --prefix=$PREFIX --target=avr --enable-languages=c,c++ --disable-nls --disable-libssp --with-dwarf2 --with-gmp=$PREFIX --with-mpfr=$PREFIX --with-mpc=$PREFIX
$ make -j4
$ make install
(2-7)avr-libcのコンパイル
$ cd ~/src/avr
$ wget http://download.savannah.gnu.org/releases/avr-libc/avr-libc-2.0.0.tar.bz2
$ tar xvf avr-libc-2.0.0.tar.bz2
$ cd avr-libc-2.0.0/
$ ./configure --prefix=$PREFIX --build=`./config.guess` --host=avr
$ make -j4
$ make install