組み込みTiki/Win32APIで動かすには
SuzTiki:組み込みTiki
ruby-box 作った目的のひとつに、CE マシンで Tiki を動かしたい
ってのがある。
そのためには、Win32API で動かないといけないだろう。
単なる移植以外に
- どうやって 開発環境を用意するか。
- GUI をどうするか。
という問題がある。
開発環境については、i386 の mingw でつくっておいて 後で なんとかする方針。
GUI はどうしようかなぁ。pbsdboot 程度で良い はずなんで、pbsdboot の
コードを見てみることにする。
あと、移植の問題として、socket や select どうするの? というのがあるが、
- winsock があり、UNIX と 関数レベルで互換のはず? あれ違ったかな?
- winsock って select もっていたはず
- stdin/out には効かないと思うけど。
そもそも、stdin/outは、なしでも良いはず。サーバだし。
メモ
- mplatsdk.exe (26MB) hpcprosdk.exe (77MB)
この2つ の違いはよくわからないのだが、Free で手にはいる、WinCE の SDK
(当然 VC++ が別途必要。) google とかで 上のキーワードで
サーチかけると 見付かる(はず)
- かなりまえだが、binutils/gcc を mips なんとかで configure して、
mplatsdk.exe からライブラリを取り出して、mingw の ヘッダファイルを
使って、アプリが作れた 覚えがある。
- でも、具体的な内容は、忘れてしまった。
- たしか wchar_t が gcc は 4バイト、WinCE は 2バイトってのが
いやになるぐらい致命的な問題だったように思う。
- 今回は、表示はどうでも良いし、stdin/outもどうでも良いから
意外といけるかも。
make のメモ
- binutils(2.11.2) は、configure --target=mips-wince-pe
で OK。
- これをインストールすると、/usr/local/mips-wince-pe/bin/as とか
と、/usr/local/bin/mips-wince-pe とかの 2 種類の名前でコマンドがインストール
される。
- gcc の make で、ar,ranlib とかは、
mips-wince-pe- のプレフィクスを付けてcall される ので後者のパスは通して
おく。ld と as は なにもしないと プレフィックスは付かない。
- gcc(3.0.4) は、
- configure --target=mips-wince-pe --with-gnu-as=asのパス
--with-gnu-ld=ldのパス が良いと思う。
- あと、--languages='c' とかもいれると良いかも。
- make LANGUAGES=cでいける?ので気にしなくても良い。
- ただし、mips-wince-pe は、mips-*-* とおなじ扱いをされる。
よくわからなかったが、mips-*-ecoff とおなじになるようにconfig.gcc を編集した。
- で、つぎに mips-tfile とかいうやつでひっかかる? make しないよう
にしただけ。後で少し困ることに。
- LIBGCC2 では、エラーで止まってたりする。limits.h とかいろいろ
ごまかした。
- ちゃんと対応できているのは、arm-wince-pe だけって気が ...
- 一応できても安心してはいけない。-G O -EL でコンパイルされないと
まずいし、-msoftfloat で コンパイルした方が良いはず。
(って WinCE って softfloat ? )
- CE SDK から取り出すライブラリは、winsock.lib,corelibc.lib, coredll.lib
だけで良さそう。
- ヘッダは、GNU のヘッダ windows32api-0.1.2 を使うのがよい。
-D_WINCE -DUNICODE -DMIPS を付けて __attribute__ なんとかするだけで OK。
なんとか コンパイルだけはできた。
次はリンク
テスト用のコードは make できた。そして、カシオペアにもっていくと ... 動。
とりあえず、開発環境はなんとかなった模様。
- 4 バイト/2バイト というのは、UNICODE 文字列の話であった。
コンパイラが面倒をみてくれないので、UNICODE 文字列は直接 書けない。
... MultiByteToWideChar で変換すれば良いのだが。
- 実は 上は、1 年以上前に確かめたことのトレース。Win32 用のプログラム
でさえもPortしないと動かないので、そこであきらめたのでした ...
メモ
- WinCE で ファイルを seek するのは SetFilePointer
- read/write は、ReadFile/WriteFile
- open は、CreateFile で、close は、SetEndOfFile -> CloseHandle?
- socket API と select は、全部 winsock.lib に揃っていた。
- なんだかいけそうな気配では。。
- できるかもっていう気はしてきました。ただ、gcc の環境作るのが凄く難しい。
binutils は 簡単にインストールできるんだけども ...
- ちなみに難しいのは、specs ファイル ... と libgcc.a の生成のところ。
cc1 自体は そうでもないんで、よくわからないながらも make は進みました。
- ちなみに、CYGWIN 対応というのは、あんまり考えてません。
おなじような API 変換を 2つ通すことになるんで ... 生の WIN32API を
扱うべきかなぁ と思っています。
(最終更新 Thu Mar 30 19:05:20 2006)