# Makefile for AVR assembly programs on the Arduino Uno or Mega
# Part of the Microscheme project
# (C) 2014 Ryan Suchocki
# microscheme.org

ifndef MODEL
MODEL = MEGA
endif

ifndef DEV
DEV = /dev/$(shell ls /dev | grep ACM | head )
endif

TARGET_MEGA 	= atmega2560
AVR_LEVEL_MEGA 	= avr6
PROG_MEGA 		= wiring
BAUD_MEGA 		= 115200

TARGET_UNO 		= atmega328p
AVR_LEVEL_UNO 	= avr5
PROG_UNO 		= arduino
BAUD_UNO 		= 115200

TARGET 		= ${TARGET_${MODEL}}
AVR_LEVEL 	= ${AVR_LEVEL_${MODEL}}
PROG 		= ${PROG_${MODEL}}
BAUD		= ${BAUD_${MODEL}}

compile: main.s

main.s: myprogram.ms
	./microscheme -m ${MODEL} myprogram.ms > main.s

assemble: main.hex

main.hex: main.elf
	avr-objcopy --output-target=ihex main.elf main.hex

main.elf: main.s
	avr-gcc -mmcu=$(AVR_LEVEL) -o main.elf main.s

upload: main.hex
	avrdude -v -p $(TARGET) -c $(PROG) -P $(DEV) -b $(BAUD) -D -U flash:w:main.hex:i

clean:
	rm main.s main.elf main.hex

dump:
	avr-objdump -d main.elf

all: compile assemble upload clean
