# ---- Toolchain ------------------------------------------------
TOOLCHAIN_DIR := ../../arm-gnu-toolchain-14.3.rel1-x86_64-aarch64-none-linux-gnu
TOOLCHAIN_BIN := $(TOOLCHAIN_DIR)/bin
CROSS_PREFIX  := aarch64-none-linux-gnu-

CC      := $(TOOLCHAIN_BIN)/$(CROSS_PREFIX)gcc
CXX     := $(TOOLCHAIN_BIN)/$(CROSS_PREFIX)g++
OBJCOPY := $(TOOLCHAIN_BIN)/$(CROSS_PREFIX)objcopy
OBJDUMP := $(TOOLCHAIN_BIN)/$(CROSS_PREFIX)objdump
SIZE    := $(TOOLCHAIN_BIN)/$(CROSS_PREFIX)size
NM      := $(TOOLCHAIN_BIN)/$(CROSS_PREFIX)nm
STRIP   := $(TOOLCHAIN_BIN)/$(CROSS_PREFIX)strip

# ---- Project --------------------------------------------------
TARGET := chg_period
SRC    := chg_period.c


# build outputs go here
BUILD_DIR := build

# object/output files under build/
OBJ  := $(BUILD_DIR)/$(SRC:.c=.o)
ELF  := $(BUILD_DIR)/$(TARGET)
MAP  := $(BUILD_DIR)/$(TARGET).map
DUMP := $(BUILD_DIR)/$(TARGET).objdump

# ---- Target CPU tuning ---------------------------------------
# Choose one:
#   make CPU=cortex-a55
#   make CPU=cortex-a76
CPU ?= cortex-a55

# For AArch64 Linux user apps, -mcpu is usually sufficient.
ARCH_CFLAGS := -mcpu=$(CPU)

# ---- Sysroot (optional but recommended for real target rootfs) -
# If you have a target rootfs (e.g. from Yocto/Buildroot), set:
#   make SYSROOT=/path/to/target/rootfs
SYSROOT ?=
ifneq ($(SYSROOT),)
SYSROOT_FLAGS := --sysroot=$(SYSROOT)
else
SYSROOT_FLAGS :=
endif

# ---- Build flags ----------------------------------------------
CSTD    ?= -std=c11
CFLAGS  := -O0 -g3 -Wall -Wextra $(ARCH_CFLAGS)
CFLAGS  += $(CSTD) $(ARCH_CFLAGS) $(SYSROOT_FLAGS)
CFLAGS  += -ffunction-sections -fdata-sections
LDFLAGS := -Wl,-Map=$(MAP) -Wl,--gc-sections $(SYSROOT_FLAGS)
LDLIBS  := -lpthread

# ---- Build rules ----------------------------------------------
all: $(ELF) $(DUMP)

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

$(ELF): $(OBJ) | $(BUILD_DIR)
	$(CC) $(OBJ) $(LDFLAGS) $(LDLIBS) -o $@

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

$(DUMP): $(ELF) | $(BUILD_DIR)
	$(OBJDUMP) -d -h -S $< > $@

# ---- Utilities -------------------------------------------------
size: $(ELF)
	$(SIZE) $<

clean:
	rm -rf $(BUILD_DIR)

.PHONY: all clean size
