# 项目名称和输出目录
PRONAME := lks32mc09x_demo
BUILD_DIR := build
OUT_DIR := out

# 目录路径
PERIPH_DRIVER_DIR := ../lks32mc09x_periph_driver/include

# 工具链
CC := arm-none-eabi-gcc
AR := arm-none-eabi-ar
LD := arm-none-eabi-ld
OBJCOPY := arm-none-eabi-objcopy
OBJDUMP := arm-none-eabi-objdump
NM := arm-none-eabi-nm

# 芯片型号
CHIP_MODELS := 09

# 编译选项
CFLAGS := -std=c99 -mcpu=cortex-m0 -c -funsigned-char -gdwarf-4 -Os -ffunction-sections -I$(PERIPH_DRIVER_DIR) -MMD --specs=nosys.specs

LDFLAGS := -xc -std=c99 -mcpu=cortex-m0 -funsigned-char -gdwarf-4 -Os -ffunction-sections -mthumb -Wl,--gc-sections -specs=nosys.specs

# 源文件和生成文件模式
vpath %.c ../Source/
vpath %.c ../lks32mc09x_periph_driver/source/
vpath %.c ../lks32mc09x_periph_driver/include/

C_FILE := $(wildcard ../Source/*.c) $(wildcard ../lks32mc09x_periph_driver/source/*.c)
S_FILE := $(wildcard *.s)
O_FILE = $(patsubst %.c,$(BUILD_DIR)/%.o,$(notdir $(C_FILE))) $(patsubst %.s,$(BUILD_DIR)/%.o,$(notdir $(S_FILE)))
AXF_FILE := $(OUT_DIR)/$(PRONAME).axf
BIN_FILE := $(OUT_DIR)/$(PRONAME).bin
HEX_FILE := $(OUT_DIR)/$(PRONAME).hex


# 主目标
all: $(BUILD_DIR) $(OUT_DIR) $(BIN_FILE) $(HEX_FILE)

$(BUILD_DIR):
	@mkdir $(BUILD_DIR)
$(OUT_DIR):
	@mkdir $(OUT_DIR)

$(BUILD_DIR)/%.o: %.c
	@$(CC) $(CFLAGS) -c -o $@ $<

$(BUILD_DIR)/%.o: %.s
	@$(CC) $(CFLAGS) -c -o $@ $<

$(AXF_FILE): $(O_FILE)
	@$(CC) $^ $(LDFLAGS) -Tlks32mc09x_gcc.ld -o $@

$(BIN_FILE): $(AXF_FILE)
	@$(OBJCOPY) -O binary $< $@

$(HEX_FILE): $(AXF_FILE)
	@$(OBJCOPY) -O ihex $< $@

# 依赖文件
-include $(wildcard $(BUILD_DIR)/*.d)

clean:
ifeq ($(OS),Windows_NT)
	@del /Q $(BUILD_DIR)\* 2>nul
	@del /Q $(OUT_DIR)\* 2>nul
	@rmdir /S /Q $(BUILD_DIR) 2>nul
	@rmdir /S /Q $(OUT_DIR) 2>nul
else
	@rm -f $(BUILD_DIR)/*
	@rm -f $(OUT_DIR)/*
	@rmdir $(BUILD_DIR) 2>/dev/null || true
	@rmdir $(OUT_DIR) 2>/dev/null || true
endif
