############################################################################################
# Makefile for the project AVR2068 Target using library
############################################################################################
# $Id: Makefile 31427 2012-03-23 09:15:56Z shweta.chauhan $

# Build specific properties
_TAL_TYPE = AT86RF231
_PAL_TYPE = AT32UC3A3256
_PAL_GENERIC_TYPE = AVR32
_SAL_TYPE = AT86RF2xx
_BOARD_TYPE = RZ600_231
_HIGHEST_STACK_LAYER = RF4CE
_LIB_TYPE = Target



# Path variables
## Path to main project directory
MAIN_DIR = ../../../../..
APP_DIR = ../..
PATH_APP = $(MAIN_DIR)/Applications
PATH_TAL = $(MAIN_DIR)/TAL
PATH_MAC = $(MAIN_DIR)/MAC
PATH_TAL_CB = $(MAIN_DIR)/TAL/Src
PATH_PAL = $(MAIN_DIR)/PAL
PATH_USB = $(MAIN_DIR)/USB_HID
PATH_RES = $(MAIN_DIR)/Resources
PATH_RF4CE = $(MAIN_DIR)/RF4CE
PATH_GLOB_INC = $(MAIN_DIR)/Includes

## General Flags
PROJECT = AVR2068_Target
PART=uc3a3256
TARGET_DIR = .
TARGET = $(TARGET_DIR)/$(PROJECT).elf
CC = avr32-gcc

## Options common to compile, link and assembly rules
COMMON = -mpart=$(PART)

## Compile options common for all C compilation units.
CFLAGS = $(COMMON)
CFLAGS += -Wall -Wundef -g -std=gnu99 -O0 -D_STDDEF_H
CFLAGS += -DDEBUG=0
CFLAGS += -DZRC_PROFILE -DPBP_REC -DZRC_CMD_DISCOVERY
CFLAGS += -DVENDOR_DATA
CFLAGS += -DRF4CE_TARGET
CFLAGS += -DRF4CE_SECURITY
CFLAGS += -DCHANNEL_AGILITY
CFLAGS += -DRF4CE_CALLBACK_PARAM
CFLAGS += -DMAC_USER_BUILD_CONFIG
CFLAGS += -DNLDE_HANDLE
CFLAGS += -DADC_ACCELEROMETER
CFLAGS += -DTAL_TYPE=$(_TAL_TYPE)
CFLAGS += -DPAL_GENERIC_TYPE=$(_PAL_GENERIC_TYPE)
CFLAGS += -DPAL_TYPE=$(_PAL_TYPE)
CFLAGS += -DBOARD_TYPE=$(_BOARD_TYPE)
CFLAGS += -DHIGHEST_STACK_LAYER=$(_HIGHEST_STACK_LAYER)
CFLAGS += -MD -MP -MT $(*F).o -MF dep/$(@F).d

## Assembly specific flags
ASMFLAGS = $(COMMON)

ASMFLAGS += -x assembler-with-cpp -c

## Linker flags
LDFLAGS = $(COMMON) -Wl,-Map=$(TARGET_DIR)/$(PROJECT).map
LDFLAGS += -Wl,--section-start=.flash_nvram_adr=0x8001F000

## Intel Hex file production flags
HEX_FLASH_FLAGS = -R .eeprom

HEX_EEPROM_FLAGS = -j .eeprom
HEX_EEPROM_FLAGS += --set-section-flags=.eeprom="alloc,load"
HEX_EEPROM_FLAGS += --change-section-lma .eeprom=0 --no-change-warnings

## Include directories for application
INCLUDES = -I $(APP_DIR)/Inc
INCLUDES += -I ../../Inc
## Include directories for general includes
INCLUDES += -I $(MAIN_DIR)/Include
INCLUDES += -I $(PATH_USB)/Inc/
## Include directories for resources
INCLUDES += -I $(MAIN_DIR)/Resources/Buffer_Management/Inc/
INCLUDES += -I $(MAIN_DIR)/Resources/Queue_Management/Inc/
## Include directories for MAC
INCLUDES += -I $(MAIN_DIR)/MAC/Inc/
## Include directories for TAL
INCLUDES += -I $(MAIN_DIR)/TAL/Inc/
INCLUDES += -I $(MAIN_DIR)/TAL/$(_TAL_TYPE)/Inc/
## Include directories for PAL
INCLUDES += -I $(MAIN_DIR)/PAL/Inc/
INCLUDES += -I $(MAIN_DIR)/PAL/$(_PAL_GENERIC_TYPE)/Generic/Inc
INCLUDES += -I $(MAIN_DIR)/PAL/$(_PAL_GENERIC_TYPE)/$(_PAL_TYPE)/Inc/
## Include directories for specific boards type
INCLUDES += -I $(MAIN_DIR)/PAL/$(_PAL_GENERIC_TYPE)/$(_PAL_TYPE)/Boards/
INCLUDES += -I $(MAIN_DIR)/PAL/$(_PAL_GENERIC_TYPE)/$(_PAL_TYPE)/Boards/$(_BOARD_TYPE)
## Include directories for RF4CE
INCLUDES += -I $(MAIN_DIR)/RF4CE/Inc/

## Library Directories
LIBDIRS = -L $(MAIN_DIR)/RF4CE/ZRC_Lib/AT86RF231_AT32UC3A3256S_RZ600/GCC

## Libraries
LIBS = -l_$(_LIB_TYPE)


## Objects that must be built in order to link
OBJECTS = $(TARGET_DIR)/main.o \
	$(TARGET_DIR)/pal_usb.o \
	$(TARGET_DIR)/qtouch_debug_frame.o \
	$(TARGET_DIR)/sysclk.o \
	$(TARGET_DIR)/udc.o \
	$(TARGET_DIR)/udi_hid.o \
	$(TARGET_DIR)/udi_hid_generic.o \
	$(TARGET_DIR)/udi_hid_generic_desc.o \
	$(TARGET_DIR)/usbb_device.o \
	$(TARGET_DIR)/vendor_data.o 
	#$(TARGET_DIR)/exception.o 
	#$(TARGET_DIR)/intc.o 

## Objects explicitly added by the user
LINKONLYOBJECTS =

## Build
all: $(TARGET) $(TARGET_DIR)/$(PROJECT).hex $(TARGET_DIR)/$(PROJECT).eep $(TARGET_DIR)/$(PROJECT).lss size

## Compile
$(TARGET_DIR)/main.o: $(APP_DIR)/Src/main.c
	$(CC) $(INCLUDES) $(CFLAGS) -c $<
$(TARGET_DIR)/pal_usb.o: $(PATH_USB)/Src/pal_usb.c
	$(CC) $(INCLUDES) $(CFLAGS) -c $<
$(TARGET_DIR)/qtouch_debug_frame.o: $(APP_DIR)/Src/qtouch_debug_frame.c
	$(CC) $(INCLUDES) $(CFLAGS) -c $<
$(TARGET_DIR)/sysclk.o: $(PATH_USB)/Src/ATUC3A3256S/sysclk.c
	$(CC) $(INCLUDES) $(CFLAGS) -c $<
#$(TARGET_DIR)/intc.o: $(PATH_USB)/Src/ATUC3A3256S/intc.c
	#$(CC) $(INCLUDES) $(CFLAGS) -c $<
$(TARGET_DIR)/udc.o: $(PATH_USB)/Src/udc.c
	$(CC) $(INCLUDES) $(CFLAGS) -c $<
$(TARGET_DIR)/udi_hid.o: $(PATH_USB)/Src/udi_hid.c
	$(CC) $(INCLUDES) $(CFLAGS) -c $<
$(TARGET_DIR)/udi_hid_generic.o: $(PATH_USB)/Src/udi_hid_generic.c
	$(CC) $(INCLUDES) $(CFLAGS) -c $<
$(TARGET_DIR)/udi_hid_generic_desc.o: $(PATH_USB)/Src/udi_hid_generic_desc.c
	$(CC) $(INCLUDES) $(CFLAGS) -c $<
$(TARGET_DIR)/usbb_device.o: $(PATH_USB)/Src/usbb_device.c
	$(CC) $(INCLUDES) $(CFLAGS) -c $<
$(TARGET_DIR)/vendor_data.o: $(APP_DIR)/Src/vendor_data.c
	$(CC) $(INCLUDES) $(CFLAGS) -c $<
#$(TARGET_DIR)/exception.o: $(PATH_USB)/Src/ATUC3A3256S/exception.S
	#avr32-gcc -x assembler-with-cpp -c -mpart=uc3a3256s -Wa,-g $(INCLUDES) -Wa,-g3 -o $@ $<
##Link
$(TARGET): $(OBJECTS)
	 $(CC) $(LDFLAGS) $(OBJECTS) $(LINKONLYOBJECTS) $(LIBDIRS) $(LIBS) -o $(TARGET)

%.hex: $(TARGET)
	avr32-objcopy -O ihex $(HEX_FLASH_FLAGS)  $< $@

%.eep: $(TARGET)
	avr32-objcopy $(HEX_EEPROM_FLAGS) -O ihex $< $@ || exit 0

%.lss: $(TARGET)
	avr32-objdump -h -S $< > $@

size: ${TARGET}
	@echo
	@avr32-size -Bd $<

## Clean target
.PHONY: clean
clean:
	-rm -rf $(TARGET_DIR)/*.o $(TARGET_DIR)/$(PROJECT).elf dep/* $(TARGET_DIR)/$(PROJECT).hex $(TARGET_DIR)/$(PROJECT).eep

##Options for null device
ifdef windir
NULLDEV = NUL:
else
ifdef WINDIR
NULLDEV = NUL:
else
NULLDEV = /dev/null
endif
endif
## Other dependencies
-include $(shell mkdir dep 2>$(NULLDEV)) $(wildcard dep/*)
