完美编译街机模拟器MAME iOS版

本篇为大家带来MAME4iOS版编译打包操作详解

上一篇讲了笔者编译Andriod版MAME模拟器并打包运行的过程,这次分享一下iOS上的编译打包过程。(废话:文章上个月就写好了,我居然一直没点发布 ~_~ )

环境:

  1. Mac OS X 10.14.4
  2. 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格式

itunes

 

 

最后

  说一下makefile的编译配置吧,一次只能编译一个平台的一种架构

  Android: 放开ANDROID=1和AARMV7/V8

  iOS: 如图放开iOS, iOSOSX, iOSNOJAILBREAK, iOSARM64/V7

    iOSOSX:表示是在MACOSX电脑上编译,如果没有那需要配置*Linux的相关参数

    iOSNOJAILBREAK::编译非越狱版,如果不定义则编译越狱版

  


至此,We完成了让旧代码重新奔跑起来并焕发活力的任务 ~(0_0).

 


 附:Github工程链接

 

posted @ 2020-03-22 14:28  Coding&Life  阅读(4630)  评论(0编辑  收藏  举报