Avr makefile
From Attie's Wiki
(Difference between revisions)
m |
|||
Line 23: | Line 23: | ||
DIRS:=bin obj hex | DIRS:=bin obj hex | ||
SRCS+=main | SRCS+=main | ||
− | OPTIMISATION:= | + | OPTIMISATION:=-falign-functions \ |
− | + | ||
-falign-jumps \ | -falign-jumps \ | ||
-falign-labels \ | -falign-labels \ | ||
Line 42: | Line 41: | ||
OBJCOPY:=$(CROSS_COMPILE)objcopy | OBJCOPY:=$(CROSS_COMPILE)objcopy | ||
CFLAGS:=$(OPTIMISATION) -mmcu=$(DEVICE) -c -Wall -O9 | CFLAGS:=$(OPTIMISATION) -mmcu=$(DEVICE) -c -Wall -O9 | ||
− | CLINKS:=$(OPTIMISATION) -mmcu=$(DEVICE) | + | CLINKS:=$(OPTIMISATION) -fwhole-program -mmcu=$(DEVICE) |
.PHONY: all new clean spotless .dirs upload download | .PHONY: all new clean spotless .dirs upload download |
Revision as of 18:22, 15 October 2011
# 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:=stk500v1 #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:=-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) -fwhole-program -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 $@