Files
kam-mobile/BUILD_ATTEMPTS_CHANGES.md
T
admin_d d6676896d4
Sync changed files to Google Drive / sync (push) Successful in 2m27s
Reuse Android compiler outputs and remove old build artifacts
2026-10-10 02:05:20 +05:00

11 KiB
Raw Blame History

Изменения при попытках собрать APK

Этот отчёт описывает изменения после завершения первой волны Task 15 (коммит 29df541), сделанные во время попыток сборки, и последующую правку для повторного использования результатов компиляции. Изменения самой волны Task 15 сюда не включены.

1. Ручные исправления исходников во время попыток сборки

code/GameDiagnosticsGraphics_Mobile.pas

  • Добавлена повторная секция private после вложенного блока type, перед полями класса. Это исправляет разбор объявления класса компилятором FPC.
  • В uses раздела implementation добавлен KM_CommonTypes, чтобы используемые типы были доступны непосредственно этому модулю.
  • Переменная Stage: TGraphicsVisibleDrawDiagnosticStageId перенесена из внешнего блока переменных во вложенную процедуру AdvanceVisiblePhase. Это исправляет использование счётчика цикла во вложенной процедуре для FPC.

code/GameDiagnosticsView.pas

  • Добавлена повторная секция private после вложенного объявления TGraphicsRequest, перед полями класса, для корректного разбора FPC.

port-source/kam_remake/src/render/KM_Render.pas

  • Из интерфейсного uses удалены Windows, LCLIntf, LCLType, OpenGLContext, dglOpenGL.
  • Из uses реализации удалены KromOGLUtils, KromUtils, KM_Defaults, KM_IoPNG, KM_CommonClasses.
  • Цель: убрать ненужные зависимости мобильного адаптера от настольных модулей, которые мешали Android-компиляции. Тела методов этим изменением не переписывались.

port-source/kam_remake/src/res/KM_ResSprites.pas

  • В объявлении и реализации OverloadRXDataFromFolder тип параметра aOnProgress выбирается условно: TUnicodeStringEvent для FPC, прежний TProc<string> для остальных компиляторов.
  • Объявления и реализации GetSoftenShadowType и SoftenShadowsList заключены в {$IFDEF WDC}.
  • Подключение KM_Resource заключено в {$IFDEF WDC}.
  • Вложенная процедура AppendFolder внутри OverloadGeneratedFromFolder также заключена в {$IFDEF WDC}.
  • Цель: устранить несовместимый с FPC тип callback и ограничить зависимости от настольного владельца ресурсов. Это не устранило все настольные зависимости проекта: последняя сборка остановилась на Graphics в KM_ResFonts.

Временная правка, которая была отменена

Во время разбора зависимостей менялся port-source/kam_remake/src/res/KM_Resource.pas. Эти правки полностью отменены; в текущем diff изменений этого файла нет.

2. Ресурс, добавленный во время сборки

private-assets/data/Sprites/Tileset.rxx

  • Создана копия существующего private-assets/data/sprites/Tileset.rxx в каталог Sprites с заглавной буквой.
  • Причина: различие регистра пути на Linux. Использована копия, поскольку подготовка ресурсов запрещает символьные ссылки.
  • Это игнорируемый Git ресурс, поэтому обычный git diff его не показывает. Исходный файл в sprites не заменялся.

3. Автоматические изменения сборочного скрипта

out/current/build.json

  • Метаданные прежней успешной сборки заменены результатом последней попытки: 20261009T204819Z-d5b17e32.
  • Итоговый статус: FAIL; компиляция завершилась с кодом 1; упаковка APK не запускалась (NOT_RUN).
  • Количество подготовленных ресурсов изменилось с 1 на 8.
  • Записана ошибка:
/work/vendor/kam_remake/src/res/KM_ResFonts.pas(5,13) Fatal: Can't find unit Graphics used by KM_ResFonts

out/current/kam-mobile.apk и out/current/package.json

  • Прежние файлы удалены автоматически существующим обработчиком неуспешной сборки, чтобы старый APK не выдавался за результат текущей попытки.
  • Новый APK при этих попытках не создан.

build-evidence/<build_id>/

Созданы каталоги с логами и итоговыми build.json для попыток:

  • 20261009T200852Z-e01492c5
  • 20261009T201018Z-293f32ce
  • 20261009T201542Z-734c8b9e
  • 20261009T201938Z-0d29dc09
  • 20261009T202407Z-e1fdcdb0
  • 20261009T202805Z-effd8544
  • 20261009T203305Z-0d62cff2
  • 20261009T203736Z-692bf342
  • 20261009T204411Z-618edf61
  • 20261009T204819Z-d5b17e32

Рабочие каталоги этих попыток также создавались в игнорируемом Git каталоге build/<build_id>/. Это сгенерированные файлы компиляции, подготовки ресурсов и упаковки, а не ручные правки исходников.

4. Последующая правка инкрементальной сборки

Эти изменения сделаны отдельно, после остановки попыток сборки, по просьбе сохранять логи и повторно использовать скомпилированные модули.

app/CastleEngineManifest.xml

  • Удалена опция FPC -B, которая принудительно пересобирала все модули.
  • Остальные опции компилятора оставлены.

tools/generate.py

  • -B удалён и из списка разрешённых COMPILER_OPTIONS, чтобы проверка постоянного манифеста соответствовала изменению.
  • materialize_application_project теперь обновляет существующий проект вместо требования всегда создавать новую папку.
  • Неизменившийся сгенерированный манифест не перезаписывается, чтобы сохранить его время изменения.
  • Каталог данных может существовать; проектные Android services обновляются копированием после проверки.
  • Добавлены проверки символьных ссылок для повторно используемых каталога проекта, каталога данных и манифеста.

tools/build_cache.py — новый файл

  • Выбирает постоянный проект build/work/<cpu>/application.
  • Записывает параметры совместимости в build/work/<cpu>/inputs.json.
  • Сравнивает CPU, upstream commit, манифест, контракт выбора исходников, пути поиска, состав файлов исходников и параметры инструментария.
  • Для контейнерной сборки учитывает digest Docker image; для локальной — хеши исполняемых файлов castle-engine и fpc.
  • При несовместимости удаляет сгенерированный проект; при совпадении сохраняет его для повторного использования .ppu и .o.
  • Пишет сведения об использовании кэша в лог каждой попытки compiler-cache.json.

tools/runner.py

  • Подключает cached_project и использует постоянную папку проекта вместо build/<build_id>/application.
  • Отдельные логи каждой попытки остаются в build/<build_id>/logs; копирование в build-evidence сохранено.
  • Перед компиляцией удаляет прежние итоговые библиотеки lib<name>_android_<cpu>.so и APK внутри проекта; промежуточные .ppu и .o сохраняет.
  • Передаёт digest образа внутрь контейнера через KAM_TOOLCHAIN_IMAGE для проверки совместимости кэша.
  • Сериализует обычные запуски через build/runner.lock, чтобы они не меняли общий кэш одновременно. Внутренний запуск контейнера повторно эту блокировку не берёт.

README.md

  • Описаны постоянная папка компиляции, отдельные логи, автоматический сброс кэша и ручная очистка удалением build/work/.
  • Обновлено описание назначения каталога build/.

5. Состояние на момент отчёта

  • После правки инкрементальной сборки сборка и тесты не запускались. Ускорение пока не измерено.
  • Первый запуск нового механизма заполнит новый кэш; старые папки попыток автоматически в него не переносятся.
  • Ошибка отсутствующего модуля Graphics остаётся нерешённой; правка кэша её не исправляет.
  • Перечисленные изменения после 29df541 не закоммичены и не отправлены в Git.
  • Настройки агентов и TOML-файлы этой правкой не редактировались.
  • Этот отчёт сохранён в BUILD_ATTEMPTS_CHANGES.md.