Компиляция MAME в операционных системах семейства Windows

Кому может быть интересна компиляция MAME?
Во-первых, тем, кто хочет всегда иметь под рукой самую последнюю версию MAME (u релизы).
Во-вторых, тем, кто хочет иметь не стандартную версию MAME, а оптимизированную под конкретный архитектуру ЦП.
В-третьих, тем, кому хорошо известен язык программирования C и кому хочется самому вносить изменения в код программы.

В данном руководстве описывается компиляция MAME версии 0.123u5. Для компиляции более ранних версий могут понадобиться старые версии среды компиляции MinGW или даже другие программы.

Создание среды компиляции MinGW

На данном этапе понадобятся два файла, ссылки на которые можно найти на официальном сайте MAME (раздел The Easy Way):

Первый файл является самораспаковывающимся архивом, который можно разжать в любую директорию. Я буду использовать директорию C:\MinGW в этом примере.

Диалоговое окно самораспаковывающегося архива mingw-mame-20070810.exe

Содержимое директории будет выглядеть следующим образом:

Директория C:\MinGW

Из второго архива понадобятся только шесть файлов:

Их необходимо распаковать в директорию C:\MinGW\include.

Создание дерева кода MAME

На данном этапе понадобится исходный код программы, ссылку на который можно найти на официальном сайте MAME:

Этот файл является самораспаковывающимся архивом, который можно разжать в любую директорию. Я буду использовать директорию C:\MAMESrc в этом примере.

Диалоговое окно самораспаковывающегося архива mame0123s.exe

Содержимое директории будет выглядеть следующим образом:

Директория C:\MAMESrc

Дополнительные файлы и DIFF

Для упрощения процесса компиляции я использую командные файлы, сделанные Mr. Do. Скачать их можно на его странице, посвящённой компиляции MAME (раздел Needed Files):

Внутри архива находятся два командных файлах и ярлык для запуска командной строки. Ярлык для запуска командной строки следует использовать при применении u релизов, а также при компиляции MAME, чтобы всегда была возможность увидеть сообщения об ошибках, если таковые возникнут. Что касается командных файлов, то PatchMAME.bat используется для применения u релизов, а MakeMAME.bat для запуска компиляции MAME. Для применения u релизов понадобятся DIFF файлы для последней версии MAME (их можно найти на официальном сайте MAME).

После распаковки архива compile_extras.zip и пяти u релизов MAME ветки 0.123, содержимое директории C:\MAMESrc будет выглядеть следующим образом:

Директория C:\MAMESrc после распаковки архива compile_extras.zip и пяти u релизов MAME ветки 0.123

Командные файлы PatchMAME.bat и MakeMAME.bat при желании можно отредактировать при помощи любого текстового редактора (например, Блокнота).

На приведённой ниже иллюстрации показано содержимое файла PatchMAME.bat. Данный файл отвечает за применение u релизов к основному исходному коду MAME. Первая строка файла указывает путь, по которому расположена директория bin среды компиляции MinGW (в данном примере C:\mingw\bin). Вторая строка отвечает непосредственно за применение u релиза.

Файл PatchMAME.bat

На приведённой ниже иллюстрации показано содержимое файла MakeMAME.bat. Данный файл отвечает за запуск компиляции MAME. Первая строка файла указывает путь, по которому расположена директория bin среды компиляции MinGW (в данном примере C:\mingw\bin). Вторая строка отвечает непосредственно за компиляцию исходного кода. В ней можно дополнительно указать архитектуру ЦП, под которую будет производиться компиляция.

Файл MakeMAME.bat

Список рекомендуемых параметров компиляции:

Список дополнительных параметров компиляции (лучшая оптимизация работы, но возможны проблемы с компиляцией для новых процессоров):

Более подробный список параметров доступен в документации GCC на английском языке.

Если ЦП состоит из нескольких ядер, то можно использовать параметр -j3 (два ядра) или -j5 (четыре ядра). Это приведёт к существенному снижению времени компиляции, за счёт одновременного запуска нескольких процессов компиляции. Если ЦП состоит из более чем четырёх ядер, то число после -j должно быть равно числу ядер +1.

Приведу пример. Для компиляции MAME на компьютере с процессором на основе архитектуры Intel Core 2 с двумя ядрами во вторую строку MakeMAME.bat надо ввести: mingw32-make -j3 ARCHOPTS="-march=pentium-m -msse3".

Применение u релизов

Данная секция будет интересна только тем, кто хочет применять u релизы. Остальные могут пропустить её.

Прежде чем объяснить последовательность действий, хочу сделать небольшое предупреждение: u релизы необходимо применять в строгом порядке (т.е. сначала 0123u1.diff, потом 0123u2.diff), поскольку иначе могут возникнуть конфликты в исходном коде.

Для применения u релиза надо запустить командную строку (ярлык ! Command Prompt), ввести patchmame 0123u1 и в исходный код будут внесены изменения. После этого данную операцию надо повторить для других u релизов.

Создание исполняемого файла MAME

При использовании командных файлов надо запустить командную строку (ярлык ! Command Prompt), и ввести makemame. Через какое-то время исполняемый файл MAME (и ещё несколько вспомогательных утилит) появится в директории C:\MAMESrc. В итоге содержимое директории будет выглядеть так:

Содержимое директории C:\MAMESrc после завершения процесса компиляции

При следующей компиляции MAME, все лишние файлы из директории C:\MAMESrc лучше удалить. Также стоит удалить директорию C:\MAMESrc\obj, чтобы не возникло каких-либо конфликтов при компиляции.

Прочее

Проделав компиляцию MAME в первый раз, я столкнулся с тем, что помимо основного исполняемого файла, я нашёл в папке ещё и дополнительные, предназначение которых мне было неизвестно. Приведу краткое описание каждого из них: