# 文件名: Makefile

# --- Toolchain ---
# 确保你的 arm-none-eabi-gcc 在系统 PATH 中
CROSS_COMPILE ?= arm-none-eabi-
CC      := $(CROSS_COMPILE)gcc
LD      := $(CROSS_COMPILE)ld
SIZE    := $(CROSS_COMPILE)size

# --- Configuration ---
OUTPUT_NAME := hp_peanut  # <--- 修改了输出文件名
OUTPUT_ELF  := $(OUTPUT_NAME).elf
OBJDIR      := build
LINKER_SCRIPT := link.ld

# 指向包含 peanut_gb.h 的目录，当前目录用 '.'
INCLUDES := -I. 

# --- Flags ---
# -ffreestanding 和 -nostdlib 是关键，因为我们没有标准库
CFLAGS := -mcpu=arm926ej-s -marm -mfloat-abi=soft \
          -Ofast -g -Wall \
          -fPIC -ffreestanding -nostdlib \
          $(INCLUDES)

# Linker Flags
# -shared 生成位置无关的可加载库
LDFLAGS := -shared -Bsymbolic --no-undefined -T $(LINKER_SCRIPT)

# 获取 libgcc.a 的路径，链接器需要它来处理一些编译器内置函数
LIBGCC := $(shell $(CC) $(CFLAGS) -print-libgcc-file-name)

# --- Sources ---
# 只需要编译这一个文件
SRCS := hp_peanut.c # <--- 修改了源文件名
OBJS := $(addprefix $(OBJDIR)/, $(SRCS:.c=.o))

# --- Rules ---
all: $(OUTPUT_ELF)

$(OUTPUT_ELF): $(OBJS)
	@echo "[LD] $@"
	@$(LD) $(LDFLAGS) $(OBJS) '$(LIBGCC)' -o $@
	@echo "[SIZE]"
	@$(SIZE) $@

$(OBJDIR)/%.o: %.c | $(OBJDIR)
	@echo "[CC] $<"
	@$(CC) $(CFLAGS) -c $< -o $@

$(OBJDIR):
	@mkdir -p $(OBJDIR)

clean:
	@rm -rf $(OBJDIR) $(OUTPUT_ELF)

rebuild: clean all
