Tamarin Central の avmplus を VC++ 2005 でビルドする

最近、ビルドしてばっかりだけど、今度は avmplus をビルドしてみた。

基本、Tamarin Build Documentation - MDC に沿って。

Mercurial というバージョン管理ツールを使ってるらしいので、BinaryPackages - Mercurial から hg.exe を入手。

$ hg clone http://hg.mozilla.org/tamarin-central tamarin-central

ってやってしばらく待機。過去の履歴を全部落としてくるのが Mercurial の特徴なのかな。そこそこ時間がかかる。

zlib を手に入れといて、platform/win32/avmplus_8.sln を VC++2005 で開く。

ビルドしたら

error C2733: オーバーロードされた関数 '_interlockedbittestandset' の C リンケージの 2 回以上の宣言は許されません。
C:\Program Files\Microsoft Visual Studio 8\VC\include\intrin.h(944) : '_interlockedbittestandset' の宣言を確認してください。

というエラーが出たので検索してみたら、Windows SDK 6.0 の問題らしい(参考:Windows SDK for Windows Vistaとintrin.h - MSDN フォーラム)。

ってことで、avmplus.h の #include <intrin.h> をコメントアウトしたらうまくいった。Windows SDK 6.1 では解決してるのかも。

続いて、ErrorConstants.cpp で

warning C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。
error C2001: 定数が 2 行目に続いています。

が大量に出た。

各国語対応のメッセージを保持してるファイルらしい。そんなんどうでもいいので、

        LangName languageNames[kLanguages] =
        {
            { "en",     LANG_en },
            { "de",     LANG_de },
            { "es",     LANG_es },
            { "fr",     LANG_fr },
            { "it",     LANG_it },
            { "ja",     LANG_ja },
            { "ko",     LANG_ko },
            { "zh-CN",  LANG_zh_CN },
            { "zh-TW",  LANG_zh_TW },

        };

をシンプルに

        LangName languageNames[kLanguages] =
        {
            { "en",     LANG_en },
        };

と書き換えた。各国語のエラーメッセージを含む errorConstants も英語以外は削除しておいた。

こんだけいじったら、ビルドできましたよーっと。

(追記)