В первой вступительной главе я опишу некоторые используемые инструменты, а также расскажу как подготовить и собрать набор инструментов разработчика (тулчейн).

Статьи будут расчитаны на подготовленного пользователя, который чувствует себя достаточно уверенно при программировании на C/C++, умеет пользоваться командной строкой linux и не боится Makefile’ов :). Все описанные действия я буду проводить в MacOS 10.10, но в теории все также должно работать в linux и в windows под cygwin.

На момент, когда дримка еще была «жива» и под нее создавались игры, разработчикам было доступно два инструмента для написания игр: Katana SDK и Windows CE SDK. Первый инструмент был официальным инструментом от Sega и был более мощным и эффективным, когда второй был, скорее, маркетинговым ходом, говорящим, что Dreamcast поддерживает Windows CE, так что вы, разработчики, можете с легкостью портировать свои игры! Было много споров на тему качества игр, сделанных на Windows CE, но все таки на нем выходили разные: и хорошие и плохие. Для разработки оба этих наборов SDK требовали рабочую станцию.

На текущий момент эти два набора являются морально устаревшими, а наличие рабочей станции не является обязательным условием, т.к. запуск и отладку теперь можно производить в эмуляторах или даже на реальной консоли. Наиболее популярным «пакетом» разработчика сейчас является Kallisti OS. Она представляет из себя нечто вроде мини операционной системы, с необходимым набором АПИ для работы с железом. На основе нее даже было создано коммерческие игры.

Итак, нам понадобится стянуть себе на систему Kallisti OS (KOS) и дополнительные библиотеки для нее. Рекомендую, для удобства, разместить их сразу в каталог /opt/toolchains/dc и назначить права RW для этого каталога.

cd /opt/ 
sudo mkdir toolchains
chmod -R 777 toolchains
mkdir dc && cd dc

Основная ветка KOS хостится на SourceForge, идем туда и тянем себе kos и kos-ports:

git clone git://git.code.sf.net/p/cadcdev/kallistios kos
git clone git://git.code.sf.net/p/cadcdev/kos-ports kos-ports

теперь обновим сабмодули в kos-ports

cd kos-ports
git submodule update --init

Скрипт для сборки тулчейна лежит внутри kos в utils/dc-chain. На момент написания этой статьи — благодаря усилиям разработчика операционной системы DreamShell, а также небольшим моим правкам в него — доступен скрипт, собирающий тулчейн с gcc-4.9.1, а также binutils-2.25 и newlib-2.2.0. Взять его можно с репозитория DreamShell. Скопируйте с заменой содержимое из /sdk/toolchain в /utils/dc-chain и в мейкфайле необходимо изменить пути к kos_root и kos_base на /opt/toolchains/dc и /opt/toolchains/dc/kos соответственно, т.к. мы их склонировали в этот каталог ранее. Теперь все готово для запуска сборки gcc. Сначала скачаем необходимые пакеты

bash download.sh

Распакуем их

bash unpack.sh

и поставим на сборку (для ускорения процесса можно указать кол-во потоков сборки в параметр мейкфайла makejobs=-j4, где 4 кол-во ядер вашего процессора)

make all

Этот процесс достаточно продолжительный, на моем i5 2.9GHz и 8Gb оперативы сборка продолжалась около 30 минут

Имея рабочий тулчейн можно собрать какой-нибудь примерчик и запустить его в эмуле. Для примера соберем семпл из KOS, например тест OpenGL API, который лежит в examples/dreamcast/cpp/gltest. 
Но прежде, нам понадобится разово собрать KOS и ее библиотеки. Для начала необходимо создать скрипт с необходимыми переменными окружениями. Если все предыдущие шаги были выполнены в точности как вышеописано (это касается расположения kos), то просто можно скопировать из /doc файл environ.sh.sample в корневой каталог , и переименовать его в environ.sh

cp /opt/toolchains/dc/kos/doc/environ.sh.sample /opt/toolchains/dc/kos/doc/environ.sh

Заходим в каталог c KOS и выполним експорт всех необходимых переменных окружения из этого скрипта, командой source (или .)

source environ.sh

Делать это прийдется каждую сессию, т.е. если вдруг терминал закрыли, то придется делать экспорт опять. Можем собрать KOS

make all


Далее соберем kos-ports

cd /opt/toolchains/dc/kos-ports
make all

если вдруг на тулчейне с gcc-4.9.1 сборка libgl прервется ошибкой, то необходимо будет понизить в мейкфайле libgl уровень оптимизации с O3 до O2.
Теперь можно собрать пример:

cd /opt/toolchains/dc/kos/examples/dreamcast/cpp/gltest

make all
и запустим в эмуляторе полученный бинарник

/Applications/lxdream.app/Contents/MacOS/lxdream gltest.elf

На этом все, в следующий раз я постараюсь рассказать как прикрутить тулчейн к Eclipse IDE и перестать программировать в блокноте и терминале.