Собираем GZDoom самостоятельно под OS X Mavericks

В этой статье я расскажу как скомпилировать GZDoom под Apple OS X с нуля. Для написания статьи будет использоваться виртуальная машина с чистой, но настроенной MacOS 10.9 с 64-битным ядром и 2 Гб оперативной памяти и 2 процессорными ядрами (с этой задачей идеально справляется VMware Workstation 10 с патчем-анлокером). Создаваемые программы смогут выполняться на любой версии MacOS с 10.6 по 10.9 включительно. Создайте ссылку на "Терминал" в Dock - мы будем часто им пользоваться; приложение находится по адресу /Applications/Utilities/Terminal.app).

Разделим процесс на 4 этапа:
1) Скачивание необходимых сред разработки, утилит и библиотек
2) Конфигурирование среды сборки, установка библиотек
3) Получение исходного кода
4) Компиляция исходного кода

При повторной сборке переходите сразу к п. 3.

1. Файлы для скачивания

1. Apple Xcode 5.x: скачайте последнюю доступную вам версию из App Store. При написании статьи использовался Xcode 5.1-DP2
2. FMOD Ex Programmers API - скачайте последнюю версию под Macintosh
3. CMake 3.0-rc5 - программа для конфигурации сборки исходного кода под вашу систему.
4. SDL 1.2.15 i386/x86_64 - мультимедийная библиотека

5. GLEW 1.10.0 - OpenGL библиотека

2. Установка программ

1. Получение root доступа. Задайте пароль для своего аккаунта (Системные настройки - Учётные записи - Сменить пароль). Выполните команду 'sudo su' в терминале и введите свой пароль - вы окажетесь в root шелле. Выполните команду 'passwd root' и задайте пароль для суперпользователя. Теперь вы сможете получать root доступ командой su, при желании теперь можно снять пароль со своего аккаунта. Чтобы заходить в root шелл без пароля - выполните от имени root команду 'EDITOR=/Applications/TextEdit.app/Contents/MacOS/TextEdit visudo', добавьте в конец файла строку '%staff ALL=(ALL:ALL) NOPASSWD:ALL', сохраните его и закройте редактор. После этого можно заходить в root шелл без пароля командой sudo su
2. Установите утилиты разработки Xcode. Перетащите значок Xcode с образа в каталог /Applications. Затем выполните команду clang в консоли и согласитесь на установку утилит командной строки
3. Установите программу для загрузки исходных кодов Zandronum. Выполните команду из root шелла:
easy_install mercurial
4. Установите CMake, для утилит командной строки выберите путь /usr/local/bin
5.
Смонтируйте образ FMOD Ex. Выполните команды из root шелла для установки библиотеки:
mkdir -p /usr/local/{include,lib}
cp /Volumes/FMOD\ Programmers\ API\ Mac/FMOD\ Programmers\ API/api/inc/* /usr/local/include/
cp /Volumes/FMOD\ Programmers\ API\ Mac/FMOD\ Programmers\ API/api/lib/* /usr/local/lib/

6. Подключите образ SDL. Скопируйте папку SDL.Framework в /Library/Frameworks
7.
Установите библиотеку GLEW, перейдя в каталог со скаченным архивом:

tar xzf glew-1.10.0.tgz && cd glew-1.10.0
make CFLAGS.EXTRA="-arch i386 -arch x86_64" LDFLAGS.EXTRA="-arch i386 -arch x86_64" GLEW_DEST=/usr/local
sudo make install GLEW_DEST=/usr/local

3. Получение исходного кода

1) Чтобы скачать последний снапшот исходного кода, откройте терминал и перейдите в нужный каталог. Выполните команду: Исходники скачаются в подкаталог 'gzsrc'.
2) При желании вы можете скачать стабильную версию. Перейдите на закладку "Tags", найдите нужную версию и скачайте её в виде bz2 архива. Распакуйте архив в нужный каталог.
3) Чтобы обновить имеющуюся копию исходников, выполните команду:

4. Компиляция исходного кода
1) Откройте терминал и перейдите в каталог со скаченными исходниками gzsrc.
2) Создайте универсальную сборку порта. Для этого выполните команды:
 
mkdir release && cd release

cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_OSX_ARCHITECTURES=i386 -DFMOD_INCLUDE_DIR="/usr/local/include" -DFMOD_LIBRARY="/usr/local/lib/libfmodex.dylib" ..

make

cd ..

3) Скопируйте необходимую динамическую библиотеку:
  

cp -f /usr/local/lib/libfmodex.dylib .

4) В текущем каталоге будут все необходимые для игры файлы:

  • gzdoom
  • gzdoom.pk3
  • lights.pk3
  • brightmaps.pk3
  • libfmodex.dylib
  • Выполните ./gzdoom чтобы проверить работоспособность сборки.