avr/Makefile.simple
2013-08-14 23:02:23 +02:00

81 lines
1.7 KiB
Makefile

# Hey Emacs, this is a -*- makefile -*-
#----------------------------------------------------------------------------
# Makefile for the avr-gcc Toolchain
#
# by Steffen Vogel <post@steffenvogel.de>
#
#----------------------------------------------------------------------------
# Target Options
TARGET = main
OBJS = $(TARGET).o uart.o lcd.o
# Hardware
MCU = atmega328p
F_CPU = 14745000
# Programming
AVRDUDE_FLAGS = -p m16 -c usbasp -P usb
HFUSE=
LFUSE=
DEFINES = -DF_CPU=$(F_CPU)
WARNINGS = -Wall -Wextra
CPPFLAGS += -MD -MP
CXXFLAGS +=
CFLAGS += -g -O2 -mmcu=$(MCU) $(DEFINES) $(WARNINGS)
LDFLAGS += -Wl,-Map,$(TARGET).map
# Tools
AR = avr-ar
AS = avr-as
CC = avr-gcc
CXX = avr-g++
NM = avr-nm
OBJCOPY = avr-objcopy
OBJDUMP = avr-objdump
SIZE = avr-size
AVRDUDE = avrdude
# Dependencies
-include $(OBJS:.o=.d)
# Default Target
all: $(TARGET).elf $(TARGET).hex $(TARGET).eep $(TARGET).lst
$(TARGET).elf: $(OBJS)
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^
%.lst: %.elf
$(OBJDUMP) -h -S $< > $@
%.hex: %.elf
$(OBJCOPY) -j .text -j .data -O ihex $< $@
%.eep: %.elf
$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 -O ihex $< $@
flash: $(TARGET).hex
$(AVRDUDE) $(AVRDUDE_FLAGS) -U flash:w:$(TARGET).hex
eeprom: $(TARGET).eep
$(AVRDUDE) $(AVRDUDE_FLAGS) -U eeprom:w:$(TARGET).eep
fuses:
$(AVRDUDE) $(AVRDUDE_FLAGS) -U hfuse:w:$(HFUSE):m -U lfuse:w:$(LFUSE):m
size: $(TARGET).elf
$(SIZE) -A $(TARGET).elf --format=avr --mcu $(MCU) | tail -n +5
$(NM) --print-size --size-sort --reverse-sort --radix=d main.elf --format=s | tail -n +5 | head -n 12
clean:
rm -f $(OBJS).o
rm -f $(TARGET).elf
rm -f $(TARGET).hex
rm -f $(TARGET).eep
rm -f $(TARGET).lst
rm -f $(TARGET).map
.PHONY: all size clean flash eeprom fuses