本篇為大家帶來MAME4iOS版編譯打包操作詳解
上一篇講了筆者編譯Andriod版MAME模擬器並打包運行的過程,這次分享一下iOS上的編譯打包過程。(廢話:文章上個月就寫好了,我居然一直沒點發布 ~_~ )
環境:
- Mac OS X 10.14.4
- Xcode 10.2.1
iOS分了越獄版和非越獄版,這里我們處理非越獄版,最終編譯出了armv7和arm64版本,x84_64的模擬器版本未編譯成功。(有一些ASM的錯誤未深究,反正在模擬器不方便玩耍,感興趣的同學可以試着修復一下,也歡迎找我一起探討)
文件已上git,見文末鏈接
首先
還是先編輯makefile,由於代碼比較老,需要做一些修正。原文件依然還是使用gcc編譯,整體下來沒有太大問題。就是警告比較多,代碼比較老,無法適應新編譯器嚴格的檢查可以理解。
問題:
1. 找不到<tr1/type_traits>,這個貌似xcode4.5以后目錄就變了(參考https://stackoverflow.com/questions/13219007/xcode-4-5-tr1-type-traits-file-not-found/44594624#44594624),改為#include <type_traits>后續還會報錯,找不到命名空間tr1。遂修改了state.h中的代碼,加入條件編譯宏,在iOS下直接std::is_arithmetic,省略tr1的名字空間。
2. 由於代碼編寫時間比較早,可能是11、12年甚至更所以需要使用MRC,如果你的xcode默認使用了ARC需要改回來,這點注意一下。
3. 這里我改用了clang來編譯,原代碼可能是基於gnu的特性寫的,編譯起來警告那是相當的多啊(不過基本都是相同的“'this' pointer cannot be null in well-defined C++ code”警告)。
3. xcode鏈接時報一堆錯,Undefined symbol: _myosd_res_width ...... 。經對比Android發現osd-ios中未聲名缺失的變量,但實際引擎是引用了的(可能是我clone的代碼版本不對吧)。對照錯誤一一補回去,你會編譯成功,編譯成功,但警告可謂是鋪天蓋地,這可能是由於新版本的編譯器檢查更加嚴格吧。
4. 運行起來后,會發現UI一團亂。主要工作也在這兒,周末斷斷續續弄了2天,開始是修改配置文件config_iPhone_5,后來發現太麻煩了,要去理解每一個配置的含義,雖然這確實有助於讀代碼理解其中邏輯。但太費事,要改的太多了。最終想到其實iPhone之后的設備屏幕比例幾乎圍繞着16:9,所以直接修改配置讀取處換算為當前設備的坐標。
5. 適配完屏幕后又發現這個A\B\X\Y Stick位置發生偏移,需要編輯controller_portrait_iPhone_5調整位置。最終在iPhone6及iPhone6Plus上完美適配(原諒我沒有糞叉Max,運行效果暫不清楚)。

--圖1

--圖2
使用方法:
將你的游戲rom以zip格式,放入iTunes的設備文件共享中
*rom需要是zip格式

最后
說一下makefile的編譯配置吧,一次只能編譯一個平台的一種架構
Android: 放開ANDROID=1和AARMV7/V8
iOS: 如圖放開iOS, iOSOSX, iOSNOJAILBREAK, iOSARM64/V7
iOSOSX:表示是在MACOSX電腦上編譯,如果沒有那需要配置*Linux的相關參數
iOSNOJAILBREAK::編譯非越獄版,如果不定義則編譯越獄版

至此,We完成了讓舊代碼重新奔跑起來並煥發活力的任務 ~(0_0).
