13,009
回編集
282行目: | 282行目: | ||
<br> | <br> | ||
==== H8 (システムルート無し) ==== | ==== H8 (システムルート無し) ==== | ||
<u>※注意</u><br> | |||
<u>GCC 9.1以降は、共有ライブラリとしてC++(libstdc++)をビルドすると失敗するため、C言語のみの対応となる。</u><br> | |||
<u>スタティックライブラリとしてはビルド可能であるが、その場合、例えば、<code>#inlcude <iostream></code>のインクルードができなくなる。</u><br> | |||
<br> | |||
<u>共有ライブラリとしてビルド不可の理由としては、ビット数を管理するソースコードファイルにおいて、</u><br> | |||
<u><code>std::size_t</code>の配列が、H8アーキテクチャ上では<code>std::size_t</code>のビット長が短いため、配列の要素が格納できないからである。</u><br> | |||
<u>また、C++17のメモリ管理機構において、コンパイル時の<code>static_assert</code>に失敗する。</u><br> | |||
<br> | |||
GCC 8.5では、GCCのMakefileに手を加えることにより、C言語およびC++言語を対応させることができる。<br> | |||
通常、ビルドを行う場合、<code>basic_string.h</code>ファイルにおいて、<code>internal compiler error: unrecognizable insn</code>としてエラーになる。<br> | |||
これは、C++向けライブラリをビルドするためのxgccにおいて、内部エラーが起きているからである。<br> | |||
<u>しかし、ビルドディレクトリにあるh8300-elfディレクトリ内のMakefileファイルの526行目 <code>CXXFLAGS_FOR_TARGET</code>を<code>-g -O0</code>に変更する(最適化を無効にする)ことにより、ビルド可能となる。</u><br> | |||
<br> | |||
まず、[https://ftp.gnu.org/gnu/binutils/ GNUの公式Webサイト]から、Binutilsをダウンロードする。<br> | まず、[https://ftp.gnu.org/gnu/binutils/ GNUの公式Webサイト]から、Binutilsをダウンロードする。<br> | ||
ダウンロードしたファイルを解凍する。<br> | ダウンロードしたファイルを解凍する。<br> | ||
323行目: | 336行目: | ||
--build=x86_64-pc-linux-gnu --host=x86_64-pc-linux-gnu --target=h8300-elf \ | --build=x86_64-pc-linux-gnu --host=x86_64-pc-linux-gnu --target=h8300-elf \ | ||
--enable-languages=c \ | --enable-languages=c \ | ||
--disable-bootstrap --disable-nls --disable-shared --enable-static --enable-lto --enable-gold \ | --disable-bootstrap --disable-nls --disable-shared --enable-static --disable-libstdc__-v3 --enable-lto --enable-gold \ | ||
--with-newlib \ | --with-newlib \ | ||
--with-headers=/<上記でダウンロードしたNewLibのディレクトリ>/newlib/libc/include | --with-headers=/<上記でダウンロードしたNewLibのディレクトリ>/newlib/libc/include |