-# $Id$
-
-MCU = atmega328p
-CLOCK = 16000000
-CFLAGS = -Wall -Os -ffunction-sections -fdata-sections -mmcu=$(MCU) -DF_CPU=$(CLOCK)
-LDFLAGS = -Os -Wl,--gc-sections -mmcu=$(MCU)
+MCU := atmega328p
+CLOCK := 16000000
+CC := avr-gcc
+FEATURES := LCD_SHIFTREG LCD_ASYNC
+CFLAGS := -Wall -Os -ffunction-sections -fdata-sections -mmcu=$(MCU) -DF_CPU=$(CLOCK) $(patsubst %,-D%,$(FEATURES))
+LDFLAGS := -Os -Wl,--gc-sections -mmcu=$(MCU)
+AVRDUDE := avrdude
+OBJCOPY := avr-objcopy
+ifeq ($(MCU),atmega168)
+BAUD := 19200
+else
+BAUD := 57600
+endif
help:
@echo "Targets:"
@echo " %.hex: Build firmware from %.c"
@echo " upload-%: Upload firmware to AVR"
+ @echo " clean: Clean all built files"
+ @echo
+ @echo "Variables:"
+ @echo " MCU: Microcontroller type"
+ @echo " Arduino Duemilanove = atmega328p (default)"
+ @echo " Arduino Mini = atmega168"
%.hex: %.elf
- avr-objcopy -O ihex $< $@
+ $(OBJCOPY) -O ihex $< $@
%.elf: %.o
- avr-gcc $(LDFLAGS) -o $@ $<
+ $(CC) $(LDFLAGS) -o $@ $^
%.o: %.c
- avr-gcc -c $(CFLAGS) -o $@ $<
+ $(CC) -c $(CFLAGS) -o $@ $<
upload-%: %.hex
- avrdude -p$(MCU) -cstk500v1 -P/dev/ttyUSB0 -b57600 -D -Uflash:w:$<:i
+ $(AVRDUDE) -p$(MCU) -carduino -P/dev/ttyUSB0 -b$(BAUD) -D -Uflash:w:$<:i
+
+clean:
+ $(RM) *.hex
+ $(RM) *.elf
+ $(RM) *.o
+
+s88w-t.elf: serial.o timer.o eeprom.o
+s88w-r.elf: serial.o lcd.o timer.o