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'architecturearm64
.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
.