色々やる事が多くて忘れてしまいそうなので、とりあえず書きます。cygwin で squeak VM をコンパイルする方法。その前に但し書きですが、本来ならばもうちょっと纏めてパッチとして投稿するとかすべきだとは思います。1) まだ再現性のある形ではない。2) cygwin と mingw 共用できる Makefile が書けそうで書けてない。という事でメモだけです。
cygwin でコンパイルするとはどういうことでしょうか? 本来、cygwin は Windows 上のunix エミュレータのように使います。パス名の書き方も強引に unix 風にしてしまいますし、バイナリの実行には gnu ライセンスのランタイムが必要になります。これでは配布できる VM がコンパイルで出来ないので、cygwin 上で独立したバイナリを生成するように mingw という別のプロジェクトの成果物をリンク時に利用します。純粋な mingw というシステムがあるのですが、利点を比較すると、cygwin でやったほうが大島さんのコメントにあるように他の cygwin ツールと共用しやすい点があります。
で、理想としては、cygwin 上で mingw ライブラリをリンクするための --mno-cygwin というオプションを付けるだけで良いという物ですが、以下の引っ掛けがありました。
は より前にインクルードする必要がある。
これは全くもって意味不明ですが、後にインクルードしてしまうと、必要な定数の幾つか(それも5つほどだけ)が未定義になってしまいます。
- アセンブラコードはきっちり書かないと行けない。
これは、逆になんで現状のままで mingw でコンパイル出来ているのか分かりませんが、文字列を続けるときにはちゃんと行末を \ で終端させて、ニーモニックの最後にはセミコロンを書かないといけません。
- float.h はフルパスで指定しないといけない。
これも全くもって意味不明ですが、
- #define VM_PROXY_MINOR 5
この定数の意味が良く分からないのですが、6だとコンパイル出来ませんでした。
今ちょっと問題なのは、cygwin 時に定義される __CYGWIN__ が、-mno-cygwin モードで定義されないという事がありまして、だからどうやったら cygwin とmingw で共用できる Makefile (とソース) が書けるのか見当つきません。誰か知らない?