# Projekt neve és a fő forrásfájl
TARGET = blinky
SRCS = main.c

# Útvonalak a közös munkaterülethez 
WORKSPACE_DIR = ../..
CMSIS_DIR   = $(WORKSPACE_DIR)/cmsis
TARGET_DIR  = $(WORKSPACE_DIR)/targets/TARGET_LPC11XX

# Add hozzá a közös hardverspecifikus forrásfájlokat
SRCS += $(TARGET_DIR)/system_LPC11xx.c
SRCS += $(TARGET_DIR)/startup_LPC11xx.S

# Kimeneti mappa a helyi projekt könyvtárában
BUILD_DIR = build

# Include útvonalak, hogy a fordító megtalálja a fejlécfájlokat (.h)
INCLUDES = -I. -I$(CMSIS_DIR) -I$(TARGET_DIR)

# Toolchain beállítások
CC      = arm-none-eabi-gcc
OBJCOPY = arm-none-eabi-objcopy
SIZE    = arm-none-eabi-size

# Hardver specifikus kapcsolók (LPC1114 -> Cortex-M0)
CPU = -mcpu=cortex-m0 -mthumb

# Fordítási kapcsolók (Figyelmeztetések és optimalizálás)
CFLAGS = $(CPU) -c -g -O3 -Wall -ffunction-sections -fdata-sections $(INCLUDES)
ASFLAGS = $(CPU) -c -g

# Linker kapcsolók
LDSCRIPT = $(TARGET_DIR)/LPC1114.ld
LDFLAGS = $(CPU) -nostartfiles -Wl,--gc-sections -T$(LDSCRIPT) -Wl,-Map=$(BUILD_DIR)/$(TARGET).map --specs=nosys.specs
# Objektum fájlok generálása (Mindent a helyi build/ mappába gyűjt)
OBJS = $(addprefix $(BUILD_DIR)/, $(addsuffix .o, $(basename $(notdir $(SRCS)))))

# -----------------------------------------------------------------------------
# FORDÍTÁSI SZABÁLYOK (TARGETS)
# -----------------------------------------------------------------------------

# Alapértelmezett cél: mappa ellenőrzése, és a .bin elkészítése
# HA KÉSŐBB HEX IS KELL: Csak töröld ki a '#' jelet a sor végéről!
all: $(BUILD_DIR) $(BUILD_DIR)/$(TARGET).bin $(BUILD_DIR)/$(TARGET).hex

# Helyi build mappa létrehozása Windows-barát módon
$(BUILD_DIR):
	@if not exist $(BUILD_DIR) mkdir $(BUILD_DIR)

# Szabály a helyi .c fájlokhoz (main.c)
$(BUILD_DIR)/%.o: %.c
	$(CC) $(CFLAGS) $< -o $@

# Szabály a távoli targets/.c fájlokhoz (system_LPC11xx.c)
$(BUILD_DIR)/%.o: $(TARGET_DIR)/%.c
	$(CC) $(CFLAGS) $< -o $@

# Szabály a távoli targets/.S assembly fájlhoz (startup_LPC11xx.S)
$(BUILD_DIR)/%.o: $(TARGET_DIR)/%.S
	$(CC) $(ASFLAGS) $< -o $@

# ELF fájl linkelése az objektumokból
$(BUILD_DIR)/$(TARGET).elf: $(OBJS)
	$(CC) $(LDFLAGS) $(OBJS) -o $@
	$(SIZE) $@

# BIN fájl konvertálása az ELF-ből
$(BUILD_DIR)/$(TARGET).bin: $(BUILD_DIR)/$(TARGET).elf
	$(OBJCOPY) -O binary $< $@

# HEX fájl konvertálása az ELF-ből – EGYELŐRE KIKOMMENTELVE
$(BUILD_DIR)/$(TARGET).hex: $(BUILD_DIR)/$(TARGET).elf
	$(OBJCOPY) -O ihex $< $@


# Tiszta lap: a teljes helyi build mappa gyalulása
clean:
	@if exist $(BUILD_DIR) rmdir /s /q $(BUILD_DIR)

.PHONY: all clean