# Name: Makefile
# Author: <insert your name here>
# Copyright: <insert your copyright message here>
# License: <insert your license reference here>

# DEVICE ....... The AVR device you compile for
# CLOCK ........ Target AVR clock rate in Hertz, not needed when F_CPU is defined in the main file
# OBJECTS ...... The object files created from your source files. This list is
#                usually the same as the list of source files with suffix ".o".
# PROGRAMMER ... Options to avrdude which define the hardware you use for
#                uploading to the AVR and the interface where this hardware
#                is connected.
# FUSES ........ Parameters for avrdude to flash the fuses appropriately.

DEVICE     = atmega328p
#CLOCK      = 8000000
PROGRAMMER = -C /Applications/Arduino.app//Contents/Resources/Java/hardware/tools/avr/etc/avrdude.conf -c arduino -P /dev/tty.usb* -b 19200 
OBJECTS    = main.o ATMEGA_USART.o
FUSES      = -U lfuse:w:0xff:m -U hfuse:w:0xde:m 


######################################################################
######################################################################

PRG = main
AVRDUDE = /Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/bin/avrdude $(PROGRAMMER) -p $(DEVICE)
CFLAGS = -Wall -Os -mmcu=$(DEVICE)
LDFLAGS = -Wl,-Map,$(PRG).map,--cref
COMPILE = avr-gcc $(CFLAGS) $(LDFLAGS)
#-DF_CPU=$(CLOCK)

# symbolic targets:
all:	 $(PRG).elf $(PRG).hex

.c.o:
	$(COMPILE) -c $< -o $@

.S.o:
	$(COMPILE) -x assembler-with-cpp -c $< -o $@
# "-x assembler-with-cpp" should not be necessary since this is the default
# file type for the .S (with capital S) extension. However, upper case
# characters are not always preserved on Windows. To ensure WinAVR
# compatibility define the file type manually.

.c.s:
	$(COMPILE) -S $< -o $@

flash:	all
	$(AVRDUDE) -U flash:w:main.hex:i

fuse:
	$(AVRDUDE) $(FUSES)

install: flash fuse

# if you use a bootloader, change the command below appropriately:
load: all
	bootloadHID main.hex

clean:
	rm -f $(PRG).hex $(PRG).elf $(OBJECTS)

# file targets:
$(PRG).elf: $(OBJECTS)
	$(COMPILE) -o $@ $^

$(PRG).hex: $(PRG).elf
	avr-objcopy -j .text -j .data -O ihex $< $@

