Сборка Doom 2D: Forever под OS X. Часть 2 - Кросс-компиляция под Linux'омПришло время для второй части, в которой я рассмотрю кросс-компиляцию игры. Процесс будет немного более сложным, так как предварительно потребуется собрать кросс-компилятор и тулчейн. Все действия я буду производить на Arch Linux.
Для начала нам нужно собрать кросс-тулчейн osxcross. Общее описание сборки представлено в
README.md в корне репозитория (
https://github.com/tpoechtrager/osxcross), я рассмотрю процедуру для Arch. Для начала нужно установить зависимости:
Code:
# pacman -S base-devel fpc clang cmake libxml2 openssl cpio
После этого необходимо поместить в каталог
tarballs запакованный Mac OS X SDK. Архив с SDK можно получить многими способами, но с моей точки зрения, проще всего взять нужный архив из данного репозитория -
https://github.com/phracker/MacOSX-SDKs. Можно скачать уже заархивированный SDK:
https://github.com/phracker/MacOSX-SDKs/releases, либо склонировать репозиторий и воспользоваться скриптом, который запакует все версии SDK, которые есть в репозитории:
Code:
$ git clone https://github.com/phracker/MacOSX-SDKs
$ cd MacOSX-SDKs
$ ./make-tarballs.sh
Я буду использовать SDK Mac OS X 10.8
(x86_64-apple-darwin12)
После того, как SDK скопирован в
tarballs, можно собирать тулчейн, указав целевой каталог. Я буду устанавливать в
/usr/local/osxcross:
Code:
$ cd osxcross
# TARGET_DIR=/usr/local/osxcross ./build.sh
Добавим
/usr/local/osxcross в
PATHТеперь нужно собрать кросс-fpc. Для этого я скачаю исходники нужной мне версии и, собственно, соберу ее.
CROSSBINDIR - путь к каталогу кросс-компилятора,
CPU_TARGET и
BINUTILSPREFIX зависят от выбранного SDK, целевой каталог установки в моем случае -
/opt/cross:
Code:
$ curl -O ftp://ftp.hu.freepascal.org/pub/fpc/dist/3.2.2/source/fpc-3.2.2.source.tar.gz
$ tar -xzvf fpc-3.2.2.source.tar.gz
$ cd fpc-3.2.2
# make distclean && FPC=ppcx64 make crossall crossinstall \
CPU_TARGET=x86_64 OS_TARGET=darwin \
CROSSBINDIR=/usr/local/osxcross/bin/ BINUTILSPREFIX=x86_64-apple-darwin12- \
INSTALL_PREFIX=/opt/cross \
OPT="-gl -gw -godwarfsets -XX -CX -Xd -Fl/usr/local/osxcross/SDK/MacOSX10.8.sdk/usr/lib"
После этого нужно отредактировать
fpc.cfg, добавив в него строки:
Code:
#IFDEF darwin
-Fu/opt/cross/lib/fpc/$fpcversion/units/x86_64-darwin/
-Fu/opt/cross/lib/fpc/$fpcversion/units/x86_64-darwin/*
-Fu/opt/cross/lib/fpc/$fpcversion/units/x86_64-darwin/rtl
-FD/usr/local/osxcross/bin/
#ENDIF
Также добавим
/opt/cross/lib/fpc/3.2.2/ в
PATHТеперь склонируем репозиторий df_osx_utils с некоторыми sh-скриптами, удобными для кросс-компиляции:
Code:
$ git clone https://github.com/fl0atingzero/df_osx_utils.git
macportsutil.sh - скрипт, который может скачать нужные библиотеки под нужную версию Darwin и поместить их в указанный каталог. Кроме того, он может пропатчить скачиваемые библиотеки, заменяя пути зависимостей. Это временное, но необходимое решение, если требуется поместить библиотеки не в
/opt/local/lib. Отредактируем скрипт, указав
OUTDIR (в моем случае это
~/dfcross/libs), а также установив
FLAG_D в 1, чтобы скрипт пропатчил библиотеки после загрузки и распаковки, после чего запустим его.
Далее нужно собрать
dylibbundler и создать символические ссылки на
otool и
install_name_tool для его корректной работы:
Code:
$ git clone https://github.com/auriamg/macdylibbundler.git
$ cd macdylibbundler
$ make
$ sudo cp dylibbundler /usr/local/bin
$ ln -s /usr/local/osxcross/bin/{x86_64-apple-darwin12-otool,otool}
$ ln -s /usr/local/osxcross/bin/{x86_64-apple-darwin12-install_name_tool,install_name_tool}
После этого, как и в предыдущей части, нужно вручную собрать
enet. Я указываю выходной каталог
~/dfcross/libs, чтобы собранные библиотеки оказались рядом с теми, что были скачаны при помощи
macportsutil:
Code:
$ git clone https://github.com/lsalzman/enet/commits/master
# pacman -S autoconf
$ cd enet
$ autoreconf -vfi
$ ./configure \
--host="x86_64-apple-darwin12" \
--target="x86_64-apple-darwin12" \
--prefix="/home/vlad/dfcross/libs" \
--with-sysroot="/usr/local/osxcross/SDK/MacOSX10.8.sdk/" \
CC=x86_64-apple-darwin12-clang
Теперь наконец-то можно собрать игру. Перед этим нужно отредактировать
crossbuilder.sh, указав каталог с исходниками игры, каталог ресурсов (обычно это распакованный архив
win32-d2df-latest.zip), каталог временных файлов, выходной каталог, а также утилиту для упаковки DMG (
mkisofs или
genisoimage).
После этого запускаем
crossbuilder.shCode:
$ crossbuilder.sh