# Optionen für den GCC-Compiler
CFLAGS = -gstabs -Wall -Os -std=c99 -I. -mmcu=atmega32
# Befehl für Compiler
CC = avr-gcc

# TODO: Hier für alle .c Dateien die zu erzeugenden .o Dateien hineinschreiben (durch Spaces getrennt)
OBJ = test.o

# all: wird bei Aufruf von "make" ausgeführt
all: clean main.hex

clean:
	-rm *.o *.bin *.hex *.eep *.lst

.c.o:
	# c-Datei kompilieren
	$(CC) $(CFLAGS) -c $< -o $@ -Wa,-adhlns=$(<:.c=.lst)
.S.o:
	# S-Datei (Assembler) kompilieren
	$(CC) $(CFLAGS) -x assembler-with-cpp -c $< -o $@

main.bin: $(OBJ)
	# Objekt-Dateien linken
	$(CC) $(CFLAGS) -o main.bin $(OBJ) $(LDFLAGS)

main.hex: main.bin
	# Hex-Beschreibung für Programm-/EEPROM-Speicher extrahieren
	rm -f main.hex main.eep.hex
	avr-objcopy -j .text -j .data -O ihex main.bin main.hex
	avr-objcopy -j .eeprom -O ihex main.bin main.eep
	avr-size main.bin

# Verbindung zum Prozessor testen
prog_sense:
	avrdude -c stk200 -p atmega32

# Hex-Datei (Programm) in den Prozessor herunterladen
prog_do:
	avrdude -c stk200 -p atmega32 -U flash:w:main.hex

# EEP-Datei in dem Prozessor-EEPROM herunterladen
prog_eeprom:
	avrdude -c stk200 -p atmega32 -U eeprom:w:main.eep

# Fuses programmieren (nur einmalig für den Prozessor nötig)
prog_fuses:
	avrdude -c stk200 -p atmega32 -U hfuse:w:0xC1:m
	avrdude -c stk200 -p atmega32 -U lfuse:w:0xEF:m

# Makefile-Targets, die keine Dateinamen sind:
.PHONY: prog_sense prog_do prog_eeprom all clean


