X68000エミュレータPX68KをiOSに移植する(準備編その1)
おぉ、一か月以上間があいて広告が追加されていますが、こんばんは。
twitterではちょこちょこと作業報告していましたが、iPhoneやiPad等、iOSデバイス向けにX68Kエミュのpx68kを移植しています。
現状Mac OS Xで動作するiOSシミュレータ上でpx68kが動作するところまで作業は完了しています。
その後、実機で動作させるのはどうするんだっけ?とか、
あー、ここまでの作業内容を記録しておかないとまた忘れるな、でもドキュメント書き面倒くさいなーとか、
考えているうちに二週間ほど過ぎてしまいました。
とりあえず忘れないうちに、今回と次回は作業メモです。
■SDLライブラリを作成する
px68kはSDL(Simple DirectMedia Layer)というライブラリを利用し、さまざまなデバイスへ移植しやすいエミュレータを目指しています。
今回は、このSDLライブラリをiOS向けにビルドする手順を説明していきます。
なお、Mac OS X 10.9 (Mavericks)、Xcode 5.0.2 を使用しています。
■SDLのソース入手
http://www.libsdl.org/download-2.0.php よりSDL2のソースアーカイブを取得します。
今回使ったのはSDL2-2.0.1.tar.gz
これを展開します。
今回は~/src/に展開しました。
twitterではちょこちょこと作業報告していましたが、iPhoneやiPad等、iOSデバイス向けにX68Kエミュのpx68kを移植しています。
現状Mac OS Xで動作するiOSシミュレータ上でpx68kが動作するところまで作業は完了しています。
その後、実機で動作させるのはどうするんだっけ?とか、
あー、ここまでの作業内容を記録しておかないとまた忘れるな、でもドキュメント書き面倒くさいなーとか、
考えているうちに二週間ほど過ぎてしまいました。
とりあえず忘れないうちに、今回と次回は作業メモです。
■SDLライブラリを作成する
px68kはSDL(Simple DirectMedia Layer)というライブラリを利用し、さまざまなデバイスへ移植しやすいエミュレータを目指しています。
今回は、このSDLライブラリをiOS向けにビルドする手順を説明していきます。
なお、Mac OS X 10.9 (Mavericks)、Xcode 5.0.2 を使用しています。
■SDLのソース入手
http://www.libsdl.org/download-2.0.php よりSDL2のソースアーカイブを取得します。
今回使ったのはSDL2-2.0.1.tar.gz
これを展開します。
今回は~/src/に展開しました。
■SDLプロジェクトをXcodeで開く
Finderで~/src/SDL2-2.0.1/Xcode-iOS/SDL/SDL.xcodeprojをダブルクリックしてXcodeを起動します。
Xcodeがインデックス作成などが終わり、落ち着くのを待ちます。以下の様にReadyとかになっていれば大丈夫そう。

SDL:Ready の欄の右端のビックリマークをクリックすると、左側のツリーに「Validate Project Settings」とか出て、気になるのでクリックしてみます。

Architectureの選別に関するBuild Settingの変更を勧められるので、よく分からないが「Perform Changes」をクリックします。
■ターゲットにするiOSバージョンの選択
hissoriiの手持ちのiPod touch 4Gが6.1.3なので、iOS Deployment Targetは6.1にしておきます。

[Product]->[Scheme]はlibSDLがチェックされていることを確認しておきます。

■実機デバイス向け、iOSシミュ向け、二つのライブラリの作成
ここから、実際にSDLのスタティックリンクライブラリを作成しますが、欲しいものは以下の二つです。
・armプロセッサ用にコンパイルされた、実機デバイス向けのライブラリ
・x86プロセッサ用にコンパイルされた、iOSシミュレータ向けのライブラリ
また、ビルドの仕方としては、DebugとReleaseがあるようです。
Debugビルドでは、ソースコードデバッグ用のコンパイルがされたり、コンパイル時の警告が出やすくなるのでしょう。
arm/x86、Debug/Releaseの組み合わせで4つのビルドパターンが考えられますが、
実機向けとしてarm/Release、iOSシミュ向けとしてx86/Debugの二つの組み合わせでビルドしたいと思います。
■実機デバイス向けライブラリ作成
まずは、実機向けのライブラリを作成します。
[Product]->[Destination]はiOS Deviceをチェック。

[Product]->[Build]を選択すると
~/Library/Developer/Xcode/DerivedData/SDL-bydmekuazgquqgarccdpapcovtbe/Build/Products/Debug-iphoneos/libSDL2.a
が生成されました。
[Product]->[Archive]を選択すると
~/Library/Developer/Xcode/DerivedData/SDL-bydmekuazgquqgarccdpapcovtbe/Build/Intermediates/ArchiveIntermediates/libSDL/BuildProductsPath/Release-iphoneos/libSDL2.a (実際にはシンボリックリンク)が生成されました。
今回はarm/Releaseが欲しいので、以下のライブラリを使用します。
~/Library/Developer/Xcode/DerivedData/SDL-bydmekuazgquqgarccdpapcovtbe/Build/Intermediates/ArchiveIntermediates/libSDL/BuildProductsPath/Release-iphoneos/libSDL2.a
ちなみに、[Product]->[Build]を選ぶとDebugビルドになり、[Product]->[Archive]を選ぶとReleaseビルドになりますが、
[Product]->[Scheme]->[Edit Scheme...]を選択すると、[Build]時や[Archive]時に何を実行するかを設定できるようです。

■iOSシミュレータ向けライブラリ作成
次に、iOSシミュレータ用のライブラリを作成します。[Product]->[Destination]-> iOS Simulatorの[iPhone Retina (3.5-inch)] を選択します。
とりあえず上記デバイスを選びましたが、どれを選んでも大丈夫だと思います。
デバッグ用ビルドをしたいので、[Product]->[Build]を選択します。
以下にiOSシミュ向けのlibSDL2.aが作成されました。
以上で、実機向け、iOSシミュ向けの二つのSDLライブラリ libSDL2.a が作成できました。
これらはpx68k本体のビルド時にリンクされます。
次回は、px68k本体のXcodeプロジェクトを作成し、iOSシミュレータ上で動かすまでの手順を追っていきます。
Finderで~/src/SDL2-2.0.1/Xcode-iOS/SDL/SDL.xcodeprojをダブルクリックしてXcodeを起動します。
Xcodeがインデックス作成などが終わり、落ち着くのを待ちます。以下の様にReadyとかになっていれば大丈夫そう。

SDL:Ready の欄の右端のビックリマークをクリックすると、左側のツリーに「Validate Project Settings」とか出て、気になるのでクリックしてみます。

Architectureの選別に関するBuild Settingの変更を勧められるので、よく分からないが「Perform Changes」をクリックします。
■ターゲットにするiOSバージョンの選択
hissoriiの手持ちのiPod touch 4Gが6.1.3なので、iOS Deployment Targetは6.1にしておきます。

[Product]->[Scheme]はlibSDLがチェックされていることを確認しておきます。

■実機デバイス向け、iOSシミュ向け、二つのライブラリの作成
ここから、実際にSDLのスタティックリンクライブラリを作成しますが、欲しいものは以下の二つです。
・armプロセッサ用にコンパイルされた、実機デバイス向けのライブラリ
・x86プロセッサ用にコンパイルされた、iOSシミュレータ向けのライブラリ
また、ビルドの仕方としては、DebugとReleaseがあるようです。
Debugビルドでは、ソースコードデバッグ用のコンパイルがされたり、コンパイル時の警告が出やすくなるのでしょう。
arm/x86、Debug/Releaseの組み合わせで4つのビルドパターンが考えられますが、
実機向けとしてarm/Release、iOSシミュ向けとしてx86/Debugの二つの組み合わせでビルドしたいと思います。
■実機デバイス向けライブラリ作成
まずは、実機向けのライブラリを作成します。
[Product]->[Destination]はiOS Deviceをチェック。

[Product]->[Build]を選択すると
~/Library/Developer/Xcode/DerivedData/SDL-bydmekuazgquqgarccdpapcovtbe/Build/Products/Debug-iphoneos/libSDL2.a
が生成されました。
hissoriis-Mac:~ hissorii$ find . -name "libSDL2.a" -ls | grep Debug
569373 6032 -rw-r--r-- 1 hissorii staff 3086200 Nov 27 15:00 ./Library/Developer/Xcode/DerivedData/SDL-bydmekuazgquqgarccdpapcovtbe/Build/Intermediates/SDL.build/Debug-iphoneos/libSDL.build/Objects-normal/armv7/libSDL2.a
569374 6064 -rw-r--r-- 1 hissorii staff 3100952 Nov 27 15:00 ./Library/Developer/Xcode/DerivedData/SDL-bydmekuazgquqgarccdpapcovtbe/Build/Intermediates/SDL.build/Debug-iphoneos/libSDL.build/Objects-normal/armv7s/libSDL2.a
569376 12088 -rw-r--r-- 1 hissorii staff 6187200 Nov 27 15:00 ./Library/Developer/Xcode/DerivedData/SDL-bydmekuazgquqgarccdpapcovtbe/Build/Products/Debug-iphoneos/libSDL2.a
hissoriis-Mac:~ hissorii$
[Product]->[Archive]を選択すると
~/Library/Developer/Xcode/DerivedData/SDL-bydmekuazgquqgarccdpapcovtbe/Build/Intermediates/ArchiveIntermediates/libSDL/BuildProductsPath/Release-iphoneos/libSDL2.a (実際にはシンボリックリンク)が生成されました。
hissoriis-Mac:~ hissorii$ find . -name "libSDL2.a" -ls | grep -v Debug
569419 8 lrwxr-xr-x 1 hissorii staff 189 Nov 27 15:05 ./Library/Developer/Xcode/DerivedData/SDL-bydmekuazgquqgarccdpapcovtbe/Build/Intermediates/ArchiveIntermediates/libSDL/BuildProductsPath/Release-iphoneos/libSDL2.a -> /Users/hissorii/Library/Developer/Xcode/DerivedData/SDL-bydmekuazgquqgarccdpapcovtbe/Build/Intermediates/ArchiveIntermediates/libSDL/IntermediateBuildFilesPath/UninstalledProducts/libSDL2.a
569987 6864 -rw-r--r-- 1 hissorii staff 3511512 Nov 27 15:06 ./Library/Developer/Xcode/DerivedData/SDL-bydmekuazgquqgarccdpapcovtbe/Build/Intermediates/ArchiveIntermediates/libSDL/IntermediateBuildFilesPath/SDL.build/Release-iphoneos/libSDL.build/Objects-normal/armv7/libSDL2.a
569988 6864 -rw-r--r-- 1 hissorii staff 3512784 Nov 27 15:06 ./Library/Developer/Xcode/DerivedData/SDL-bydmekuazgquqgarccdpapcovtbe/Build/Intermediates/ArchiveIntermediates/libSDL/IntermediateBuildFilesPath/SDL.build/Release-iphoneos/libSDL.build/Objects-normal/armv7s/libSDL2.a
570359 3072 -rw-r--r-- 1 hissorii staff 1572288 Nov 27 15:06 ./Library/Developer/Xcode/DerivedData/SDL-bydmekuazgquqgarccdpapcovtbe/Build/Intermediates/ArchiveIntermediates/libSDL/IntermediateBuildFilesPath/UninstalledProducts/libSDL2.a
hissoriis-Mac:~ hissorii$
今回はarm/Releaseが欲しいので、以下のライブラリを使用します。
~/Library/Developer/Xcode/DerivedData/SDL-bydmekuazgquqgarccdpapcovtbe/Build/Intermediates/ArchiveIntermediates/libSDL/BuildProductsPath/Release-iphoneos/libSDL2.a
ちなみに、[Product]->[Build]を選ぶとDebugビルドになり、[Product]->[Archive]を選ぶとReleaseビルドになりますが、
[Product]->[Scheme]->[Edit Scheme...]を選択すると、[Build]時や[Archive]時に何を実行するかを設定できるようです。

■iOSシミュレータ向けライブラリ作成
次に、iOSシミュレータ用のライブラリを作成します。[Product]->[Destination]-> iOS Simulatorの[iPhone Retina (3.5-inch)] を選択します。
とりあえず上記デバイスを選びましたが、どれを選んでも大丈夫だと思います。
デバッグ用ビルドをしたいので、[Product]->[Build]を選択します。
以下にiOSシミュ向けのlibSDL2.aが作成されました。
hissoriis-Mac:~ hissorii$ find . -name "libSDL2.a" -ls | grep simulator
572387 6664 -rw-r--r-- 1 hissorii staff 3410152 Nov 27 15:36 ./Library/Developer/Xcode/DerivedData/SDL-bydmekuazgquqgarccdpapcovtbe/Build/Products/Debug-iphonesimulator/libSDL2.a
hissoriis-Mac:~ hissorii$
以上で、実機向け、iOSシミュ向けの二つのSDLライブラリ libSDL2.a が作成できました。
これらはpx68k本体のビルド時にリンクされます。
次回は、px68k本体のXcodeプロジェクトを作成し、iOSシミュレータ上で動かすまでの手順を追っていきます。
Comment
[276]
コメントの投稿
Trackback
http://hissorii.blog45.fc2.com/tb.php/240-a0ec8e45
元気で何よりです。
マウスが実装する日を気長に待つています。