#################################################################
#      Эти переменные надо подстроить под конкретный проект     #
#################################################################

# Имя выходного файла
EXE=OR-AVR-M64-S

# Тип МК
MCU_FLAGS=-mmcu=atmega128

# Тактовая частота процессора
F_CPU=7372800UL

# Исходники (через пробел)
SRC = main.c

# Уровень оптимизации (0, 1, 2, 3, s)
OPTIMIZATION=s


################################################################
#   Все что ниже менять не надо, если не знаешь что делаешь    #
################################################################

CROSS_COMPILE_GCC=avr-
CROSS_COMPILE_BIN=avr-

AS = $(CROSS_COMPILE_BIN)as
CC = $(CROSS_COMPILE_GCC)gcc
CPLUSPLUS = $(CROSS_COMPILE_GCC)g++
OBJCOPY = $(CROSS_COMPILE_BIN)objcopy


DEBUG = -g
CFLAGS =  -DF_CPU=$(F_CPU) -I. -Wall -Werror -O$(OPTIMIZATION) $(MCU_FLAGS) $(DEBUG)
ASFLAGS = -I. $(MCU_FLAGS) -xassembler-with-cpp
LDFLAGS =

APPOBJS = $(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(SRC)))

COFFCONVERT=$(OBJCOPY) --debugging \
   -O coff-ext-avr \
	--change-section-address .data-0x800000 \
	--change-section-address .bss-0x800000 \
	--change-section-address .noinit-0x800000

all: $(EXE).hex

$(EXE).hex: $(EXE).elf
	$(OBJCOPY) -j .text -j .data -j .bootloader -O ihex \
		$(EXE).elf $(EXE).hex
	chmod -x $(EXE).hex $(EXE).elf

$(EXE).elf: $(APPOBJS)
	$(CC) $(CFLAGS) ${LDFLAGS} -o $(EXE).elf \
		$(APPOBJS) \
		-Wl,--Map=$(EXE).map

cof : $(EXE).elf
	$(COFFCONVERT) -O coff-ext-avr $< $(EXE).cof

%.o : %.c

%.o : %.cpp

%.o : %.S


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

%.o: %.cpp
	$(CPLUSPLUS) $(CFLAGS) $(LDFLAGS) -c -o $@ $<

%.o: %.S
	$(CC) $(ASFLAGS) -c -o $@ $<


clean:
	rm -rf `find -name '*.o' -o  -name '*.lst' -o -name ${EXE}.hex -o -name $(EXE).elf -o -name $(EXE).map`

force: clean all

program: $(EXE).hex
	avrdude -p m128 -c stk500v2 -P /dev/ttyUSB0 -b 115200 -U flash:w:$(EXE).hex


