build: examples вне регрессной сборки; эталон размеров пересобран

`make all` собирал и examples/, из-за чего цикл «правка libc -> проверка»
упирался в mdview (компилируется минутами) и ничего нового про libc не
показывал.  Регресс ловит разжирение библиотеки, а для этого хватает
мелких tests/ — каждый тянет свой кусок libc и пересобирается за секунды.

- `make all` = tools lib tests; examples собираются явно (`make examples`,
  и как зависимость `make floppy`);
- size_check.py смотрит только tests/*.

Эталон принят заново.  Разбор расхождения, чтобы оно не выглядело
необъяснённым: эталон стоял с 30 июля (0280b05), а libc менялась 1 и 3
августа (b56f2b4 kbd_raw_poll, 1f16e8f fake shift) — _irq_tramp вырос
267 -> 336 Б и не был перебазирован, отсюда +33 Б у всех, кто линкует
трамплин (cbl*, irqtest, rt_test), и +22 у gfx_dbuf (gfx_set_idle_hook в
libbgi из того же KBD-1).  Текущий фикс BUG-KBD-5 вернул 36 Б из этих 69.
Заодно выкинуты мёртвые строки эталона (rpgprof/rpgwalk/scroll/space —
их давно нет в APPS, mdview/mdview2 — теперь вне регресса).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Александр Петров
2026-08-05 12:33:34 +03:00
parent 030af74631
commit 3d8b81c9f6
3 changed files with 27 additions and 24 deletions
+7 -3
View File
@@ -1,10 +1,14 @@
# Sprinter C Compiler — top-level Makefile # Sprinter C Compiler — top-level Makefile
# #
# make build host tools, libc archive, all tests, all apps # make build host tools, libc archive, all tests
# make tools build only host tools (mkexe) # make tools build only host tools (mkexe)
# make lib build lib/sprinter.lib (libc) + lib/bgi256.lib (libbgi) # make lib build lib/sprinter.lib (libc) + lib/bgi256.lib (libbgi)
# make tests build all libc feature tests under tests/ # make tests build all libc feature tests under tests/
# make examples build all real applications under examples/ # 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 floppy package every .exe + test fixtures into mame/v306/IMG/mc.img
# make check run mkexe unit tests # make check run mkexe unit tests
# make clean remove all build artefacts # make clean remove all build artefacts
@@ -41,7 +45,7 @@ DATA_FILES := \
.PHONY: all tools lib tests examples check clean sdcc floppy \ .PHONY: all tools lib tests examples check clean sdcc floppy \
size-check size-baseline host-tests $(TESTS) $(APPS) size-check size-baseline host-tests $(TESTS) $(APPS)
all: tools lib tests examples all: tools lib tests
tools: tools:
$(MAKE) -C toolchain/mkexe $(MAKE) -C toolchain/mkexe
+7 -13
View File
@@ -4,7 +4,6 @@ argv 3431
assrtest 3847 assrtest 3847
atlas 9193 atlas 9193
attrprob 4087 attrprob 4087
balls 6031
banked 1056 banked 1056
bankedbg 1067 bankedbg 1067
banklocl 4683 banklocl 4683
@@ -15,9 +14,9 @@ bios_text 4461
blitperf 5860 blitperf 5860
blitw 4939 blitw 4939
cat 913 cat 913
cblstream 6431 cblstream 6464
cbltest 6580 cbltest 6613
cblwav 6648 cblwav 6681
conio 4605 conio 4605
conio2 3929 conio2 3929
dec_test 860 dec_test 860
@@ -27,30 +26,25 @@ fdmax 6023
filetest 10547 filetest 10547
fpsdiv 4870 fpsdiv 4870
gets 509 gets 509
gfx_dbuf 5112 gfx_dbuf 5134
gfx_demo 4117 gfx_demo 4117
gfxbanks 6044 gfxbanks 6044
hello 4167 hello 4167
hello2 4244 hello2 4244
irqtest 6647 irqtest 6680
kbdpoll 1219
kbdraw 4911 kbdraw 4911
ls 4835 ls 4835
malloc 4461 malloc 4461
mdview 18878
mdview2 27031
mem_test 4555 mem_test 4555
mouse 4382 mouse 4382
openenv 6124 openenv 6124
palfile 5406 palfile 5406
ptime 5744 ptime 5744
rpgprof 12082 rt_test 5187
rpgwalk 10309
rt_test 5154
scroll 2974
seek 4188 seek 4188
simple 955 simple 955
solidt 11531 solidt 11531
space 11272
spranim 9431 spranim 9431
spriteclip 4119 spriteclip 4119
sprites 6791 sprites 6791
1 # Эталон размеров _CODE (байт); обновление: python3 toolchain/size_check.py --update
4 assrtest
5 atlas
6 attrprob
balls
7 banked
8 bankedbg
9 banklocl
14 blitperf
15 blitw
16 cat
17 cblstream
18 cbltest
19 cblwav
20 conio
21 conio2
22 dec_test
26 filetest
27 fpsdiv
28 gets
29 gfx_dbuf
30 gfx_demo
31 gfxbanks
32 hello
33 hello2
34 irqtest
35 kbdpoll
36 kbdraw
37 ls
38 malloc
mdview
mdview2
39 mem_test
40 mouse
41 openenv
42 palfile
43 ptime
44 rpgprof rt_test
rpgwalk
rt_test
scroll
45 seek
46 simple
47 solidt
space
48 spranim
49 spriteclip
50 sprites
+13 -8
View File
@@ -1,17 +1,23 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
""" """
size_check.py — размерный регресс-тест: сравнение _CODE всех тестов и size_check.py — размерный регресс-тест: сравнение _CODE тестов с эталоном
приложений с эталоном docs/size_baseline.tsv. docs/size_baseline.tsv.
Использование: Использование:
python3 toolchain/size_check.py # сверка с эталоном python3 toolchain/size_check.py # сверка с эталоном
python3 toolchain/size_check.py --update # перезаписать эталон python3 toolchain/size_check.py --update # перезаписать эталон
Логика: собираем _CODE из .map каждой программы (tests/*, examples/*), Логика: собираем _CODE из .map каждой программы под tests/, сравниваем с
сравниваем с эталоном. Любое отличие печатается; выход 1 — если есть эталоном. Любое отличие печатается; выход 1 — если есть РОСТ (случайное
РОСТ (случайное разжирение libc), 0 — если только уменьшения/без разжирение libc), 0 — если только уменьшения/без изменений. Новые
изменений. Новые программы (нет в эталоне) — предупреждение, добавить программы (нет в эталоне) — предупреждение, добавить через --update.
через --update. Запускать после `make all`. Запускать после `make all`.
ТОЛЬКО tests/, без examples/: регресс ловит разжирение libc, а для этого
хватает мелких тестов — каждый тянет свой кусок библиотеки и пересобирается
за секунды. Крупные приложения (examples/mdview компилируется минутами)
не показывают ничего сверх этого и лишь удлиняют цикл, поэтому и из
`make all` они убраны (см. корневой Makefile).
""" """
import glob import glob
@@ -28,7 +34,6 @@ def collect():
sizes = {} sizes = {}
pats = [ pats = [
os.path.join(ROOT, "tests", "*", ".sprinter-cc-*", "*.map"), os.path.join(ROOT, "tests", "*", ".sprinter-cc-*", "*.map"),
os.path.join(ROOT, "examples", "*", ".sprinter-cc-*", "*.map"),
] ]
for pat in pats: for pat in pats:
for map_path in glob.glob(pat): for map_path in glob.glob(pat):