From 3d8b81c9f603d8d4a93a2434e7a73a34be140121 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B0=D0=BD=D0=B4=D1=80=20?= =?UTF-8?q?=D0=9F=D0=B5=D1=82=D1=80=D0=BE=D0=B2?= Date: Wed, 5 Aug 2026 12:33:34 +0300 Subject: [PATCH] =?UTF-8?q?build:=20examples=20=D0=B2=D0=BD=D0=B5=20=D1=80?= =?UTF-8?q?=D0=B5=D0=B3=D1=80=D0=B5=D1=81=D1=81=D0=BD=D0=BE=D0=B9=20=D1=81?= =?UTF-8?q?=D0=B1=D0=BE=D1=80=D0=BA=D0=B8;=20=D1=8D=D1=82=D0=B0=D0=BB?= =?UTF-8?q?=D0=BE=D0=BD=20=D1=80=D0=B0=D0=B7=D0=BC=D0=B5=D1=80=D0=BE=D0=B2?= =?UTF-8?q?=20=D0=BF=D0=B5=D1=80=D0=B5=D1=81=D0=BE=D0=B1=D1=80=D0=B0=D0=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `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 --- Makefile | 10 +++++++--- docs/size_baseline.tsv | 20 +++++++------------- toolchain/size_check.py | 21 +++++++++++++-------- 3 files changed, 27 insertions(+), 24 deletions(-) diff --git a/Makefile b/Makefile index bae24ab..f08ac14 100644 --- a/Makefile +++ b/Makefile @@ -1,10 +1,14 @@ # 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 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 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 @@ -41,7 +45,7 @@ DATA_FILES := \ .PHONY: all tools lib tests examples check clean sdcc floppy \ size-check size-baseline host-tests $(TESTS) $(APPS) -all: tools lib tests examples +all: tools lib tests tools: $(MAKE) -C toolchain/mkexe diff --git a/docs/size_baseline.tsv b/docs/size_baseline.tsv index 7c0d766..65c4e7b 100644 --- a/docs/size_baseline.tsv +++ b/docs/size_baseline.tsv @@ -4,7 +4,6 @@ argv 3431 assrtest 3847 atlas 9193 attrprob 4087 -balls 6031 banked 1056 bankedbg 1067 banklocl 4683 @@ -15,9 +14,9 @@ bios_text 4461 blitperf 5860 blitw 4939 cat 913 -cblstream 6431 -cbltest 6580 -cblwav 6648 +cblstream 6464 +cbltest 6613 +cblwav 6681 conio 4605 conio2 3929 dec_test 860 @@ -27,30 +26,25 @@ fdmax 6023 filetest 10547 fpsdiv 4870 gets 509 -gfx_dbuf 5112 +gfx_dbuf 5134 gfx_demo 4117 gfxbanks 6044 hello 4167 hello2 4244 -irqtest 6647 +irqtest 6680 +kbdpoll 1219 kbdraw 4911 ls 4835 malloc 4461 -mdview 18878 -mdview2 27031 mem_test 4555 mouse 4382 openenv 6124 palfile 5406 ptime 5744 -rpgprof 12082 -rpgwalk 10309 -rt_test 5154 -scroll 2974 +rt_test 5187 seek 4188 simple 955 solidt 11531 -space 11272 spranim 9431 spriteclip 4119 sprites 6791 diff --git a/toolchain/size_check.py b/toolchain/size_check.py index 9b9cee7..3316bb1 100644 --- a/toolchain/size_check.py +++ b/toolchain/size_check.py @@ -1,17 +1,23 @@ #!/usr/bin/env python3 """ -size_check.py — размерный регресс-тест: сравнение _CODE всех тестов и -приложений с эталоном docs/size_baseline.tsv. +size_check.py — размерный регресс-тест: сравнение _CODE тестов с эталоном +docs/size_baseline.tsv. Использование: python3 toolchain/size_check.py # сверка с эталоном python3 toolchain/size_check.py --update # перезаписать эталон -Логика: собираем _CODE из .map каждой программы (tests/*, examples/*), -сравниваем с эталоном. Любое отличие печатается; выход 1 — если есть -РОСТ (случайное разжирение libc), 0 — если только уменьшения/без -изменений. Новые программы (нет в эталоне) — предупреждение, добавить -через --update. Запускать после `make all`. +Логика: собираем _CODE из .map каждой программы под tests/, сравниваем с +эталоном. Любое отличие печатается; выход 1 — если есть РОСТ (случайное +разжирение libc), 0 — если только уменьшения/без изменений. Новые +программы (нет в эталоне) — предупреждение, добавить через --update. +Запускать после `make all`. + +ТОЛЬКО tests/, без examples/: регресс ловит разжирение libc, а для этого +хватает мелких тестов — каждый тянет свой кусок библиотеки и пересобирается +за секунды. Крупные приложения (examples/mdview компилируется минутами) +не показывают ничего сверх этого и лишь удлиняют цикл, поэтому и из +`make all` они убраны (см. корневой Makefile). """ import glob @@ -28,7 +34,6 @@ def collect(): sizes = {} pats = [ os.path.join(ROOT, "tests", "*", ".sprinter-cc-*", "*.map"), - os.path.join(ROOT, "examples", "*", ".sprinter-cc-*", "*.map"), ] for pat in pats: for map_path in glob.glob(pat):