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-"

产生脂肪二进制

苹果需要两种架构的脂肪二进制 (armv7arm64 )在一个文件中。为此,请使用 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 .