сборка: гигиена (П5) — stale .rel, все тесты в make all, размерный регресс
- lib/Makefile: stale .rel удаляются сверкой списка модулей перед упаковкой; штамп build/.modules триггерит перелинковку при любом изменении состава исходников (при смене списка архив сносится — на exFAT гранулярность mtime грубая, сравнение времён ненадёжно) - top-level TESTS: все каталоги tests/ теперь собираются make all (43 программы; banktest переименован из banked.exe — конфликт имён с tests/banked); mdview2 добавлен в APPS - размерный регресс: toolchain/size_check.py сверяет _CODE всех программ с docs/size_baseline.tsv; make size-check / size-baseline - заголовки: контракт затенения SDCC задокументирован в docs/libc-headers.md; новый string.h (include_next + strlwr/strupr); из sprinter_compat.h убраны макросы min/max — конфликтовали с функциями из stdlib.h, и в Solid-C min/max тоже функции Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
+20
-1
@@ -36,6 +36,16 @@ RUNTIME_RELS := $(patsubst runtime/%.s,$(BUILD)/%.rel,$(RUNTIME_S))
|
||||
|
||||
ALL_RELS := $(LIBC_RELS) $(RUNTIME_RELS)
|
||||
|
||||
# Штамп списка модулей: обновляется при любом изменении состава
|
||||
# (добавление/удаление/переименование исходника) — иначе удаление
|
||||
# исходника не триггерит перелинковку и stale .rel остаётся в архиве.
|
||||
# Сразу сносим и архив: на exFAT (SAM8) гранулярность mtime грубая,
|
||||
# и «список изменился» через сравнение времён можно проглядеть.
|
||||
MODLIST := $(BUILD)/.modules
|
||||
ifneq ($(shell cat $(MODLIST) 2>/dev/null),$(ALL_RELS))
|
||||
_ := $(shell mkdir -p $(BUILD); echo "$(ALL_RELS)" > $(MODLIST); rm -f sprinter.lib)
|
||||
endif
|
||||
|
||||
LIB := sprinter.lib
|
||||
|
||||
all: $(LIB)
|
||||
@@ -52,7 +62,16 @@ $(BUILD)/%.rel: $(PROJ_ROOT)/runtime/%.s
|
||||
$(SDASZ80) -o $@ $<
|
||||
|
||||
# Archive — sdar with `rcs` = replace/create/symtab.
|
||||
$(LIB): $(ALL_RELS)
|
||||
# Перед упаковкой удаляем stale .rel: wildcard не знает об удалённых/
|
||||
# переименованных исходниках, и осиротевший .rel из build/ иначе жил бы
|
||||
# вечно (уже кусало: старый file.rel после сплита).
|
||||
$(LIB): $(ALL_RELS) $(MODLIST)
|
||||
@find $(BUILD) -name '*.rel' -print | sort > $(BUILD)/.have
|
||||
@printf '%s\n' $(ALL_RELS) | sort > $(BUILD)/.want
|
||||
@comm -23 $(BUILD)/.have $(BUILD)/.want | while read f; do \
|
||||
echo " stale: $$f (исходник удалён) — rm"; \
|
||||
rm -f "$$f" "$${f%.rel}.asm" "$${f%.rel}.lst" "$${f%.rel}.sym"; \
|
||||
done
|
||||
rm -f $@
|
||||
$(SDAR) -rcs $@ $(ALL_RELS)
|
||||
@echo
|
||||
|
||||
Reference in New Issue
Block a user