# Define directories, if needed.
DIRARM = C:/PROGRA~1/BBP_BA~1/ARM7_RTOS/
EXTRAINCDIRS = C:/PROGRA~1/BBP_BA~1/ARM7_RTOS/arm-elf/include
DIRARMBIN = $(DIRARM)bin/
DIRARMUTILS = $(DIRARM)utils/bin/

SHELL=cmd

RTOS_SOURCE_DIR=.
DEMO_COMMON_DIR=.

CC=$(DIRARMBIN)arm-elf-gcc
OBJCOPY=$(DIRARMBIN)arm-elf-objcopy
LDSCRIPT=$(DEMO_COMMON_DIR)/atmel-rom.ld

LINKER_FLAGS=-mthumb -nostartfiles -lm -Xlinker -omain.elf -Xlinker -M -Xlinker -Map=main.map -Wl,--gc-sections
# -Wl,--print-gc-sections
#LINKER_FLAGS=-mthumb -nostartfiles -lm -Xlinker -omain.elf -Xlinker -M -Xlinker -Map=main.map 

DEBUG=-g
OPTIM=-Os

CFLAGS= $(DEBUG) \
		$(OPTIM) \
		-T$(LDSCRIPT) \
		-I . \
		-I $(RTOS_SOURCE_DIR) \
		-I $(DEMO_COMMON_DIR) \
		-D SAM7_GCC \
		-D THUMB_INTERWORK \
		-mcpu=arm7tdmi \
		-D PACK_STRUCT_END=__attribute\(\(packed\)\) \
		-D ALIGN_STRUCT_END=__attribute\(\(aligned\(4\)\)\) \
		-fomit-frame-pointer \
		-mthumb-interwork \
		-ffunction-sections	-fdata-sections \
		-std=gnu99
		
												
THUMB_SOURCE= \
		main.c \
		port.c \
		bsp.c \
		spi.c \
		tasks.c \
		queue.c \
		list.c \
		heap_3.c \
		mytasks.c \
		mem_flash.c \
		serial.c \
		tprintf.c \
		Systeme.c  \
                Lib.c      \
                RTC.c \
		BACnet.c   \
		MSTP.c     \
		Conversions.c \
		Souscription.c \
		ObjectsBACnet.c \
		user_control.c \
		taskMSTP.c \
		taskBACnetMSTP.c \
		taskEvents.c \
		taskControl.c

ARM_SOURCE= \
		portISR.c \
		Cstartup_SAM7.c \
		init_app.c \
		syscalls.c \
		uart.c

THUMB_OBJS = $(THUMB_SOURCE:.c=.o)
ARM_OBJS = $(ARM_SOURCE:.c=.o)


all: main.bin

main.bin : main.hex
	$(OBJCOPY) main.elf -O binary main.bin
	$(OBJCOPY) -R .text -R .data -R .init -R .bss main.elf -O binary user_control.bin
	
	 
main.hex : main.elf
	$(OBJCOPY) main.elf -O ihex main.hex

main.elf : $(THUMB_OBJS) $(ARM_OBJS) $(DEMO_COMMON_DIR)/boot.S Makefile
	$(CC) $(CFLAGS) $(ARM_OBJS) $(THUMB_OBJS) $(LIBS) $(DEMO_COMMON_DIR)/boot.S $(LINKER_FLAGS) 

$(THUMB_OBJS) : %.o : %.c Makefile FreeRTOSConfig.h
	$(CC) -c $(CFLAGS) -mthumb $< -o $@

$(ARM_OBJS) : %.o : %.c Makefile FreeRTOSConfig.h
	$(CC) -c $(CFLAGS) $< -o $@

clean :
	$(DIRARMUTILS)rm $(THUMB_OBJS)
	$(DIRARMUTILS)rm $(ARM_OBJS)
	$(DIRARMUTILS)touch Makefile
	$(DIRARMUTILS)rm main.elf
	$(DIRARMUTILS)rm main.hex
	
