Linux上のiOS用のクロスコンパイル

この手順は多少複雑で多くのステップを必要としますが、一度環境を適切に設定すれば、いつでも好きな時にiOS用のGodotをコンパイルすることが容易になります。

免責事項

Linux環境でiOS用にコンパイルすることは可能ですが、Appleは使用するツールに非常に制限をかけており(特にハードウェア的に)、開発にはほとんど自社の製品しか使用できません。ですので、これは公式ではありません。しかし、2010年にAppleが出した声明によると、App Storeのレビューガイドラインの一部を緩和し、コードをダウンロードしない限り、あらゆるツールを使えるようにしたとのことです。つまり、ここで説明する手順を使用してバイナリをクロスコンパイルしてもかまいません。

必要条件

  • XCode with the iOS SDK(dmgイメージ)
  • Clang >= 3.5 がインストールされ、 PATH にインストールされている開発マシン用。。arm64 アーキテクチャをターゲットにするには、バージョンが 3.5 以降である必要があります。
  • dmgイメージをマウントおよびアンマウントするには、`Fuse <https://github.com/libfuse/libfuse>`_を使用します。
  • darling-dmg 、 ソースから構築する必要があります。そのための手順を以下に説明します。
    • 「darling-dmg」を構築するには、fuse、icu、openssl、zlib、bzip2というライブラリの開発パッケージが必要です。
  • cctools-port 必要なビルドツール。ビルドの手順は非常に独特であり、以下に説明します。
    • これには、automake、autogen、libtoolなどの追加の依存関係もあります。

環境のコンフィグ

darling-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用ゴドットのコンパイル

上記のステップを完了したら、ビルドされたツールチェーンとiPhoneOS SDKディレクトリーという2つのものを環境に残しておく必要があります。これらはSConsのbuildコマンドにパスを指定する必要があるため、任意の場所に置くことができます。

iPhoneプラットフォームを検出するには、 OSXCROSS_IOS 環境変数を何かに定義する必要があります。

$ export OSXCROSS_IOS=anything

これで、標準的なGodotの方法のようにSConsを使って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-"

ファットバイナリの生成

Appleでは、1 つのファイルに両方のアーキテクチャ ( armv7 及び arm64 ) を含むファットバイナリを必要とします。これを行うには、 arm-apple-darwin11-lipo 実行可能ファイルを使用します。次の例では、ルートGodotソースディレクトリに入っていると仮定します:

$ /path/to/iostoolchain/usr/bin/arm-apple-darwin11-lipo -create bin/libgodot.iphone.opt.debug.arm.a bin/libgodot.iphone.opt.debug.arm64.a -output bin/libgodot.iphone.debug.fat.a
$ /path/to/iostoolchain/usr/bin/arm-apple-darwin11-lipo -create bin/libgodot_camera_module.iphone.opt.debug.arm.a bin/libgodot_camera_module.iphone.opt.debug.arm64.a -output bin/libgodot_camera_module.iphone.debug.fat.a
$ /path/to/iostoolchain/usr/bin/arm-apple-darwin11-lipo -create bin/libgodot_arkit_module.iphone.opt.debug.arm.a bin/libgodot_arkit_module.iphone.opt.debug.arm64.a -output bin/libgodot_arkit_module.iphone.debug.fat.a

次に、bin にiOSのファットバイナリがあります。