Compilation croisée pour iOS sur Linux

La procédure pour cela est quelque peu complexe et nécessite de nombreuses étapes, mais une fois que vous aurez correctement configuré l'environnement, il sera facile de compiler Godot pour iOS à tout moment.

Avertissement

Bien qu'il soit possible de compiler pour iOS dans un environnement Linux, Apple est très restrictif quant aux outils à utiliser (surtout sur le plan hardware), ne permettant pratiquement que l'utilisation de ses produits pour le développement. Ce n'est donc pas officiel. Cependant, une déclaration d'Apple en 2010 dit qu'ils ont assoupli certaines des directives de révision de l'App Store pour permettre à n'importe quel outil d'être utilisé, tant que le binaire résultant ne télécharge pas de code, ce qui signifie qu'il devrait être OK d'utiliser la procédure décrite ici et la compilation croisée du binaire.

Pré-requis

  • XCode avec le SDK iOS (une image dmg)
  • Clang >= 3.5 pour votre machine de développement installée et dans le PATH. Il doit être de version >= 3.5 pour cibler l'architecture arm64.
  • Fuse pour le montage et le démontage de l'image dmg.
  • darling-dmg, qui doit être construit à partir des sources. La procédure pour cela est expliquée ci-dessous.
    • Pour construire darling-dmg, vous aurez besoin des paquets de développement des bibliothèques suivantes : fuse, icu, openssl, zlib, bzip2.
  • cctools-port pour les outils de construction nécessaires. La procédure de construction est assez particulière et est décrite ci-dessous.
    • Cela a également des dépendances supplémentaires : automake, autogen, libtool.

Configurer l'environnement

darling-dmg

Clonez le dépôt sur votre machine :

$ git clone https://github.com/darlinghq/darling-dmg.git

Construisez-le :

$ 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 ../..

Préparation du SDK

Montez l'image XCode :

$ mkdir xcode
$ ./darling-dmg/build/darling-dmg /path/to/Xcode_7.1.1.dmg xcode
[...]
Everything looks OK, disk mounted

Extraire le SDK iOS :

$ 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

Empaquetez le SDK :

$ cd iPhoneSDK
$ tar -cf - * | xz -9 -c - > iPhoneOS9.1.sdk.tar.xz

Toolchain

Construire 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

Copiez les outils à un endroit plus approprié. Notez que les scripts SCons pour la construction regarderont à l'intérieur du répertoire usr/bin pour vous fournir les binaires de la chaîne d'outils, vous devez donc copier dans ce sous-répertoire, comme pour les commandes suivantes :

$ mkdir -p /home/user/iostoolchain/usr
$ cp -r target/bin /home/user/iostoolchain/usr/

Maintenant vous devez avoir les binaires de la chaîne d'outils iOS dans /home/user/iostoolchain/usr/bin.

Compilation de Godot pour iPhone

Une fois que vous avez effectué les étapes ci-dessous, vous devez conserver deux choses dans votre environnement : la chaîne d'outils construite et le répertoire SDK pour iPhoneOS. Ceux-ci peuvent rester n'importe-où ou vous voulez car vous devez fournir leurs chemins à la commande de construction SCons.

Pour que la plate-forme iPhone soit détectée, vous avez besoin de la variable d'environnement OSXCROSS_IOS définie à n'importe quoi.

$ export OSXCROSS_IOS=anything

Vous pouvez maintenant compiler pour iPhone en utilisant SCons comme la méthode standard de Godot, avec quelques arguments supplémentaires pour fournir les chemins corrects :

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

Production de gros binaires

Apple nécessite un gros binaire avec deux architectures (armv7 and arm64) dans un fichier unique. Pour faire ça, utilisez l'exécutable arm-apple-darwin11-lipo. L'exemple suivant suppose que vous soyez dans le répertoire racine de la source de 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

Ensuite, vous devez avoir le gros binaires iOS dans le répertoire bin.