Files
Sprinter-SDCC/Makefile
T

104 lines
3.9 KiB
Makefile
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 floppy пакет всех SDK-тестов в build/media/toolkit-tests.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.
FLOPPY_IMG := build/media/toolkit-tests.img
MAKE_DISK := toolchain/make_disk.py
MAME_HOME ?=
PYTHON ?= $(shell pyenv which python)
ifeq ($(strip $(PYTHON)),)
$(error pyenv Python 3.12 не найден; задайте PYTHON=/путь/к/python3.12)
endif
TEST_EXES := $(foreach t,$(TESTS),tests/$(t)/$(t).exe)
ALL_EXES := $(TEST_EXES)
DATA_FILES := \
tests/cat/test.txt \
tests/seek/big.txt \
tests/cblwav/speech.pcm
.PHONY: all tools lib tests check clean sdcc floppy run \
size-check size-baseline host-tests sdbg-tests $(TESTS)
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)
$(TESTS): tools lib
$(MAKE) -C tests/$@
# Generate big.txt if missing (gen_bigfile.py creates 100 KB marker file).
tests/seek/big.txt:
cd tests/seek && $(PYTHON) gen_bigfile.py big.txt 102400
# Собственный SDK-носитель: не изменяет диск MAME или приложения.
floppy: tests tests/seek/big.txt
$(PYTHON) $(MAKE_DISK) $(FLOPPY_IMG) $(ALL_EXES) $(DATA_FILES)
@echo
@echo "Floppy ready: $(FLOPPY_IMG)"
@echo "Run: make run MAME_HOME=/путь/к/MAME/runtime"
run: floppy
$(PYTHON) toolchain/run_sprinter_mame.py --mame-home "$(MAME_HOME)" --floppy "$(FLOPPY_IMG)"
# Модульные тесты под ucsim_z80. Обвязка — testkit/, сами наборы лежат
# рядом с кодом, который проверяют. MAME не нужна, идут за секунды;
# ucsim идёт в комплекте нашего SDCC.
# Тесты продуктов запускаются в собственных репозиториях.
HOST_TEST_DIRS := testkit
host-tests:
@for d in $(HOST_TEST_DIRS); do $(MAKE) -C $$d || exit 1; done
# Отладочная карта: реальные SDCC/linker и протокол транспорта без MAME.
# Для local pyenv: pyenv exec make sdbg-tests.
sdbg-tests: tools lib
$(PYTHON) -m unittest discover -s tests/sdbg -v
# Размерный регресс: сверить _CODE всех программ с docs/size_baseline.tsv.
size-check: tests
$(PYTHON) toolchain/size_check.py --require $(TESTS)
# Принять текущие размеры как эталон (после осознанных изменений).
size-baseline: tests
$(PYTHON) toolchain/size_check.py --update --require $(TESTS)
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
sdcc:
bash third_party/setup-sdcc.sh