私もnewlibとGCCを移植しました。そして、newlibを機能させるために多くのことをする必要がなかったことを覚えています(GCC、gas、libbfdの移植がほとんどの作業でした)。
浮動小数点数に関するいくつかのファイルを微調整し、いくつかのより高度な関数を使用しないようにするいくつかのPOSIX / SomeOtherStandardフラグをオフにし、レジスタの状態をジャンプバッファにロードおよび保存するlongjmp
/のサポートコードを記述する必要がありました。ただし、適切なマシンサブディレクトリなどを使用するようsetjmp
に、ターゲットを使用して指定する必要があります。ターゲットを認識し、完全な構成の3倍(cpu-manufacturer-osなど)を出力するために--target
、小さなコードを追加する必要があったことを覚えています。configure.sub
ちょうど私が呼ばれるファイルを編集しなければならなかったことがわかりましたconfigure.host
。これはターゲットのいくつかのオプションを設定します(たとえば、オペレーティングシステムがによって発生した信号を処理するraise
かどうか、またはnewlib自体が処理をシミュレートする必要があるかどうか)。
私はこのAnthonyGreenのブログをガイドラインとして使用しました。彼は、GCC、newlib、binutilsの移植について説明しています。あなたが自分でそれをしなければならないとき、それは素晴らしい情報源だと思います。とにかく楽しい読書。自立型C(シミュレーターの端末に書き込むダミーの読み取り/書き込み関数付き)のみを必要とするいくつかの楽しいCプログラムをコンパイルして実行するのに合計2か月かかりました。
ですから、仕事量は確かに管理できると思います。私をほとんど夢中にさせたのは、libgloss
のビルドスクリプトでした。私は確かにそれらのautoconfの魔法で迷子になりました:)とにかく、私はあなたに幸運を祈ります!:)