Compilación cruzada pra IOS en Linux¶
El procedimiento para esto es algo complejo y requiere muchos pasos, pero una vez que tengas el entorno configurado correctamente, será fácil compilar Godot para iOS cada vez que lo desees.
Descargo de responsabilidad¶
Aunque es posible compilar para iOS en un entorno Linux, Apple es muy restrictivo con las herramientas que se pueden utilizar (especialmente en términos de hardware), permitiendo prácticamente solo el uso de sus productos para el desarrollo. Por lo tanto, esto no es oficial. Sin embargo, un comunicado de Apple en 2010 dice que relajaron algunas de las pautas de revisión de la App Store para permitir el uso de cualquier herramienta, siempre que el binario resultante no descargue ningún código, lo que significa que debería estar permitido utilizar el procedimiento descrito aquí y la compilación cruzada del binario.
Requerimientos¶
XCode con el iOS SDK (una imagen dmg)
Clang >= 3.5 debe estar instalado en tu máquina de desarrollo y disponible en la variable de entorno
PATH
. Debe ser una versión >= 3.5 para poder apuntar a la arquitecturaarm64
.Fuse para montar y desmontar la imagen dmg.
darling-dmg, el cual debe ser construido desde el código fuente. El procedimiento para hacerlo se explica a continuación.
Para compilar darling-dmg, necesitarás los paquetes de desarrollo de las siguientes bibliotecas: fuse, icu, openssl, zlib, bzip2.
cctools-port para las herramientas de construcción necesarias. El procedimiento de construcción es bastante particular y se describe a continuación.
Esto también tiene algunas dependencias adicionales: automake, autogen, libtool.
Configurando el entorno¶
darling-dmg¶
Clona el repositorio en tu máquina:
$ git clone https://github.com/darlinghq/darling-dmg.git
Compilalo:
$ 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 ../..
Preparando el SDK¶
Montando la Imagen XCode:
$ mkdir xcode
$ ./darling-dmg/build/darling-dmg /path/to/Xcode_7.1.1.dmg xcode
[...]
Everything looks OK, disk mounted
Extrayendo el SDK de 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
Enpaqueta el SDK:
$ cd iPhoneSDK
$ tar -cf - * | xz -9 -c - > iPhoneOS9.1.sdk.tar.xz
Cadena de herramientas¶
Compila los 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
Copia las herramientas a un lugar más organizado. Ten en cuenta que los scripts de SCons para la construcción buscarán dentro de usr/bin
en el directorio que proporciones para los binarios del conjunto de herramientas, por lo que debes copiar a un subdirectorio de esa forma, similar a los siguientes comandos:
$ mkdir -p /home/user/iostoolchain/usr
$ cp -r target/bin /home/user/iostoolchain/usr/
Ahora deberías tener los binarios del conjunto de herramientas para iOS en /home/user/iostoolchain/usr/bin
.
Compilando Godot para iPhone¶
Una vez que hayas realizado los pasos anteriores, debes mantener dos cosas en tu entorno: el conjunto de herramientas construido y el directorio del SDK de iPhoneOS. Puedes ubicarlos donde desees, ya que deberás proporcionar las rutas de estos al comando de construcción de SCons.
Para que se detecte la plataforma de iPhone, es necesario que la variable de entorno OSXCROSS_IOS
esté definida como cualquier valor.
$ export OSXCROSS_IOS=anything
Ahora puedes compilar para iPhone utilizando SCons de la misma manera que lo haces para Godot estándar, pero con algunos argumentos adicionales para proporcionar las rutas correctas:
$ 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-"
Produciendo binarios universales¶
Apple requiere un binario universal con ambas arquitecturas (armv7
y arm64
) en un solo archivo. Para lograr esto, utiliza el ejecutable arm-apple-darwin11-lipo
. El siguiente ejemplo asume que estás en el directorio raíz del código fuente 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
Entonces tendrás los binarios universales de iOS en el directorio bin
.