CPU実験室

誰も見向きもしない古いCPUをいじって動かしてみようというプロジェクトです

Cygwin環境でGCC

Cygwin上にm68k用GCCクロス環境ができたのでこれを整備しています。
 
まずコマンドライン入力でコンパイラは動作しているのでコンパイルアセンブル、リンク、オブジェクト変換の一連の処理の流れをスクリプトファイルgc.shに記述
 
#!/bin/bash
m68k-coff-gcc -O -S -c -v -m68040 -I/usr/local/m68k/include $1.c
m68k-coff-as  -R -m68040 -o$1.o $1.s
m68k-coff-ld  -N -M -Ttext 80000 -Tbss C0000 -o.$1.obj start.o bios.o $1.o -lc >$1.map
m68k-coff-objcopy -Osrec $1.obj $1.mot
 
といってもいままでDjgppで使っていたMSDOS用バッチファイルとオプション等は何ら変わりません
テスト用ソースコードtest.cは簡単にこんなものを書いておきます
 
イメージ 1
 
で、testを引数にしてスクリプトを実行。
 
$ ./gc.sh test
: No such file or directory
Reading specs from /usr/local/m68k/lib/gcc/m68k-coff/3.4.2/specs
Configured with: ./configure --prefix=/usr/local/m68k --target=m68k-coff --with-newlib
Thread model: single
gcc version 3.4.2
 
・・? いきなり対象ファイルなし?
 
これは「Cygwin No such file or directory」で調べたらすぐに原因判明。
Unix系OSで扱う改行コードはCR/LFではなくLFだけのようです。
DOSのバッチファイルをそのまま編集したので拡張子の後に^M(CR)と余計なコードがついてしまいファイル名がマッチしなかったようです

$ cat -A gc.sh
#!/bin/bash^M$
m68k-coff-gcc -O -S -c -v -m68040 -I/usr/local/m68k/include $1.c^M$
m68k-coff-as  -R -m68040 -o$1.o $1.s^M$
m68k-coff-ld  -N -M -Ttext 80000 -Tbss C0000 -o.$1.obj start.o bios.o $1.o -lc >$1.map^M$
m68k-coff-objcopy -Osrec $1.obj $1.mot^M$
^Z
 
テキストエディタUnixフォーマット、改行コード=LFとして再編集しました
 
イメージ 2