Avr makefile
- the output binary name (found in ./bin)
ELFOUT:=main.elf HEXOUT:=main.hex
- the source files you wish to use (without the '.c') - main.c is added later
SRCS:=
- which device are you using?
DEVICE:=atmega328p
- what protocol do you use to communicate with the IC?
AVRDUDE_PROTO:=cstk500v1
- AVRDUDE_PROTO:=buspirate
- which serial port is it connected to?
AVRDUDE_PORT:=/dev/ttyUSB0 AVRDUDE_BAUD:=57600
- There should be no need to change below here for most projects
DIRS:=bin obj hex SRCS+=main OPTIMISATION:=-fwhole-program \
-falign-functions \ -falign-jumps \ -falign-labels \ -falign-loops \ -fif-conversion2 \ -finline-functions \ -fregmove \ -frename-registers \ -freorder-blocks \ -freorder-functions \ -fsplit-wide-types \ -ftoplevel-reorder \ -funroll-all-loops \ -fvariable-expansion-in-unroller
CROSS_COMPILE:=avr- CC:=$(CROSS_COMPILE)gcc OBJCOPY:=$(CROSS_COMPILE)objcopy CFLAGS:=$(OPTIMISATION) -mmcu=$(DEVICE) -c -Wall -O9 CLINKS:=$(OPTIMISATION) -mmcu=$(DEVICE)
.PHONY: all new clean spotless .dirs upload download
all: .dirs ./hex/$(HEXOUT)
new: clean ./hex/$(HEXOUT)
clean: rm -f *~ rm -f ./hex/$(HEXOUT) rm -f ./bin/$(ELFOUT) rm -f ./obj/*.o
spotless: clean rm -rdf $(addprefix ./,$(DIRS)) .dirs .dirs: makefile mkdir -p $(addprefix ./,$(DIRS)) @touch .dirs
upload: ./hex/$(HEXOUT)
avrdude -c$(AVRDUDE_PROTO) -P$(AVRDUDE_PORT) -b$(AVRDUDE_BAUD) -D -Uflash:w:./hex/$(HEXOUT):a
download: rm ./hex/$(HEXOUT).downloaded avrdude -c$(AVRDUDE_PROTO) -P$(AVRDUDE_PORT) -b$(AVRDUDE_BAUD) -D -Uflash:r:./hex/$(HEXOUT).downloaded:a
./hex/$(HEXOUT): ./bin/$(ELFOUT)
$(OBJCOPY) -j .text -O ihex $^ $@
./bin/$(ELFOUT): $(addprefix ./obj/,$(addsuffix .o,$(SRCS))) makefile
$(CC) $(CLINKS) $(filter %.o,$^) -o $@
./obj/%.o: %.c %.h makefile $(CC) $(CFLAGS) $*.c -o $@ ./obj/%.o: %.c makefile $(CC) $(CFLAGS) $*.c -o $@