newlib-1.9.x for ppcsimの作り方&使い方

目次

  1. はじめに
  2. コンパイル
  3. 使い方
  4. その他
  5. 履歴

はじめに

newlib-1.9.x をベースにしてppcsim用のCライブラリとして構築したものです。
2001.3.29時点では公開されていない ppcsim Ver0.50に対応するライブラリの 構築方法です。

コンパイル

まず、最寄のサイトからnewlib-1.9.xのソースファイルをダウンロードしてください。 あまりミラーサイトが存在していない様なので、私は RedHatサイトの CVSダウンロードを利用しています。
そして、「ppcsim用差分」を ダウンロードします。

次に以下の手順でクロスコンパイルを行います。

  1. PPCクロスgccおよびbinutilsを構築し、使用できる状態にします。 「クロスコンパイラの作り方 」 を参考に構築してください。

  2. ダウンロードしたnewlibソースファイルを適当なディレクトリに展開してください。

  3. 展開したディレクトリの下に移動し 「ppcsim用差分」を 展開します。

  4. ディレクトリ「newlib」に移動して、configureを実行します。ターゲットなどは 指定しなくて構いません。

  5. libc/machine/powerpc の下に移動して、./configureを実行します。 終了したら、cd ../../../ で再びnewlibディレクトリ下に戻ってください。

  6. mk.shというシェルスクリプトが用意されていますので、エディタなどで 「export BINDIR=~/develop/ppcgcc」を1.で用意したクロスコマンド群の インストールされたディレクトリに変更します。このとき、相対パス指定 は行わないようにしてください。newlibのmakeはディレクトリを行き来する ため、相対パスにするとコマンドが見えなくなって、コンパイラが起動 できません。

  7. mk.shを実行すると、コンパイルが開始されます。 crt0.o,libc.a,libg.a,libm.a が生成されるとコンパイル完了です。
    適当なディレクトリを作成し、これらのライブラリ一式と、クロスgccの構築時 に生成されるlibgcc.aをまとめて入れておくと良いでしょう。
    ヘッダファイルは libc/include 下をそのまま使用します。これも、適当な ディレクトリに丸ごとコピーするなり、シンボリックリンクを利用するなり して、適当なパスに移しておくと良いかも知れません。

ずっこけた場合は、原因を調べて適当に対処してください(^^;

使い方

includeファイルは newlib/libc/include 以下のファイルをそのまま使用します。 gccの-Iオプションで指定するようにしてください。
以下はMakefileの例です。

SHELL=/bin/sh

LIBPATH = ../../lib
INCPATH = ../../include
BINPATH = ../../../../ppcgcc

CC    = $(BINPATH)/gcc -B$(BINPATH)/
OPT   = -O2 -mcpu=750 #-v -dr
CFLAGS= $(OPT) -I. -I$(INCPATH)
LD      = $(BINPATH)/ld -V -Qy -dn -Bstatic -Ttext 0x10000 \
		-Tdata 0x20000 -Tbss 0x30000

LDFLAGS = -Map map.log

foo.s: foo.c
foo.o: foo.c
foo: foo.c

%.s:%.c
	$(CC) -S $(CFLAGS) $<

%.o:%.c
	$(CC) -c $(CFLAGS) $<

%:%.c
	$(CC) -c $(CFLAGS) $<
	$(LD) $(LDFLAGS) $(LIBPATH)/crt0.o \
	$*.o -L$(LIBPATH) -lc -lm \
	$(LIBPATH)/libgcc.a -o $@
%.bin:%
	bcut -s 0x10000 $< > $*.bin
	$(BINPATH)/objdump --source $< > $*.dis



LIBPATH,INCPATH,BINPATHをインストールしたディレクトリに書き換えれば基本的に OKです。foo.c というソースファイルがあった場合、make fooと実行すればOKです。 例としてfooとなっていますが、実はこのMakefile、fooを生成する為のMakefileの 様に見えて、make hoge とやってもうまくhogeをmakeしてくれます。なんだか ちょっと謎めいていますが、結果オーライという感じでしょうか(^^;

その他

前のppclib2ではスタートアップをstart.oとしていましたが、crt0.oをmakeする 様に変更しました。ただ、syscallライブラリをsys/powerxの下に入れるのは 作法に外れていると思いますが。
システムコールは libc/include/powerx/syscalls.hで定義されている通りです。 glibcのsysdepから拾ってきたLinuxシステムコールから、必要最低限と思われる ものと、コンパイルテスト中にどうしても必要となったものを追加しています。

履歴

  2001/03/29 newlib-1.9.xパッチとして書いた


TOP PREV