Подготовить автономную сборку и запуск перед разделением проектов

This commit is contained in:
Александр Петров
2026-09-15 23:04:04 +03:00
parent 5323b168a7
commit 0e74aaa7ee
116 changed files with 6908 additions and 333 deletions
+44 -26
View File
@@ -1,10 +1,9 @@
# app.mk — shared Makefile fragment for any standalone Sprinter ESTEX
# program — used both by libc feature tests under tests/ and by real
# applications under examples/.
# program. Приложение может лежать вне репозитория тулкита.
#
# Usage in a per-program Makefile:
#
# PROJ_ROOT := $(abspath $(CURDIR)/../..)
# SPRINTER_ROOT := /путь/к/C-Compiler
# EXAMPLE := my_program # base name (matches my_program.c)
#
# # Optional overrides (any combination):
@@ -28,24 +27,43 @@
# all build $(EXAMPLE).exe (default)
# clean remove build artefacts
# floppy build the example and pack it (alone, plus EXTRA_DATA) into
# mame/v306/IMG/mc.img — useful for trying a single program
# without rebuilding every example. Top-level `make floppy`
# (in the repo root) still packs all examples.
# build/media/$(EXAMPLE).img внутри приложения.
# run floppy + launch MAME
ifeq ($(strip $(PROJ_ROOT)$(SPRINTER_ROOT)),)
$(error Задайте SPRINTER_ROOT — путь к установленному Sprinter-CC)
endif
ifeq ($(strip $(PROJ_ROOT)),)
PROJ_ROOT := $(SPRINTER_ROOT)
endif
ifeq ($(strip $(SPRINTER_ROOT)),)
SPRINTER_ROOT := $(PROJ_ROOT)
endif
PYTHON ?= python3
SPRINTER_CC := $(PROJ_ROOT)/bin/sprinter-cc
MKEXE := $(PROJ_ROOT)/toolchain/mkexe/mkexe
LIB := $(PROJ_ROOT)/lib/sprinter.lib
MAME_DIR := $(PROJ_ROOT)/mame/v306
FLOPPY_IMG := $(MAME_DIR)/IMG/mc.img
# ?= — приложение со своим каталогом выхода (applications/SprPoP) держит
# образ у себя и связывает его с MAME символьной ссылкой.
HDD_IMG ?= $(MAME_DIR)/IMG/test_hdd.chd
MAKE_DISK := $(MAME_DIR)/make_disk.py
# Временный fallback для старого общего дерева. После переноса нет MAME
# внутри SDK, поэтому внешний проект задаёт MAME_HOME или отдельные пути.
MAME_HOME ?= $(if $(wildcard $(PROJ_ROOT)/mame/v306/mame.arm),$(PROJ_ROOT)/mame/v306,)
MAME_BIN ?= $(if $(strip $(MAME_HOME)),$(MAME_HOME)/mame.arm,)
MAME_ROMPATH ?= $(if $(strip $(MAME_HOME)),$(MAME_HOME)/roms,)
MAME_DSS_IMAGE ?= $(if $(strip $(MAME_HOME)),$(MAME_HOME)/IMG/dss171u.img,)
MAME_SYSTEM_HDD_IMAGE ?= $(if $(strip $(MAME_HOME)),$(MAME_HOME)/IMG/sp_hdd_sys.chd,)
MAME_BIOS ?= v3.06
FLOPPY_IMG ?= $(CURDIR)/build/media/$(EXAMPLE).img
HDD_IMG ?= $(CURDIR)/build/hdd/$(EXAMPLE).chd
MAKE_DISK := $(PROJ_ROOT)/toolchain/make_disk.py
MAKE_HDD ?= $(PROJ_ROOT)/toolchain/make_hdd.sh
RUN_MAME := $(MAME_DIR)/run_mame.sh
RUN_MAME := $(PROJ_ROOT)/toolchain/run_sprinter_mame.py
CHDMAN_BIN ?= chdman
MAME_PROFILE_ARGS = --mame-home "$(MAME_HOME)" --mame-bin "$(MAME_BIN)" \
--mame-rompath "$(MAME_ROMPATH)" \
--mame-dss-image "$(MAME_DSS_IMAGE)" \
--mame-system-hdd-image "$(MAME_SYSTEM_HDD_IMAGE)" \
--mame-bios "$(MAME_BIOS)"
# Optional knobs — see top of file.
MEMORY ?= tiny
@@ -141,26 +159,26 @@ $(LIB):
clean:
rm -rf $(if $(strip $(BUILD_DIR)),$(BUILD_DIR),.sprinter-cc-* $(EXE))
# `make floppy` packs ONLY this program (+ optional EXTRA_DATA files) into
# the MAME floppy image, replacing whatever was there. Handy for trying a
# single program without rebuilding everything.
# `make floppy` создаёт носитель только этого приложения, без записи в MAME.
floppy: $(EXE)
python3 $(MAKE_DISK) $(FLOPPY_IMG) $(EXE) $(EXTRA_DATA)
$(PYTHON) $(MAKE_DISK) "$(FLOPPY_IMG)" $(EXE) $(EXTRA_DATA)
@echo
@echo "Floppy ready: $(FLOPPY_IMG) (with $(EXAMPLE).exe$(if $(EXTRA_DATA), + $(EXTRA_DATA))) "
@echo "Run: cd $(MAME_DIR) && ./run_mame.sh"
@echo "Run: make run MAME_HOME=/путь/к/MAME/runtime"
run: floppy
cd $(MAME_DIR) && ./run_mame.sh
$(PYTHON) $(RUN_MAME) $(MAME_PROFILE_ARGS) --floppy "$(FLOPPY_IMG)"
# `make hdd` packs this program (+ optional EXTRA_DATA files) into the MAME
# HDD image mounted as disk D: (-hard2 test_hdd.chd). Гораздо быстрее FDD —
# используется MCP-мостом к MAME (run_bridge.sh). После пересборки образа
# MAME ОБЯЗАН полный рестарт (chdman -f = новый inode; см. memory).
# `make hdd` кладёт носитель в build/ приложения. Для нового inode после
# пересборки образа запущенный MAME должен быть перезапущен.
hdd: $(EXE)
$(MAKE_HDD) $(if $(strip $(HDD_DEST_DIR)),--dest "$(HDD_DEST_DIR)") $(HDD_IMG) $(HDD_PACK_ARGS)
mkdir -p "$(dir $(HDD_IMG))"
CHDMAN_BIN="$(CHDMAN_BIN)" $(MAKE_HDD) $(if $(strip $(HDD_DEST_DIR)),--dest "$(HDD_DEST_DIR)") "$(HDD_IMG)" $(HDD_PACK_ARGS)
@echo
@echo "HDD (D:) ready: $(HDD_IMG) (with $(EXAMPLE).exe$(if $(EXTRA_DATA), + $(EXTRA_DATA)))"
@echo "ВНИМАНИЕ: перезапусти MAME (run_bridge.sh) — образ пересобран."
@echo "ВНИМАНИЕ: перезапусти MAME — образ пересобран."
.PHONY: all clean floppy run hdd
run-hdd: hdd
$(PYTHON) $(RUN_MAME) $(MAME_PROFILE_ARGS) --hdd "$(HDD_IMG)"
.PHONY: all clean floppy run hdd run-hdd