Linux上iOS的交叉编译¶
这个过程有点复杂,需要很多步骤,但是一旦您正确配置了环境,就可以随时随地为iOS编译godot了。
免责声明¶
虽然可以在Linux环境中为iOS编译,但苹果对要使用的工具(尤其是硬件方面)非常严格,几乎只允许将其产品用于开发。所以这是 不是官方的 . 然而,一个 statement from Apple in 2010 说他们放松了一些 App Store review guidelines 为了允许使用任何工具,只要生成的二进制文件不下载任何代码,这意味着可以使用这里描述的过程并交叉编译二进制文件。
要求¶
XCode with the iOS SDK (DMG图像)
Clang >= 3.5 为您安装的开发机器和
PATH
. 目标必须是大于等于3.5的版本arm64
架构。Fuse 用于安装和卸载DMG图像。
darling-dmg ,需要从源代码构建。其步骤如下所述。
为了构建darling dmg,您需要以下库的开发包:fuse、icu、openssl、zlib、bzip2。
cctools-port 用于所需的生成工具。建筑程序非常特殊,如下所述。
这也有一些额外的依赖:automake、autogen、libtool。
配置环境¶
亲爱的DMG¶
克隆计算机上的存储库:
$ git clone https://github.com/darlinghq/darling-dmg.git
建立它:
$ cd darling-dmg
$ mkdir build
$ cd build
$ cmake .. -DCMAKE_BUILD_TYPE=Release
$ make -j 4 # The number is the amount of cores your processor has, for faster build
$ cd ../..
准备SDK¶
安装xcode映像:
$ mkdir xcode
$ ./darling-dmg/build/darling-dmg /path/to/Xcode_7.1.1.dmg xcode
[...]
Everything looks OK, disk mounted
提取iOS SDK:
$ mkdir -p iPhoneSDK/iPhoneOS9.1.sdk
$ cp -r xcode/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/* iPhoneSDK/iPhoneOS9.1.sdk
$ cp -r xcode/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/* iPhoneSDK/iPhoneOS9.1.sdk/usr/include/c++
$ fusermount -u xcode # unmount the image
打包SDK:
$ cd iPhoneSDK
$ tar -cf - * | xz -9 -c - > iPhoneOS9.1.sdk.tar.xz
工具链¶
构建cctools:
$ git clone https://github.com/tpoechtrager/cctools-port.git
$ cd cctools-port/usage_examples/ios_toolchain
$ ./build.sh /path/iPhoneOS9.1.sdk.tar.xz arm64
把工具复制到更好的地方。请注意,用于构建的scons脚本将在 usr/bin
在为工具链二进制文件提供的目录中,必须复制到此类子目录,类似于以下命令:
$ mkdir -p /home/user/iostoolchain/usr
$ cp -r target/bin /home/user/iostoolchain/usr/
现在您应该有了iOS工具链二进制文件 /home/user/iostoolchain/usr/bin
.
为iPhone编译godot¶
完成上述步骤后,您应该在环境中保留两件事:构建的工具链和iphoneosdk目录。因为您必须提供指向scons build命令的路径,所以它们可以留在您想要的任何地方。
要检测iPhone平台,您需要 OSXCROSS_IOS
环境变量定义为任何内容。
$ export OSXCROSS_IOS=anything
现在,您可以使用标准godot方法这样的scon为iphone编译,并提供一些额外的参数来提供正确的路径:
$ scons -j 4 platform=iphone arch=arm target=release_debug IPHONESDK="/path/to/iPhoneSDK" IPHONEPATH="/path/to/iostoolchain" ios_triple="arm-apple-darwin11-"
$ scons -j 4 platform=iphone arch=arm64 target=release_debug IPHONESDK="/path/to/iPhoneSDK" IPHONEPATH="/path/to/iostoolchain" ios_triple="arm-apple-darwin11-"
产生脂肪二进制¶
苹果需要两种架构的脂肪二进制 (armv7
和 arm64
)在一个文件中。为此,请使用 arm-apple-darwin11-lipo
可执行。以下示例假定您位于根godot源目录中:
$ /path/to/iostoolchain/usr/bin/arm-apple-darwin11-lipo -create bin/godot.iphone.opt.debug.arm bin/godot.iphone.opt.debug.arm64 -output bin/godot.iphone.opt.debug.fat
然后你将有一个IOS的脂肪二进制输入 bin/godot.iphone.opt.debug.fat
.