OUTFILE=firmware
OUTFILE_SRAM=$(OUTFILE)_sram
OUTFILE_FLASH=$(OUTFILE)_flash

TARGET=at91sam7s256
CROSS_COMPILE=arm-elf-
DEV = at91lib
DEV_OBJ = $(DEV)/$(DEV).o
DEV_BOARD = $(DEV)/board
DEV_PERIPHERALS = $(DEV)/peripherals
DEV_UTILITY = $(DEV)/utility
DEV_TARGET = $(DEV_BOARD)/$(TARGET)

AS=$(CROSS_COMPILE)gcc
CC=$(CROSS_COMPILE)gcc
LD=$(CROSS_COMPILE)gcc
OBJCOPY=$(CROSS_COMPILE)objcopy
OBJDUMP=$(CROSS_COMPILE)objdump
CFLAGS=-g -std=c99 -mcpu=arm7tdmi -c -O4 -Wall -D$(TARGET) -I$(DEV) -I$(DEV_BOARD) -I$(DEV_PERIPHERALS) -I$(DEV_UTILITY)
ASFLAGS=-D__ASSEMBLY__ -D$(TARGET) -x assembler-with-cpp -g -mcpu=arm7tdmi -O4 -c -Wall
LDFLAGS=-nostartfiles -Wl,--gc-sections

OBJS = main.o lcd_driver.o

all: flash sram

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

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

$(DEV_OBJ):
	$(MAKE) all -C $(DEV)

flash: $(DEV_OBJ) $(OBJS)
	$(LD) $(LDFLAGS) -T $(DEV_TARGET)/flash.lds -o $(OUTFILE_FLASH).elf $(DEV_OBJ) $(OBJS)
	$(OBJCOPY) --strip-debug --strip-unneeded $(OUTFILE_FLASH).elf -O binary $(OUTFILE_FLASH).bin

sram: $(DEV_OBJ) $(OBJS)
	$(LD) $(LDFLAGS) -T $(DEV_TARGET)/sram.lds -o $(OUTFILE_SRAM).elf $(DEV_OBJ) $(OBJS)
	$(OBJCOPY) --strip-debug --strip-unneeded $(OUTFILE_SRAM).elf -O binary $(OUTFILE_SRAM).bin 

clean:
	$(MAKE) clean -C ./$(DEV)
	rm -f $(OBJS) $(OUTFILE_SRAM).elf $(OUTFILE_SRAM).bin $(OUTFILE_FLASH).elf $(OUTFILE_FLASH).bin

