# Makefile für die Übung TastenPrellen
# (c) Christian Schifferle Oktober 2002


#Hier muss der verwendete AVR-Controller eingetragen werden
#(at90s8515, at90s8535, attiny22, atmega603 etc.).
    MCU = at90s4433

#Hier wird die Zieldatei definiert (ohne Namenserweiterung).
	TRG	= display

#Hier kommen die Quelldateien hin, wobei auf bereits definierte
#Symbole zugegriffen werden kann, also wird hier der Quelldateiname
#Prell.C definiert.
	SRC	= $(TRG).c

#Wenn zusätzlich Assembler-Codedateien eingebunden werden sollen
#müssen diese hier angegeben werden.
	ASRC    =

#Ebenso kann mit zusätzlichen Bibliotheks- und Objektdateien verfahren
#werden.
	LIB	=

#Und auch zusätzliche Include-Dateien
	INC	= 

#Hier definieren wir Einstellungen (Flags) für den Assembler,
	ASFLAGS = -Wa, -gstabs

#den Compiler
	CPFLAGS	= -g  -Os -Wall -Wstrict-prototypes -Wa,-ahlms=$(<:.c=.lst)

#und den Linker
	LDFLAGS = -Wl,-Map=$(TRG).map,--cref

	
########### Die folgende Zeile sollte nicht geändert werden #############
########### Hier werden die Systemdateien integriert        #############
# GCC-AVR standard Makefile part 3
# Based on Volker Oth's makefiles of jan.2000
# Modified and merged by AVRfreaks.net for smoother integration with AVR Studio,
# and easier comprehension for the average user (nov.2001). Minor errors corrected.

# ---------- Included from make1 !!! -----------
###### define some variables based on the AVR base path in $(AVR) #######
	CC	= avr-gcc
	AS	= avr-gcc -x assembler-with-cpp	
	RM	= rm -f
	RN	= mv
	BIN	= avr-objcopy
	SIZE	= avr-size
	INCDIR	= .
	LIBDIR	= $(AVR)/avr/lib
	SHELL   = $(AVR)/bin/sh.exe

###### output format can be srec, ihex (avrobj is always created) #######
	FORMAT = ihex	
# ------------------------------------------	

#define all project specific object files
	OBJ	= $(ASRC:.s=.o) $(SRC:.c=.o) 
	CPFLAGS += -mmcu=$(MCU)
	ASFLAGS += -mmcu=$(MCU)
	LDFLAGS += -mmcu=$(MCU)
  
# --- this defines the aims of the make process ---
all:	$(TRG).obj $(TRG).elf $(TRG).rom $(TRG).eep $(TRG).ok 


# --- compile: instructions to create assembler and/or object files from C source ---
%.o : %.c 
	$(CC) -c $(CPFLAGS) -I$(INCDIR) $< -o $@

%.s : %.c
	$(CC) -S $(CPFLAGS) -I$(INCDIR) $< -o $@

# --- assemble: instructions to create object file from assembler files ---
%.o : %.s
	$(AS) -c $(ASFLAGS) -I$(INCDIR) $< -o $@

# --- link: instructions to create elf output file from object files ---
%.elf: $(OBJ)
	$(CC) $(OBJ) $(LIB) $(LDFLAGS) -o $@

# --- create avrobj file from elf output file ---
%.obj: %.elf
	$(BIN) -O avrobj -R .eeprom $< $@

# --- create bin (.rom and .eep) files from elf output file ---
%.rom: %.elf
	$(BIN) -O $(FORMAT) -R .eeprom $< $@

# --- %.eep: %.elf
	$(BIN) -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 -O $(FORMAT) $< $@

# --- If all other steps compile ok then echo "Errors: none" ---
# --- Necessary for AVR Studio to understand that everything went ok ---
%ok:
	@echo "Errors: none" 

# --- make instruction to delete created files ---
clean:
	$(RM) $(OBJ)
	$(RM) $(SRC:.c=.s)
	$(RM) $(SRC:.c=.lst)
	$(RM) $(TRG).map
	$(RM) $(TRG).elf

	$(RM) $(TRG).obj
	$(RM) $(TRG).a90
	$(RM) $(TRG).hex	
	$(RM) *.bak
	$(RM) *.log
	
size:
	$(SIZE) $(TRG).elf

###### Hier werden die Abhängigkeiten definiert       ###################
$(TRG).o : $(TRG).c
