31b82661eb
Порт PoP переехал в applications/SprPoP — приложение, которое собирается само: код, оригинальные данные, конверторы ресурсов и сборка внутри одной папки. Наружу знает единственный путь — корень тулчейна (SPRINTER_ROOT, по умолчанию ../..). applications/PoP/roomtest ЗАМОРОЖЕНА и остаётся архивом закрытых задач, багов и исполненных планов. Скопировано из applications/PoP/roomtest@4b74478. Перенос проверен побайтово: собранный sprpop.exe совпал с roomtest.exe того же коммита, все 39 дисковых ресурсов и все 16 генерируемых заголовков — тоже, host- тесты зелёные (15/15). Раскладка: src/ рукописный C (roomtest.c -> sprpop.c) gen/ генерируемые заголовки, в репозитории assets/orig/ оригинальные данные игры, вне репозитория (копирайт) assets/packed/ то, что ложится на диск, в раскладке диска tools/ конверторы; все пути — в одном tools/paths.py build/ выход: exe, каталоги ресурсов, hdd/, промежуточные atl/ Сборка ресурсов: assets/packed и gen — версионируемые ВХОДЫ, а не то, что пересчитывается каждым make. Автоматика построена на ОТСУТСТВИИ файла, а не на таймстемпах: git не хранит времена, и в свежем клоне сравнение по времени превращалось бы в лотерею. Недостающий ресурс или заголовок чинится сам, рекурсивным вызовом в ветку генерации. Музыка собирается из любого из четырёх наборов записей (make music-mp3, music-mt32, ...); набор входит в имя stamp'а, поэтому смена набора сама делает музыку устаревшей. Длины реплик больше не захардкожены: упаковщик печатает их в gen/pop_music_ticks.h, и шкала сцены выражена через них — иначе mt32 (реплики на 6% длиннее) молча ломал катсцену. Тулчейн: в app.mk два обратносовместимых крючка (SRC_DIR/BUILD_DIR), HDD_IMG стал ?=; команда сборки roomtest не изменилась. Корневой make host-tests переключён на SprPoP. Подгонка тайминга катсцены с принцессой (PV_MAGIC_LEAD): сцена render-bound и идёт ~49 тиков/с вместо 60, из-за чего кода реплики приходила раньше молнии. Это обход, а не лечение; разбор с замерами — docs/BUGS_OPEN.md, записи SND-PACE-DEAD, PV-RENDER-BOUND, MUS-LEFT-TEAR. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
107 lines
4.1 KiB
Makefile
107 lines
4.1 KiB
Makefile
# Sprinter C Compiler — top-level Makefile
|
||
#
|
||
# make build host tools, libc archive, all tests
|
||
# make tools build only host tools (mkexe)
|
||
# make lib build lib/sprinter.lib (libc) + lib/bgi256.lib (libbgi)
|
||
# make tests build all libc feature tests under tests/
|
||
# make examples build all real applications under examples/ (НЕ входит
|
||
# в `make all`: это регрессная сборка, а examples/ —
|
||
# крупные приложения, которые её только замедляют
|
||
# (mdview компилируется минутами) и ничего нового про
|
||
# libc не показывают. Собирать явно перед `make floppy`.)
|
||
# make floppy package every .exe + test fixtures into mame/v306/IMG/mc.img
|
||
# make check run mkexe unit tests
|
||
# make clean remove all build artefacts
|
||
# make sdcc download/extract vendored SDCC
|
||
#
|
||
# Most heavy lifting is delegated to sub-Makefiles.
|
||
|
||
# Small libc-feature tests (one program per .c-language feature or libc API).
|
||
TESTS := hello hello2 simple banked bankedbg banktest strtest cat seek \
|
||
malloc mem_test argv errno rt_test openenv ls conio conio2 \
|
||
attrprob timedir mouse banklocl stdlib assrtest ptime stattest \
|
||
filetest fdmax fbench solidt irqtest cbltest cblwav cblstream dec_test gets stest2 winrest \
|
||
bios_text text_palette \
|
||
gfx_demo gfx_dbuf bgitest bgi_img accfill
|
||
# gfx_d16 / gfx_text / gfx_mous — 16-цветные; убраны до Фазы 2 (bgi16.lib
|
||
# ещё не собирается). Вернуть мигрированными на BGI --gfx 16.
|
||
# Larger end-user applications under examples/.
|
||
APPS := mdview mdview2
|
||
|
||
MAME_DIR := mame/v306
|
||
FLOPPY_IMG := $(MAME_DIR)/IMG/mc.img
|
||
MAKE_DISK := $(MAME_DIR)/make_disk.py
|
||
|
||
TEST_EXES := $(foreach t,$(TESTS),tests/$(t)/$(t).exe)
|
||
APP_EXES := $(foreach a,$(APPS),examples/$(a)/$(a).exe)
|
||
ALL_EXES := $(TEST_EXES) $(APP_EXES)
|
||
|
||
DATA_FILES := \
|
||
tests/cat/test.txt \
|
||
tests/seek/big.txt \
|
||
tests/cblwav/speech.pcm \
|
||
examples/mdview/SAMPLE.MD
|
||
|
||
.PHONY: all tools lib tests examples check clean sdcc floppy \
|
||
size-check size-baseline host-tests $(TESTS) $(APPS)
|
||
|
||
all: tools lib tests
|
||
|
||
tools:
|
||
$(MAKE) -C toolchain/mkexe
|
||
|
||
lib:
|
||
$(MAKE) -C libc
|
||
$(MAKE) -C libbgi
|
||
|
||
check: tools
|
||
$(MAKE) -C toolchain/mkexe check
|
||
|
||
tests: $(TESTS)
|
||
examples: $(APPS)
|
||
|
||
$(TESTS): tools lib
|
||
$(MAKE) -C tests/$@
|
||
|
||
$(APPS): tools lib
|
||
$(MAKE) -C examples/$@
|
||
|
||
# Generate big.txt if missing (gen_bigfile.py creates 100 KB marker file).
|
||
tests/seek/big.txt:
|
||
cd tests/seek && python3 gen_bigfile.py big.txt 102400
|
||
|
||
# Re-pack the MAME floppy image with every built exe + needed data files.
|
||
floppy: tests examples tests/seek/big.txt
|
||
python3 $(MAKE_DISK) $(FLOPPY_IMG) $(ALL_EXES) $(DATA_FILES)
|
||
@echo
|
||
@echo "Floppy ready: $(FLOPPY_IMG)"
|
||
@echo "Run: cd $(MAME_DIR) && ./run_mame.sh"
|
||
|
||
# Модульные тесты под ucsim_z80. Обвязка — testkit/, сами наборы лежат
|
||
# рядом с кодом, который проверяют. MAME не нужна, идут за секунды;
|
||
# ucsim идёт в комплекте нашего SDCC.
|
||
# applications/PoP/roomtest заморожена (её ветка развития — SprPoP), поэтому
|
||
# её набор здесь больше не гоняется.
|
||
HOST_TEST_DIRS := testkit applications/SprPoP/tests/host
|
||
|
||
host-tests:
|
||
@for d in $(HOST_TEST_DIRS); do $(MAKE) -C $$d || exit 1; done
|
||
|
||
# Размерный регресс: сверить _CODE всех программ с docs/size_baseline.tsv.
|
||
size-check:
|
||
python3 toolchain/size_check.py
|
||
|
||
# Принять текущие размеры как эталон (после осознанных изменений).
|
||
size-baseline:
|
||
python3 toolchain/size_check.py --update
|
||
|
||
clean:
|
||
$(MAKE) -C toolchain/mkexe clean
|
||
$(MAKE) -C libc clean
|
||
$(MAKE) -C libbgi clean
|
||
@for t in $(TESTS); do $(MAKE) -C tests/$$t clean; done
|
||
@for a in $(APPS); do $(MAKE) -C examples/$$a clean; done
|
||
|
||
sdcc:
|
||
bash third_party/setup-sdcc.sh
|