![]() |
まずは何よりGCC | ![]() |
シリアルケーブルはどうするのか、その辺りは取り敢えず放っておいて、ソフ トウェア開発環境の構築に走ってみることにしよう。で、手元にあるbinutil とgccは、
である。これらをFreeBSD 4.2-RELEASE上でmakeする。
binutils-2.9.1.tar.gz gcc-2.95.2.tar.gz
elfにしとけば多分問題無いだろう。後はmakeあるのみ。但し、例によってGNU の成果物のmakeには、やはりGNU makeが必要なので、packagesから入れたgmake を使う。
% tar xzf binutils-2.9.1.tar.gz % cd binutils-2.9.1 % ./configure --target=sh-hitachi-elf --prefix=/usr/local
一発でOK。後はinstallあるのみ。
% gmake
これで、/usr/local/bin以下に"sh-hitachi-elf-*"なバイナリが入り、 /usr/local/sh-hitachi-elf以下にリンカスクリプト等が入った。私は貧乏性 ("性"に限らないけど…)なので、/usr/local/bin/で、
# gmake install
も忘れず実行。これでbinutilsのインストールは完了。
% strip sh-hitachi-elf-*
までは同じである。しかし、ここで手作業をしなければならない。 gcc-2.95.2/gcc/Makefileにちょっと手を加えるのである。-Dinhibit_libcと 書き加えるだけ。変更点を以下に示す。
% tar xzf gcc-2.95.2.tar.gz % cd gcc-2.95.2 % ./configure --target=sh-hitachi-elf --prefix=/usr/local
↑これを↓こうする。(注: 表示上複数行に渡っている様に見えるが、実際は 一行のもの。また、"355:"は便宜的に書いた行番号。)
355: LIBGCC2_CFLAGS = -O2 $(LIBGCC2_INCLUDES) $(GCC_CFLAGS) $(TARGET_LIBGCC2_CFLAGS) $(LIBGCC2_DEBUG_CFLAGS) $(GTHREAD_FLAGS) -DIN_LIBGCC2 -D__GCC_FLOAT_NOT_NEEDED
これをやらないと、makeに失敗する。この効果は、標準ライブラリの作成(を しようとして、ファイルの不足から失敗するの)を抑止することだと思うが、 良く調べた訳でもないので、結果については(他と同様)なんら保証出来ない。 また、このファイルは./configureをする度に書き換えられるので注意が必要 である。 あとは楽々。
355: LIBGCC2_CFLAGS = -O2 -Dinhibit_libc $(LIBGCC2_INCLUDES) $(GCC_CFLAGS) $(TARGET_LIBGCC2_CFLAGS) $(LIBGCC2_DEBUG_CFLAGS) $(GTHREAD_FLAGS) -DIN_LIBGCC2 -D__GCC_FLOAT_NOT_NEEDED
これで/usr/local/binに、
% gmake LANGUAGES="c" # gmake LANGUAGES="c" install
が出来た。基本的には-nostdlibで使うので要らないのだが、 /usr/local/sh-hitachi-elfに空のlibc.aを作っておくのも一興である。
sh-hitachi-elf-gcc
何の意味が有るのか?と問われると、答えはない。
# cd /usr/local/sh-hitachi-elf/lib # sh-hitachi-ar rc libc.a
あら、失敗した。そうか、sh-elf-*になっているんだな。そーいや、別にベン ダ名なんか付けなくても良かったんだ。対策としては、作り直すかリンクを作 るかすればいいのだが、ここはさっさとMakefileを変更する。 /sh-/s//sh-hitachi-/だ。
% tar xzf tatest.tar.gz % cd tatest % make sh-elf-as -little -o startup.o startup.s sh-elf-as:No such file or directory *** Error code 1 Stop in /usr/home/m-arai/work/DC/tatest. %
tatest.srecが出来た。これで、C(とアセンブラの)プログラムから実行可能バ イナリを作る環境が確認出来た!(…その出来たバイナリがちゃんと動くとい う確認はまだだけど…それが出来なくて何の意味がある!という意見は黙殺)
% make sh-hitachi-elf-as -little -o startup.o startup.s sh-hitachi-elf-gcc -ml -m4-single-only -mhitachi -O -pipe -c main.c sh-hitachi-elf-as -little -o matrix.o matrix.s sh-hitachi-elf-gcc -ml -m4-single-only -mhitachi -O -pipe -c ta.c sh-hitachi-elf-gcc -ml -m4-single-only -mhitachi -O -pipe -c video.c sh-hitachi-elf-gcc -ml -m4-single-only -mhitachi -o tatest.srec -Wl,--oformat,srec,-Ttext=0x8c010000 -nostartfiles -nostdlib startup.o main.o matrix.o ta.o video.o -lgcc -lc -lgcc %
そうそう、それに、sh-hitachi-elf-objdumpを使ってdisassembleも出来るん だ。
srecとかのsymbolが無くなっているオブジェクトが相手だと、ちょっと分 かり難い出力になってしまうけど。まぁ、何かの役には立つだろう。
% sh-hitachi-elf-objdump -D -b srec -EL -m sh4 tatest.srec > tatest.s