CC=arm-none-eabi-gcc
AR=arm-none-eabi-ar
OBJCP=arm-none-eabi-objcopy
OBJDP=arm-none-eabi-objdump
CTAGS=ctags-exuberant
MSG_BLANK = " "


CPU=at91sam7a2
CPU_CORE=arm7tdmi

TGNAME=bootloader
UTGNAME=app

CFLAGS=-Wall -Os -mapcs-frame -std=gnu99
IFLAGS=-Iinc
LFLAGS=-lm -lgcc
CPUFLAGS=-mcpu=$(CPU_CORE)
LDFLAGS_USR=-nostartfiles  -Wl,-Map=$(OUT)/$(TGNAME).map,--cref -T elf32-littlearm-usr.lds -Ttext 0x40600000
CFLAGS+=$(CPUFLAGS)
DFLAGS=

SOURCE=src
OBJ=obj
OUT=bin


OBJECTS=$(OBJ)/can.o \
	 $(OBJ)/at91sam7a2_interrupts.o \
	 $(OBJ)/at91sam7a2_timers.o \
	 $(OBJ)/syscall.o \
	 $(OBJ)/main.o \
	 $(OBJ)/at91sam7a2_pio.o \
	 $(OBJ)/util.o

all: capp dirs $(OBJECTS)
	@echo "Linking object files..."
	$(CC) $(LDFLAGS_USR) $(CFLAGS) $(IFLAGS) $(DFLAGS) $(OBJECTS) -o $(OUT)/$(UTGNAME).elf $(LFLAGS)
	$(OBJCP) --strip-debug --strip-unneeded $(OUT)/$(UTGNAME).elf -O binary $(OUT)/$(UTGNAME).bin
	$(OBJDP) --source -d $(OUT)/$(UTGNAME).elf > $(OUT)/$(UTGNAME).s
	@echo "Done"
	@echo $(MSG_BLANK)

dirs:
	@echo "Creating directories..."
	@if ! [ -e $(OBJ) ]; then echo "Creating directory '$(OBJ)'"; mkdir $(OBJ); fi
	@if ! [ -e $(OUT) ]; then echo "Creating directory '$(OUT)'"; mkdir $(OUT); fi
	@echo $(MSG_BLANK)

capp:
	@echo "COMPILING APPLICATION"
	@echo $(MSG_BLANK)

$(OBJ)/%.o: $(SOURCE)/%.c
	@echo "Compiling c code..."
	$(CC) $(IFLAGS) $(CFLAGS) $(DFLAGS) -o $@ -c $<
	@echo $(MSG_BLANK)

clean:
	@echo "Making distclean..."
	rm -rf $(OUT) $(OBJ)
	@echo $(MSG_BLANK)

