###############################################################################
# Makefile for the project baseTurnerC3Control
###############################################################################

## General Flags
PROJECT = base
MCU = atmega2560
TGT = FullPIB
TARGET = $(TGT).elf
AVR6X = ../avr6.x
CC = avr-gcc

CPP = avr-g++

## Compile options common for all C compilation units.
FULLOPT = -Os
NOOPT = -O0
OPTOPT = $(FULLOPT)


## Options common to compile, link and assembly rules
COMMON = -mmcu=$(MCU)

## Compile options common for all C compilation units.
CFLAGS0 = $(COMMON)
CFLAGS0 += -Wall -std=gnu99  -gdwarf-2 -O0 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
#CFLAGS0 += -DOMIT_BOOT_CHECKING
CFLAGS0 += -MD -MP -MT $(*F).o -MF dep/$(@F).d 
CFLAGS = $(CFLAGS0) $(OPTOPT)



## Assembly specific flags
ASMFLAGS = $(COMMON)
ASMFLAGS += $(CFLAGS)
ASMFLAGS += -x assembler-with-cpp -Wa,-gdwarf2

## Linker flags
LDFLAGS = $(COMMON)
LDFLAGS += -T$(AVR6X) -Wl,-Map=$(TGT).map


## Intel Hex file production flags
HEX_FLASH_FLAGS = -R .eeprom -R .fuse -R .lock -R .signature -R .xdata

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

BINARY_FLAGS = -R .eeprom -R .fuse -R .lock -R .signature -R .xdata -R .boot


## Include Directories
INCLUDES = \
-I".\.." \
-I".\..\include" \
-I".\..\UserCode\include" \
-I".\..\..\..\Micrium\Software\uCOS-II\Source" \
-I".\..\..\..\Micrium\Software\uCOS-II\Ports\AVR\ATmega256\GCC" 

## Objects that must be built in order to link
STAT_TASK_OBJECTS = lrstat.o lrps_command.o

OBJECTS = \
base.o \
uart_isr.o \
os_tmr.o \
os_core.o \
os_dbg_r.o \
os_flag.o \
os_mbox.o \
os_mem.o \
os_mutex.o \
os_q.o \
os_sem.o \
os_task.o \
os_time.o \
os_cpu_c.o \
os_cpu_a.o \
uart.o \
app_hooks.o \
timer.o \
pib.o \
timer_asm.o \
$(STAT_TASK_OBJECTS) \
spidebug.o \
wdtrig.o \
FltPyldComms.o \
user_pressure.o \
User_Health.o \
User_Humidity.o \
user_app_init.o \
User_Leak.o \
MBARI_CO2.o \
SeabirdGPCTD.o \
SeabirdCTD_37SI.o \
Seabird37SI.o \
TeledyneATM-88X.o \
Turner_C3.o \
Turner_C3_Orig.o \
Empty.o \
Power.o \
math.o \
MD5.o \
boot.o \
BootEEPROM.o \
fuses.o 

## Objects explicitly added by the user
LINKONLYOBJECTS = 

## Name of the make file
MAKEFILE = Makefile

## Build
all: $(TARGET) $(TGT).hex $(TGT).eep $(TGT).lss $(TGT).bin size

## Compile
base.o: ../base.c $(MAKEFILE)
	$(CC) $(INCLUDES) $(CFLAGS) -c  $<

uart_isr.o: ../uart_isr.s $(MAKEFILE)
	$(CC) $(INCLUDES) $(ASMFLAGS) -c -Wa,-gstabs $<

os_tmr.o: ../../../Micrium/Software/uCOS-II/Source/os_tmr.c $(MAKEFILE)
	$(CC) $(INCLUDES) $(CFLAGS) -c  $<

os_core.o: ../../../Micrium/Software/uCOS-II/Source/os_core.c $(MAKEFILE)
	$(CC) $(INCLUDES) $(CFLAGS) -c  $<

os_dbg_r.o: ../../../Micrium/Software/uCOS-II/Source/os_dbg_r.c $(MAKEFILE)
	$(CC) $(INCLUDES) $(CFLAGS) -c  $<

os_flag.o: ../../../Micrium/Software/uCOS-II/Source/os_flag.c $(MAKEFILE)
	$(CC) $(INCLUDES) $(CFLAGS) -c  $<

os_mbox.o: ../../../Micrium/Software/uCOS-II/Source/os_mbox.c $(MAKEFILE)
	$(CC) $(INCLUDES) $(CFLAGS) -c  $<

os_mem.o: ../../../Micrium/Software/uCOS-II/Source/os_mem.c $(MAKEFILE)
	$(CC) $(INCLUDES) $(CFLAGS) -c  $<

os_mutex.o: ../../../Micrium/Software/uCOS-II/Source/os_mutex.c $(MAKEFILE)
	$(CC) $(INCLUDES) $(CFLAGS) -c  $<

os_q.o: ../../../Micrium/Software/uCOS-II/Source/os_q.c $(MAKEFILE)
	$(CC) $(INCLUDES) $(CFLAGS) -c  $<

os_sem.o: ../../../Micrium/Software/uCOS-II/Source/os_sem.c $(MAKEFILE)
	$(CC) $(INCLUDES) $(CFLAGS) -c  $<

os_task.o: ../../../Micrium/Software/uCOS-II/Source/os_task.c $(MAKEFILE)
	$(CC) $(INCLUDES) $(CFLAGS) -c  $<

os_time.o: ../../../Micrium/Software/uCOS-II/Source/os_time.c $(MAKEFILE)
	$(CC) $(INCLUDES) $(CFLAGS) -c  $<

os_cpu_c.o: ../../../Micrium/Software/uCOS-II/Ports/AVR/ATmega256/GCC/os_cpu_c.c $(MAKEFILE)
	$(CC) $(INCLUDES) $(CFLAGS) -c  $<

os_cpu_a.o: ../../../Micrium/Software/uCOS-II/Ports/AVR/ATmega256/GCC/os_cpu_a.S $(MAKEFILE)
	$(CC) $(INCLUDES) $(ASMFLAGS) -c -Wa,-gstabs $<

uart.o: ../uart.c $(MAKEFILE)
	$(CC) $(INCLUDES) $(CFLAGS) -c  $<

app_hooks.o: ../app_hooks.c $(MAKEFILE)
	$(CC) $(INCLUDES) $(CFLAGS) -c  $<

timer.o: ../timer.c $(MAKEFILE)
	$(CC) $(INCLUDES) $(CFLAGS) -c  $<

pib.o: ../pib.c $(MAKEFILE)
	$(CC) $(INCLUDES) $(CFLAGS) -c  $<

timer_asm.o: ../timer_asm.s $(MAKEFILE)
	$(CC) $(INCLUDES) $(ASMFLAGS) -c -Wa,-gstabs $<

lrstat.o: ../lrstat.c $(MAKEFILE)
	$(CC) $(INCLUDES) $(CFLAGS) -c  $<

lrps_command.o: ../lrps_command.c $(MAKEFILE)
	$(CC) $(INCLUDES) $(CFLAGS) -c  $<

spidebug.o: ../spidebug.c $(MAKEFILE)
	$(CC) $(INCLUDES) $(CFLAGS) -c  $<

wdtrig.o: ../wdtrig.c $(MAKEFILE)
	$(CC) $(INCLUDES) $(CFLAGS) -c  $<

FltPyldComms.o: ../FltPyldComms/FltPyldComms.c $(MAKEFILE)
	$(CC) $(INCLUDES) $(CFLAGS) -c  $<

user_pressure.o: ../UserCode/HealthStatus/user_pressure.c $(MAKEFILE)
	$(CC) $(INCLUDES) $(CFLAGS) -c  $<

User_Health.o: ../UserCode/HealthStatus/User_Health.c $(MAKEFILE)
	$(CC) $(INCLUDES) $(CFLAGS) -c  $<

User_Humidity.o: ../UserCode/HealthStatus/User_Humidity.c $(MAKEFILE)
	$(CC) $(INCLUDES) $(CFLAGS) -c  $<

user_app_init.o: ../UserCode/user_app_init.c $(MAKEFILE)
	$(CC) $(INCLUDES) $(CFLAGS) -c  $<

User_Leak.o: ../UserCode/HealthStatus/User_Leak.c $(MAKEFILE)
	$(CC) $(INCLUDES) $(CFLAGS) -c  $<

SeabirdGPCTD.o: ../UserCode/SeabirdGPCTD/SeabirdGPCTD.c $(MAKEFILE)
	$(CC) $(INCLUDES) $(CFLAGS) -c  $<

SeabirdCTD_37SI.o: ../UserCode/SeabirdCTD_37SI/SeabirdCTD_37SI.c $(MAKEFILE)
	$(CC) $(INCLUDES) $(CFLAGS) -c  $<

Seabird37SI.o: ../UserCode/Seabird37SI/Seabird37SI.c $(MAKEFILE)
	$(CC) $(INCLUDES) $(CFLAGS) -c  $<

TeledyneATM-88X.o: ../UserCode/TeledyneATM-88X/TeledyneATM-88X.c $(MAKEFILE)
	$(CC) $(INCLUDES) $(CFLAGS) -c  $<

Turner_C3.o: ../UserCode/Turner_C3/Turner_C3.c $(MAKEFILE)
	$(CC) $(INCLUDES) $(CFLAGS) -c  $<

Turner_C3_Orig.o: ../UserCode/Turner_C3/Turner_C3_Orig.c $(MAKEFILE)
	$(CC) $(INCLUDES) $(CFLAGS) -c  $<

Empty.o: ../UserCode/Empty/Empty.c $(MAKEFILE)
	$(CC) $(INCLUDES) $(CFLAGS) -c  $<

Power.o: ../UserCode/Power/Power.c $(MAKEFILE)
	$(CC) $(INCLUDES) $(CFLAGS) -c  $<

MBARI_CO2.o: ../UserCode/MBARI_CO2/MBARI_CO2.c $(MAKEFILE)
	$(CC) $(INCLUDES) $(CFLAGS) -c  $<

math.o: ../math.S $(MAKEFILE)
	$(CC) $(INCLUDES) $(ASMFLAGS) -c  $<

MD5.o: ../MD5.c ../MD5.h
	$(CC) $(INCLUDES) $(CFLAGS) -c  $< $(MAKEFILE)

boot.o: ../boot.c ../boot.h ../pibboot.bin ../MD5.h
	$(CC) $(INCLUDES) $(CFLAGS) -c  $< $(MAKEFILE)

BootEEPROM.o: ../BootEEPROM.c $(MAKEFILE)
	$(CC) $(INCLUDES) $(CFLAGS) -c  $<

fuses.o: ../fuses.c $(MAKEFILE)
	$(CC) $(INCLUDES) $(CFLAGS) -c  $<

##Link
$(TARGET): $(OBJECTS) $(AVR6X)
	 $(CC) $(LDFLAGS) $(OBJECTS) $(LINKONLYOBJECTS) $(LIBDIRS) $(LIBS) -o $(TARGET)

$(TGT).hex: $(TARGET)
	avr-objcopy -O ihex $(HEX_FLASH_FLAGS)  $< $@

$(TGT).eep: $(TARGET)
	-avr-objcopy $(HEX_EEPROM_FLAGS) -O ihex $< $@ || exit 0

$(TGT).lss: $(TARGET)
	avr-objdump -h -S $< > $@

$(TGT).bin: $(TARGET)
	avr-objcopy -O binary $(BINARY_FLAGS) $< $@ || exit 0
	
size: ${TARGET}
	@echo
	@avr-size -C --mcu=${MCU} ${TARGET}

## Clean target
.PHONY: clean
clean:
	-rm -rf $(OBJECTS) $(TGT).elf dep/* $(TGT).hex $(TGT).eep $(TGT).lss $(TGT).map $(TGT).bin


## Other dependencies
-include $(shell mkdir dep 2>/dev/null) $(wildcard dep/*)

