--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Makefile Wed Sep 24 22:41:46 2014 +0300
@@ -0,0 +1,84 @@
+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/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)
+