ARMターゲットのプログラムをコンパイルするための、クロスコンパイラを自前でmakeしようと試行錯誤していますがうまくいきません。色々と調べてみて、1つ解決したかと思えば次また止まり、最終的にできあがったコンパイラでは正常に実行できるelfが出来上がらずといったところです。
折角なので、やってみたことを記録として残しておこうと思います。これでも誰かの参考になったら幸いです。
その1
gmp
mpfr
mpc
gcc
binutils
newlib
これらを用意してmakeしていきます。
gmp,mpfr,mpcらがgccで必要とするらしく・・・。またこれら出来上がった場所を LD_LOAD_LIBRARY に追加して soを参照できるようにしてみました。
というのも、gccのmake過程で GCC_NO_EXECUTABLES エラーがでてしまい・・・解決するかと思ったのですが。so解決しても結局解消することは不可能でした。また –disable-dlopenも試してみたのですがこれもまたNG
その2
export TARGET=arm-eabi
export PREFIX=/usr/local/gnu
configure –prefix=$PREFIX –target=$TARGET –enable-interwork –enable-multilib –enable-languages=c –with-newlib –disable-shared –disable-thread –without-headers –disable-libssp
これでgccを makeしてみるとうまくいった.ただし期待したシロモノができない。
理由は arm-eabi だったから。今ほしいのは eabihf の ABI
arm-linux-gnueabihf をターゲットとしてmakeさせると、エラーが発生。GCC_NO_EXECUTABLES 問題解決できず終了。
その3
どうやら gccのコンパイル過程で makeinfo が問題となっているよう。
apt-get install texinfo で makeinfo も片付くが、バージョンが問題になっている模様。新しいバージョンだとgccのmake過程でエラーが発生してしまう。
そこで、 makeinfo のバージョンを 5.0未満にすべく、古い物をソースからインストールしてみた。4.13あたりでチャレンジした。
これでgccのmakeはうまくいくようになるが、別の問題が発生。
arm-linux-gnueabihf のABIでパッチ当てたりしてmakeしてみるものの 失敗。armアセンブラが解釈できない何かでglibcの生成で失敗。
なお、 http://keropo.hatenadiary.com/entry/2013/04/14/232244 を参考にして eabi ならばうまくgccが生成できるところまではこぎ着けた。すごく参考になりました。
まとめ
クロスコンパイラgccを準備するのは非常に大変。
外部から提供される or 同梱されているならばそれを使うのが吉です。自力で用意してやろうとか欲を出すと、これに相当時間を取られそうです。
とはいえ、あまりにあまりな結果だったので他の方法もまだ探してみたいと思います。