# Makefile zum direkten Programmieren eines Arduino UNO Boards
 
TARGET=main
MCU=atmega328p
SOURCES=main.c

#Pfad zum include-Verzeichnis (muss nicht immer angegeben werden)
PATH_TO_INCLUDE=-I /usr/avr/sys-root/include

PROGRAMMER=arduino
#auskommentieren für automatische Wahl
PORT=-P/dev/ttyACM0
BAUD=-b115200

#Ab hier nichts verändern, außer man weiß was man tut :-))
OBJECTS=$(SOURCES:.c=.o)
CFLAGS=-c -Os
LDFLAGS=

all: hex eeprom

hex: $(TARGET).hex

eeprom: $(TARGET)_eeprom.hex

$(TARGET).hex: $(TARGET).elf
	avr-objcopy -O ihex -j .data -j .text $(TARGET).elf $(TARGET).hex

$(TARGET)_eeprom.hex: $(TARGET).elf
	avr-objcopy -O ihex -j .eeprom --change-section-lma .eeprom=1 $(TARGET).elf $(TARGET)_eeprom.hex

$(TARGET).elf: $(OBJECTS)
	avr-gcc $(LDFLAGS) -mmcu=$(MCU) $(OBJECTS) -o $(TARGET).elf

.c.o:
	avr-gcc $(CFLAGS) -mmcu=$(MCU) $< -o $@ -g $(PATH_TO_INCLUDE)

size:
	avr-size --mcu=$(MCU) -C $(TARGET).elf

program:
	avrdude -p$(MCU) $(PORT) $(BAUD) -v -c$(PROGRAMMER) -Uflash:w:$(TARGET).hex:a

# Zusätzliche Optionen für das Löschen von temporären Dateien
	
#clean_tmp:
#	rm -rf *.o
#	rm -rf *.elf

#clean:
#	rm -rf *.o
#	rm -rf *.elf
#	rm -rf *.hex
