Кросс-компиляция для iOS на Linux
Процедура для этого довольно сложная и требует множества шагов, но как только вы правильно настроите среду, вы сможете скомпилировать Godot для iOS в любое время.
Отказ от ответственности
Хотя компиляция для iOS в среде Linux возможна, Apple накладывает очень строгие ограничения на используемые инструменты (особенно в плане оборудования), позволяя использовать для разработки практически только свои продукты. Так что это неофициально. Однако в 2010 году Apple заявила, что смягчила некоторые правила проверки в App Store, разрешив использование любых инструментов, при условии, что полученный двоичный файл не загружает никакого кода. Это означает, что можно использовать описанную здесь процедуру и кросс-компилировать двоичный файл.
Требования
XCode с iOS SDK (для загрузки Xcode необходимо войти в учетную запись Apple ID).
Clang >= 3.5 для вашей машины разработки установлен и прописан в
PATH. Для архитектурыarm64версия должна быть >= 3.5.xar и pbzx (требуются для извлечения архива
.xip, входящего в комплект Xcode).Для сборки xar и pbzx вы можете следовать этому руководству.
cctools-port для необходимых инструментов сборки. Процедура сборки довольно необычна и описана ниже.
Также есть некоторые дополнительные зависимости: automake, autogen, libtool.
Настройка среды
Подготовка SDK
Извлеките файл Xcode .xip, загруженный с сайта разработчиков Apple:
mkdir xcode
xar -xf /path/to/Xcode_X.x.xip -C xcode
pbzx -n Content | cpio -i
[...]
######### Blocks
Обратите внимание, что в приведенных ниже командах вам нужно заменить версию (x.x) на используемую вами версию iOS SDK. Если вы не знаете версию вашего iPhone SDK, вы можете найти JSON-файл в папке Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs.
Распакуйте IOS SDK:
export IOS_SDK_VERSION="x.x"
mkdir -p iPhoneSDK/iPhoneOS${IOS_SDK_VERSION}.sdk
cp -r xcode/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/* iPhoneSDK/iPhoneOS${IOS_SDK_VERSION}.sdk
cp -r xcode/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/* iPhoneSDK/iPhoneOS${IOS_SDK_VERSION}.sdk/usr/include/c++
fusermount -u xcode
Упакуйте SDK, чтобы cctools мог его использовать:
cd iPhoneSDK
tar -cf - * | xz -9 -c - > iPhoneOS${IOS_SDK_VERSION}.sdk.tar.xz
Инструментарий
Соберите cctools:
git clone https://github.com/tpoechtrager/cctools-port.git
cd cctools-port/usage_examples/ios_toolchain
./build.sh /path/iPhoneOS${IOS_SDK_VERSION}.sdk.tar.xz arm64
Скопируйте инструменты в более удобное место. Обратите внимание, что скрипты SCons для сборки будут искать их в usr/bin внутри каталога, который вы указали для исполняемых файлов набора инструментов, поэтому вам необходимо скопировать их в этот подкаталог, аналогично следующим командам:
mkdir -p "$HOME/iostoolchain/usr"
cp -r target/bin "$HOME/iostoolchain/usr/"
Теперь у вас должны быть двоичные файлы iOS toolchain в $HOME/iostoolchain/usr/bin.
Компиляция Godot для iPhone
После выполнения вышеперечисленных шагов вам необходимо сохранить в своей среде два элемента: собранный набор инструментов и каталог iPhoneOS SDK. Они могут располагаться где угодно, поскольку вам необходимо указать пути к ним в команде сборки SCons.
Для определения платформы iPhone необходимо, чтобы переменная среды OSXCROSS_IOS была определена как что-то конкретное.
export OSXCROSS_IOS="anything"
Теперь вы можете выполнить компиляцию для iPhone с использованием SCons, как стандартным способом Godot, с некоторыми дополнительными аргументами для указания правильных путей:
scons platform=ios arch=arm64 target=template_release IOS_SDK_PATH="/path/to/iPhoneSDK" IOS_TOOLCHAIN_PATH="/path/to/iostoolchain" ios_triple="arm-apple-darwin11-"