###############################################################################
# 萝莉3代 接收机固件 - Makefile (SDCC)
# 工具链: sdcc (apt 包,版本 4.2.0)
# MCU:    STC8H1K08-36I-QFN20 (1T 8051 内核,8KB Flash,1.25KB RAM)
###############################################################################

PROJECT  := LoliRX
TARGET   := $(PROJECT).ihx
HEX      := $(PROJECT).hex
BIN      := $(PROJECT).bin

# 工具
CC       := sdcc
PACKIHX  := packihx
MAKEBIN  := makebin

# 目录
BUILD    := build
INC_DIRS := inc
SRC_DIRS := src

# 源
C_SRCS   := $(wildcard $(SRC_DIRS)/*.c)

# 头
INCLUDES := $(addprefix -I,$(INC_DIRS))

# SDCC 模型: stc8h1k08 是标准 8051,data 区 128 字节,xdata 可扩展
# 用 --model-small 让 data/xdata 自动分配
CFLAGS   := -mmcs51 \
            --model-small \
            --std-sdcc11 \
            --opt-code-size \
            $(INCLUDES)

LDFLAGS  := -mmcs51 \
            --model-small \
            --iram-size 256 \
            --xram-size 512 \
            --code-size 8192 \
            --out-fmt-ihx

# 输出位置
OBJECTS  := $(C_SRCS:$(SRC_DIRS)/%.c=$(BUILD)/%.rel)

.PHONY: all clean flash size

all: $(HEX) $(BIN) size

$(HEX): $(TARGET)
	@$(PACKIHX) $(TARGET) > $(HEX)
	@echo "HEX   <-" $(HEX)

$(BIN): $(TARGET)
	@$(MAKEBIN) -s 8192 $(TARGET) $(BIN)
	@echo "BIN   <-" $(BIN)

$(TARGET): $(OBJECTS)
	@echo "LD    <-" $@
	@$(CC) $(LDFLAGS) -o $@ $(OBJECTS)

$(BUILD)/%.rel: $(SRC_DIRS)/%.c | $(BUILD)
	@echo "CC    <-" $<
	@$(CC) -c $(CFLAGS) -o $@ $<

$(BUILD):
	@mkdir -p $@

size: $(TARGET)
	@echo
	@echo "=== Memory map ==="
	@grep -E "^\s*(ABS,CON)" $(BUILD)/$(PROJECT).map 2>/dev/null | head -20 || \
	  echo "  无 .map 文件"

flash: $(BIN)
	stcgal -p stc8h1k08 -b 115200 $(BIN)

clean:
	@rm -rf $(BUILD) $(HEX) $(BIN) $(TARGET)
	@echo "清理完成"