ここではC言語で書かれたプログラムをLinux上でクロスコンパイルし
OSASK用の実行ファイルを生成する為の環境を構築する手順を説明します。
Solarisや*BSD等、他のUNIX系OSでも同様の手順で上手く行くと思いますが、
確かめてはいません。(おそらくgcc,make,patchあたりが使えれば大丈夫だと思います。)
クロスコンパイルに必要なものは make, cc1, gas2nask, nask, obj2bim3, bim2bin3
の6個のプログラムです。このうちmakeはLinuxに最初からインストールされている
ものを使えば良いのですが、他のものは以下の手順に従って揃えて下さい。
なお私の使った主なプログラムのバージョンは次の通りです。
以下の4個のファイルをダウンロードし、一つのディレクトリに置きます。
さらにlinux-patches0001.tar.gzを展開します。
gcc-3.2-20020817-1.src.tar.gz
http://sourceforge.net/projects/mingw/
go_0011s.lzh
http://www.imasy.org/~kawai/osask/developers.html
obj2bi3a.lzh
http://www.afis.to/~mone/osask/osask_ml/200102/msg00006.html
から、ベータ版ページに行って、そこからDL
linux-patches0001.tar.gz
このページの下の方の「添付」のところにあります。
introa11.lzhを例にとって説明します。
(introa11.lzh はhttp://www.imasy.org/~kawai/osask/developers.html にあります。)
最初から入っていたネイティブのcc1ではgas2naskと上手く連係が取れないようでした。
ですので、ソースから作ります。
$ tar xvzf gcc-3.2-20020817-1.src.tar.gz $ cd gcc-3.2-20020817-1 $ patch -p1 < ../gcc.patch $ touch gcc/config/i386/cygwin2.c $ cd .. $ mkdir gcc-build $ cd gcc-build $ ../gcc-3.2-20020817-1/configure --target=i386-pc-cygwin $ patch gcc/auto-host.h < ../auto-host.patch $ cd libiberty $ make libiberty.a $ cd ../gcc $ make cc1
これでcc1が出来ました。cc1のみ ~/osask/binなどに
コピーすれば残りは消してしまってOKです。
$ lha -e go_0011s.lzh gas2nask/gas2nask.c $ cd gas2nask $ patch < ../gas2nask.patch $ gcc -O2 -o gas2nask gas2nask.c
gas2naskのみ ~/osask/binなどにコピーすれば残りは消してしまってOKです。
$ lha -e go_0011s.lzh nask/{nask.c,ll.c,ll_lib.c,drv_w32/boot.c} $ cd nask $ patch -p1 < ../nask.patch $ gcc -O2 -o nask drv_w32/boot.c nask.c ll.c ll_lib.c
naskのみ ~/osask/binなどにコピーすれば残りは消してしまってOKです。
introa11.lzhを展開します。
$ lha -e obj2bi3a.lzh callmain.c obj2bim3.c bim2bin3.c $ gcc -O2 -o obj2bim3 callmain.c obj2bim3.c $ gcc -O2 -o bim2bin3 callmain.c bim2bin3.c
少しwarningが出るのは気にしない。
obj2bim3, bim2bin3を ~/osask/binなどにコピーすれば残りは消してしまってOKです。
makefile 内の SJISCONVのところを
/osask/binにPATHが通るようにして下さい。
以上でOSASKアプリの開発環境が整いました。
SJISCONV = ln
と置き換えます。(笑
makefile を Makefile にリネームします。
(何故その必要があるのかは、makefileの中を見れば分かります。)
$ make
でhelloc4.binが生成されます。
小柳さんのページ(http://homepage1.nifty.com/dreaming/osask/)から
「OSASK/AT ver.3.6 簡単おすすめパックの VMware 用 イメージ(osvmw36.lzh)」
をとってきて展開すると osask36.flpが出来ます。
VMWareの設定のfloppy deviceの所で
Type: File
Path: <osask36.flpのパス>
注:ここはhideyosiが書き加えたものです。
上記のwqさんの功績をチョッパリ!!←差別表現 (^^;)
ここまでのセットアップを完了済みのRPMを公開します。動作はVineLinux2.6で確認しています。
とします。
完成品 1.3MB
ソース 28MB(GCC入りなので、これはデカイ。やむなし!
specファイル 2Kb
バイナリは全て /usr/bin/ 以下に展開されます。さらに、introa11.lzh に含まれている helloc4.c を、/usr/share/osask-exapm に展開します。
導入した後は、例えば
~/$ cp -R /usr/share/osask-examp hello4 ~/$ cd hello4 ~/hello4/$ make
とかで、OSASKで稼動する hello4c.bin をコンパイルすることができます。
specファイルは物凄くテキトーです。「あらら?」と思った方は、私に断りなくガンガン編集してくださいませ。(もちろん間違いの指摘も大歓迎)
wqさんへ
こういったものを公開してみましたが、どうでしょう?。ライセンスや心情等々、問題や危惧がありましたら、是非、忌憚なきご意見をいただけましたら。
まずosask36.flpを適当なディレクトリにマウントしておきます。(スーパーユーザで)
# mkdir /mnt/osask # mount -o loop -o uid=wq osask36.flp /mnt/osask
マウントできたら次のようにします。
(helloc4.binを送りたいときの例)
$ cp helloc4.bin /mnt/osask $ sync OSASKのPOKONで[Shift]-[Insert]
syncはlinuxが遅延書き込みしていた分を実際に書き込ませます。
POKONで[Shift]-[Insert]とするとOSASKはフロッピィを再度読み直します。
OSASKを動かしている間 osask36.flpをマウントしっぱなしにするのは特に問題ないようです。
つまりMakefileの後ろに
cp $*.bin /mnt/osask sync
等と書いておくととても便利です。
~/test── nask ─┬─ nask.c │ │ │ ├─ ll.c │ │ │ ├─ ll_lib.c │ │ │ └─ drv_w32 ── boot.c │ include ─┬─ stdio.h ←─┬─ linux-patches0001.tar.gz内のもの └─ stdlib.h ←─┘