2012年1月1日日曜日

PSPSDK

新年一発目の記事がこれとは情けない気がします
2010年の暮にもPSPの開発環境をビルドしてた気がします。
その時はCygwinでのビルドあきらめてこの記事で説明を書いたのですが。

今回はyreenさんがここで配布しているpatchでターゲットPSPのgcc-4.6.1をビルドしました




やりかたは以前に紹介したビルド方法と全く同じです。が、その前にyreenさんのサイトに従ってパッチを当てる必要があります。パッチを当てれば以前紹介した時と違ってスクリプトのURLを書き換える必要はありません。
yreenさんのサイトにあるようにいくつかのライブラリを事前に入れる必要があります。
Ubuntuだと説明通りapt-getを使えばいいのですが、Cygwinでビルドするのでapt-cygをインストールしておくと便利です

Cygwinそのもののインストールですが、gcc、g++、make、automake、wget、subversion、ncurses、doxygen、autoconf、mpfr、libgmp-devel、libmpfr-develを入れるようにしておきましょう

Cygwinのパッケージを全く追加せずにapt-cygをからインストールすると楽かもしれません

ここからが重要ですが、現行のCygwinは1.7.9でperlは5.10なので必ずビルドでこけます
しかしこのperlについて解説してるサイトは何処にもありません…
そのため、Cygwinをインストール後apt-cygも導入し、
$apt-cyg remove perl
を実行してperlを消してください。その後、ここからwgetかブラウザかで5.8.xのソースを入手してcygwin上でビルドしてしまいましょう。

ダウンロード後ファイルを解凍し、解凍したフォルダに移動
その後./Configureを実行してからmake installを行えばインストールできます
Configureのcは大文字であることに注意

Configureスクリプトは対話式で、幾つか質問されると思います。
ほとんどはデフォルトで構わないのでひたすらエンターキーを押しましょう

ただし次の二点に注意
●ライブラリーフォルダを聞かれたときは/lib/gcc/i686-pc-cygwin/4.5.3/を追加するようにしましょう。cygwin1.7.9をデフォルトの設定でインストールしているとgcc-4.5.3がインストールされてるはずですが、4.5.3の数字は適宜変更しましょう。
この時の質問はデフォルトのパスも入力しないと/lib/gcc/i686-pc-cygwin/4.5.3/以外のパスが消えてしまうので注意を
●CFLAGとCXXFLAGに-mno-stack-arg-probeオプションを追加しましょう。コレをしないと__chkstkでエラーが出るようになります

また、Cygwin上ではパッチを当てた後にpsptoolchainフォルダで以下のスクリプトを実行する必要があります
mv ./depends/check-ncurses.sh ./depends/check-ncurses.sh.bak
find ./scripts/*.sh -exec sed -i -e 's%ftp://ftp\.gnu\.org/pub/gnu%http://core\.ring\.gr\.jp/pub/GNU%g' {} \;
chmod 755 scripts/* depends/*
export WANT_AUTOMAKE=1.9

あとはsubversionでチェックアウトしたpsptoolchainフォルダで./toolchain.shを実行すれば全て自動で行われます。
Ubuntuの時と違い./toolchain-sudo.shではないので注意

psptoolchainのビルドはpsplinkusbのビルド時に必ずコケますがこれはWindows上だとしかたないので諦めてください。この時点ですでに必要なツールはすべて/usr/local/pspdevフォルダにインストールされています。
ただし、psptoolchain/build/psplinkusbフォルダに移動してmake releaseをするとreleaseフォルダとrelease_oeフォルダができます。これらを使えばpsplinkusbを活用してリモートデバッグをすることが可能になります。このmakeにはlibusbが入りますので別個インストールしてから行いましょう。

ついでにhttp://psp.jim.sh/svn/psp/trunk/psplibrariesをチェックアウトしてビルドするとSDLやogg、libpngといった便利なライブラリが追加されますので、やっておくといいと思います。
ライブラリのビルドはzziplibのビルドだけコケるので、次のコマンドをzziplibフォルダで行なって別にmakeする必要があります
sed -i 's/--export-dynamic/-export-dynamic/g'
./configure LDFLAGS="-L$(psp-config --pspsdk-path)/lib" LIBS="-lc -lpspuser" ./configure --host=psp --prefix=$(psp-config --psp-prefix)
make clean
make
make install
それとpsptoolchain/build/pspsdkフォルダに移動して
$make doxygen-doc
を実行することでリファレンスがpsptoolchain/build/pspsdk/docフォルダに生成されます


以上を行えばWindows上でもC++0xが使えるPSP開発環境が構築できます
ですが、面倒ですよね。
ここまで読んだ人には朗報です
一応、ビルド済の解凍するだけで使える環境をここに置きました。
USBメモリに入れて持ち運びも出来ます。
しかし、自分用にビルドしたものなので一切の文句は受け付けません
動かなくても怒らない、壊れても泣かない。
同梱のEclipseに最初から入ってるpspプロジェクトは署名付きのHello,world!のEBOOT.PBPを生成します
もしこのプロジェクトでNULLやらPSP_MODULE_INFOやらが未定義と言われたらインクルード文に#inludeを追加して一度コードを保存してまたインクルード文を消せ警告が消えるはずです
その他詳しい説明はreadme参照


おわりっ