###############################################################################
# Makefile for the project main
###############################################################################

## General Flags
PROJECT = main
MCU = atmega48
TARGET = main.elf
CC = avr-gcc

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

## Compile options common for all C compilation units.
CFLAGS = $(COMMON)
CFLAGS += -Wall
CFLAGS += -Os
CFLAGS += -Wp,-M,-MP,-MT,$(*F).o,-MF,dep/$(@F).d -Wall -pedantic
# print information
#CFLAGS += -Q  

#CFLAGS += -fno-inline
#-functions
# -gdwarf-2 

## Assembly specific flags
ASMFLAGS = $(COMMON)
ASMFLAGS += -x assembler-with-cpp -Wa
#,-gdwarf2ui

## Linker flags
LDFLAGS = $(COMMON)
LDFLAGS += -Os --strip-all -Wall
#LDFLAGS += -Wl,-u,vfprintf -lprintf_min
# floting point in vprintf
#LDFLAGS += -Wl,-u,vfprintf -lprintf_flt -lm


## 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
HEX_EEPROM_FLAGS =

## Objects that must be built in order to link
OBJECTS  = main.o reset.o 
#OBJECTS += serial.o

## Build
all:  $(TARGET) main.hex main.eep

## Compile
main.o: main.c
	$(CC) $(INCLUDES) $(CFLAGS) -c  $<

pas.o: pas.c
	$(CC) $(INCLUDES) $(CFLAGS) -c  $<

##Link
$(TARGET): $(OBJECTS)
	 $(CC) $(LDFLAGS) $(OBJECTS) $(LIBDIRS) $(LIBS) -o $(TARGET)

%.hex: $(TARGET)
	avr-objcopy --strip-all -O ihex $(HEX_FLASH_FLAGS)  $< $@
	avr-size $<

%.eep: $(TARGET)
	avr-objcopy $(HEX_EEPROM_FLAGS) -O ihex $< $@

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


## Clean target
.PHONY: clean
clean:
	-rm -rf $(OBJECTS) main.elf dep/ main.hex main.eep

## Other dependencies
-include $(shell mkdir dep 2>/dev/null) $(wildcard dep/*)

program:
#	'C:\Programme\Atmel\AVR Tools\STK500\Stk500.exe' -cUSB -I125kHz
## internal 8MHz
## 		high                low
## 7	rstdisabl	1		ckdiv8		1
## 6	DWEN		1		ckout		1
## 5	SPIEN		0		sut1		0
## 4	WDTON		0		sut0		0
## 3	EESAVE		1		cksel3		0
## 2	BODLEVEL2	1		cksel2		0
## 1	BODLEVEL2	0		cksel1		1
## 0	BODLEVEL2	0		cksel0		0
	'C:\Programme\Atmel\AVR Tools\STK500\Stk500.exe' -cUSB -I125kHz -dATMega48 -e -EFFFF -fdf62

## external 8MHz
## 		high                low
## 7	rstdisabl	1		ckdiv8		1
## 6	DWEN		1		ckout		1
## 5	SPIEN		0		sut1		0
## 4	WDTON		0		sut0		0
## 3	EESAVE		1		cksel3		1
## 2	BODLEVEL2	1		cksel2		1
## 1	BODLEVEL2	0		cksel1		1
## 0	BODLEVEL2	1		cksel0		1
#	'C:\Programme\Atmel\AVR Tools\STK500\Stk500.exe' -cUSB -I125kHz -dATMega168 -e -EFFFF -fddcf

	'C:\Programme\Atmel\AVR Tools\STK500\Stk500.exe' -cUSB -I125kHz -dATMega48 -ifmain.hex -pf -vf
# LOCK BITS
#	'C:\Programme\Atmel\AVR Tools\STK500\Stk500.exe' -cUSB -dATMega168 -l00
	
