# Sprinter C Compiler — top-level Makefile # # make build host tools, libc archive, all tests, all apps # 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 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 $(TESTS) $(APPS) all: tools lib tests examples 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" # Размерный регресс: сверить _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