#===============================================================================
# export variables
#===============================================================================

TARGET := str_bit
LOAD_ADDR = 0x0

#
# Include the make variables (CC, etc...)
#
AS	= $(CROSS_COMPILE)as
LD	= $(CROSS_COMPILE)ld
CC	= $(CROSS_COMPILE)gcc
CPP	= $(CC) -E
AR	= $(CROSS_COMPILE)ar
NM	= $(CROSS_COMPILE)nm
LDR	= $(CROSS_COMPILE)ldr
STRIP	= $(CROSS_COMPILE)strip
OBJCOPY = $(CROSS_COMPILE)objcopy
OBJDUMP = $(CROSS_COMPILE)objdump
RANLIB	= $(CROSS_COMPILE)RANLIB

PHONY: help

GREEN="\e[32;1m"
NORMAL="\e[39m"
RED="\e[31m"

LDSCRIPT := linker.lds
LDFLAGS := -Bstatic -T $(LDSCRIPT) -Ttext $(LOAD_ADDR)

CFLAGS += -march=armv8-a -Wall -g -c -fPIC -nostdinc -fno-builtin

SFLAGS := $(CFLAGS)

CSRC  = ${wildcard *.c lib/*.c}
ASRC  = $(wildcard *.S lib/*.S)

COBJS := $(patsubst %.c, %.o, $(CSRC))
AOBJS += $(patsubst %.S, %.o, $(ASRC))

COBJS:=$(COBJS:%.C=%.o)
AOBJS:=$(AOBJS:%.S=%.o)


all: $(AOBJS) $(COBJS)
	$(LD) $^ $(LDFLAGS) -Map $(TARGET).map -o $(TARGET).elf
	$(OBJCOPY) -O binary $(TARGET).elf $(TARGET).bin
	$(OBJDUMP) $(TARGET).elf -S -D  >$(TARGET).dump

help:
	@echo -e ${GREEN}
	@echo "make CROSS_COMPILE=aarch64-gcc12.2.0-linux- all    -- Build the bin, Use 64bit compiler"
	@echo "make CROSS_COMPILE=aarch64-gcc12.2.0-linux- clean  -- Clean all"
	@echo -e ${NORMAL}

%.o:	%.S
	$(CC)  $(SFLAGS) -o $@ $<

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

.PHONY : clean
clean:
	-rm -rf $(COBJS) $(AOBJS) $(TARGET).elf $(TARGET).bin $(TARGET).map $(LIBS) $(TARGET).dump


