Renesas V850 64bit Linux版gccコンパイラ - Qiitaの追試をしようと思ったのだけど、前回の差分を見るに、特にコード修正しなくても対応できそうなので試した。
結果、コード修正なしでも athrill のサンプルがビルドできるものが出来上がった。
環境
- OS: Windows 10 Pro
- docker: Docker version 18.09.1, build 4c52b90
- 使ったコンテナ: debian:buster-slim
ubuntu:bionic
, ubuntu:xenial
でも同じ手順でビルドできるはず。
コンテナ起動
docker run -it --rm -v "$(pwd)\athrill:/athrill" debian:buster-slim
動作確認用に athrill
のディレクトリをマウントしておく。
V850 ツールチェインビルド環境をととのえる
apt-get update
apt-get -y upgrade
apt-get install -y build-essential libgmp-dev libmpfr-dev libmpc-dev texinfo wget
必要なソースコードのダウンロードと展開
mkdir /toolchain
cd /toolchain
wget https://gcc-renesas.com/downloads/d.php?f=v850/binutils/14.01/binutils-2.24_v850_v14.01.tar.bz2 -O binutils-2.24_v850_v14.01.tar.bz2
tar xfv binutils-2.24_v850_v14.01.tar.bz2
mv binutils-2.24 /binutils
wget https://gcc-renesas.com/downloads/d.php?f=v850/gcc/14.01/gcc-4.9.2_v850_v14.01.tar.bz2 -O gcc-4.9.2_v850_v14.01.tar.bz2
tar xfv gcc-4.9.2_v850_v14.01.tar.bz2
mv gcc-4.9.2 /gcc
wget https://gcc-renesas.com/downloads/d.php?f=v850/newlib/14.01/newlib-2.1.0_v850_v14.01.tar.bz2 -O newlib-2.1.0_v850_v14.01.tar.bz2
tar xfv newlib-2.1.0_v850_v14.01.tar.bz2
mv newlib-2.1.0 /newlib
最初は展開した場所を指定して configure したが、 make に失敗するのでルートに配置しなおすことにした。
binutils のビルド
mkdir -p /build/binutils
cd /build/binutils
../../binutils/configure --target=v850-elf --prefix=/usr/local --enable-soft-float
make CFLAGS="-Wno-cast-function-type -Wno-implicit-fallthrough -Wno-shift-negative-value -Wno-unused-value -Wno-pointer-compare"
make install
gcc のビルド
mkdir -p /build/gcc
cd /build/gcc
../../gcc/configure --target=v850-elf --prefix=/usr/local --enable-languages=c,c++ --disable-nls --disable-multilib --disable-libssp --with-newlib --with-headers=/newlib/newlib/libc/include
# xenial なら make のみで OK.
make CXXFLAGS="-std=c++03"
make install
c++11 から invalid になった構文(?)が使われているらしく、デフォルト設定だとビルドできないため、 -std=c++03
を指定。
newlib のビルド
mkdir -p /build/newlib
cd /build/newlib
../../newlib/configure --target=v850-elf --prefix=/usr/local
make
make install
動作確認
cd /athrill/sample/barmetal/step2
make clean all
../../../bin/linux/athrill -c1 -m memory.txt -d device_config.txt -t 500 test_main.elf
OK.
あとは docker のマルチステージビルドでバイナリだけコピーすればいい感じになるのではないでしょうか? これは後でやる。
参考資料
- Renesas V850 64bit Linux版gccコンパイラ - Qiita
- Cross GCC for Renesas RX
- c++ - Unable to build GCC due to c++11 errors - Stack Overflow
更新履歴
日付 | 更新内容 |
---|---|
2019/1/29 | 新規作成 |
2019/3/11 | gcc のビルド時、『s/--with-header/--with-headers/ で target-libstdc++-v3 のビルドエラーは解消できる』という指摘を反映 |
コンパイルフラグで解決できたんですね!
返信削除素晴らしいです。情報展開ありがとうございます!
コメントありがとうございます。
削除とりあえずビルドが通ったというレベルですので、正しいバイナリが出力されるかは...。
これから使っていって不具合が見つかるどうかというところです。
`s/--with-header/--with-headers/` で target-libstdc++-v3 のビルドエラーは解消できるかなと。
返信削除あら本当だ、オプション名間違えてますね...。
削除指摘ありがとうございます!関連記事更新します!