BOARD = board
PERIPHERALS = peripherals
UTILITY = utility

TARGET=at91sam7s256
CROSS_COMPILE=arm-elf-
AS=$(CROSS_COMPILE)gcc
CC=$(CROSS_COMPILE)gcc
LD=$(CROSS_COMPILE)gcc
CFLAGS=-g -mcpu=arm7tdmi -c -O4 -Wall -D$(TARGET) -I. -I$(BOARD) -I$(PERIPHERALS) -I$(UTILITY)
ASFLAGS=-D__ASSEMBLY__ -D$(TARGET) -x assembler-with-cpp -g -mcpu=arm7tdmi -O4 -c -Wall
LDFLAGS=-nostartfiles -nostdlib -Wl,-r
OUTFILE = at91lib

BOARD_OBJS = board_cstartup.o board_lowlevel.o board_memories.o
PERIPHICAL_OBJS = adc.o aic.o cp15_asm.o cp15.o eefc.o efc.o dbgu.o pio.o pio_it.o pit.o pmc.o pwmc.o rtt.o twi.o spi.o usart.o
UTILITY_OBJS = led.o math.o stdio.o string.o
OBJS = $(BOARD_OBJS) $(PERIPHICAL_OBJS) $(UTILITY_OBJS)

all: $(OUTFILE)

$(OUTFILE): $(OBJS)
	$(LD) $(LDFLAGS) -o $(OUTFILE).o $(OBJS)

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

%.o : $(BOARD)/%.S
	$(AS) $(ASFLAGS) -o $@ $<

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

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

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

%.o : $(PERIPHERALS)/cp15/%.S
	$(CC) $(CFLAGS) -o $@ $<

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

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

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

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

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

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

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

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

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

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

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

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

clean:
	rm -f $(OUTFILE).o $(OBJS)

