Проект libsm64 упаковывает обратно разработанный код движения и рендеринга Марио из Super Mario 64 в разделяемую библиотеку, чтобы его можно было с минимальными усилиями встроить в любой игровой движок или другую систему. Основу кода дал SM64 decompilation project, а текстуры и анимации библиотека во время работы вытаскивает из официального ROM’а — поэтому каждое приложение, использующее libsm64, должно попросить пользователя предоставить образ игры.
Публичное API сосредоточено в единственном заголовочном файле libsm64.h; клиенту достаточно подключить его и загрузить саму библиотеку. Минимальный пример работы лежит в каталоге test.
Сборка на macOS и Linux требует установленного python3. Для тестовой программы дополнительно нужны SDL2 и GLEW (на Ubuntu пакеты libsdl2-dev и libglew-dev). Сборка запускается обычным make. Если требуется собраться не с glibc, а с musl libc, выполняют LIBSM64_MUSL=1 make. Чтобы запустить тестовую программу, в корень репозитория кладут ROM североамериканской версии с именем baserom.us.z64.
На Windows используют окружение MSYS2 MinGW 64. После настройки вместо стандартного URL репозитория указывают https://github.com/libsm64/libsm64.git. Для тестовой программы ставят 64-битные библиотеки командой pacman -S mingw-w64-x86_64-SDL2 mingw-w64-x86_64-glew или 32-битные mingw-w64-i686-SDL2 mingw-w64-i686-glew. Дальше — make и такой же файл baserom.us.z64.
Для веба через Emscripten сборка пока в статусе «в процессе». Выполняют emmake make CC=emcc. Если нужна автономная библиотека для вызовов из JavaScript, после компиляции запускают emcc dist/libsm64.so -o libsm64.js — на выходе получаются libsm64.wasm и libsm64.js. Иначе dist/libsm64.so — это скомпилированный объект WebAssembly, который можно линковать в собственный проект на C.
Доступные цели make на любых платформах: make lib (по умолчанию) формирует каталог dist с готовым разделяемым объектом или DLL и публичным заголовочным файлом; make test собирает и библиотеку, и тестовую программу; make run сразу компилирует и запускает SDL+OpenGL пример.