Makefile
author Tero Marttila <terom@paivola.fi>
Wed, 24 Sep 2014 22:54:26 +0300
changeset 1 dc293f9aa873
parent 0 cae83b7bfcf4
child 3 87dd3b72b024
permissions -rw-r--r--
hello: use serial
QMSK_ARDUINO = qmsk

PROG = hello

ELF = build/src/$(PROG).elf
HEX = build/src/$(PROG).hex

build/src/hello.elf: build/src/hello.o \
	build/qmsk/src/serial.o \
	build/qmsk/src/timer.o

##
all: $(HEX)

build:
	mkdir -p build/src build/qmsk/src

clean:
	rm -rf build/

## Compiler
MCU = atmega328p

# CPU clock frequency
CPU = 16000000
STD = c99

CC = avr-gcc
CPPFLAGS = -DF_CPU=$(CPU)UL -I$(QMSK_ARDUINO)/include
CFLAGS = -mmcu=$(MCU) -std=$(STD) -Os -g
LDFLAGS = -mmcu=$(MCU)
LDLIBS = -lc

build/%.o: %.c
	$(CC) -c $(CPPFLAGS) $(CFLAGS) -o $@ $<
	$(CC) -MM $(CPPFLAGS) -MT $@ -MF build/$*.d $<

build/%.elf:
	$(CC) $(LDFLAGS) $+ -o $@ $(LDLIBS)

# existing .d files for rebuilding existing .o's
-include $(wildcard build/*/*.d)

dump: $(ELF)
	avr-objdump -d $(ELF)

## Assembler
AS = avra
ASFLAGS = 

%.hex: %.s
	$(AS) $(ASFLAGS) $<
	mv $<.hex $@

## Flashing
# Arduino Duemilanove
AD_PART = m328p
AD_PROG = arduino
AD_BAUD = 57600
AD_PORT = /dev/arduino

AD = avrdude
ADFLAGS = -p $(AD_PART) -c $(AD_PROG) -b $(AD_BAUD) -P $(AD_PORT)

build/%.hex: build/%.elf
	avr-objcopy -O ihex -R .eeprom $< $@

.PRECIOUS: build/%.elf

upload: $(HEX)
	$(AD) $(ADFLAGS) -U flash:w:$<

## Console
SERIAL_BAUD = 9600
SERIAL_FLOW = n
SERIAL_PARITY = n
SERIAL_BITS = 8
SERIAL_PORT = $(AD_PORT)

SERIAL_TERM = picocom
SERIAL_FLAGS = -b $(SERIAL_BAUD) -f $(SERIAL_FLOW) -p $(SERIAL_PARITY) -d $(SERIAL_BITS)

console:
	$(SERIAL_TERM) $(SERIAL_FLAGS) $(SERIAL_PORT)