107 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Makefile
		
	
	
	
			
		
		
	
	
			107 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Makefile
		
	
	
	
# simple AVR Makefile
 | 
						|
#
 | 
						|
# written by michael cousins (http://github.com/mcous)
 | 
						|
# released to the public domain
 | 
						|
 | 
						|
# Makefile
 | 
						|
#
 | 
						|
# targets:
 | 
						|
#   all:    compiles the source code
 | 
						|
#   test:   tests the isp connection to the mcu
 | 
						|
#   flash:  writes compiled hex file to the mcu's flash memory
 | 
						|
#   fuse:   writes the fuse bytes to the MCU
 | 
						|
#   disasm: disassembles the code for debugging
 | 
						|
#   clean:  removes all .hex, .elf, and .o files in the source code and library directories
 | 
						|
 | 
						|
# parameters (change this stuff accordingly)
 | 
						|
# project name
 | 
						|
PRJ = main
 | 
						|
# avr mcu
 | 
						|
MCU = atmega2560
 | 
						|
# mcu clock frequency
 | 
						|
CLK = 16000000
 | 
						|
# avr programmer (and port if necessary)
 | 
						|
# e.g. PRG = usbtiny -or- PRG = arduino -P /dev/tty.usbmodem411
 | 
						|
PRG = wiring -P /dev/ttyACM0
 | 
						|
# fuse values for avr: low, high, and extended
 | 
						|
# these values are from an Arduino Uno (ATMega328P)
 | 
						|
# see http://www.engbedded.com/fusecalc/ for other MCUs and options
 | 
						|
LFU = 0xFF
 | 
						|
HFU = 0xD0
 | 
						|
EFU = 0xFD
 | 
						|
# program source files (not including external libraries)
 | 
						|
SRC = $(PRJ).c
 | 
						|
# where to look for external libraries (consisting of .c/.cpp files and .h files)
 | 
						|
# e.g. EXT = ../../EyeToSee ../../YouSART
 | 
						|
EXT =
 | 
						|
 | 
						|
 | 
						|
#################################################################################################
 | 
						|
# \/ stuff nobody needs to worry about until such time that worrying about it is appropriate \/ #
 | 
						|
#################################################################################################
 | 
						|
 | 
						|
# include path
 | 
						|
INCLUDE := $(foreach dir, $(EXT), -I$(dir))
 | 
						|
# c flags
 | 
						|
CFLAGS    = -Wall -Os -DF_CPU=$(CLK) -mmcu=$(MCU) $(INCLUDE)
 | 
						|
# any aditional flags for c++
 | 
						|
CPPFLAGS =
 | 
						|
 | 
						|
# executables
 | 
						|
AVRDUDE = avrdude  -C /usr/share/arduino/hardware/tools/avrdude.conf -c $(PRG) -p $(MCU)  -b 115200 -D
 | 
						|
OBJCOPY = avr-objcopy
 | 
						|
OBJDUMP = avr-objdump
 | 
						|
SIZE    = avr-size --format=avr --mcu=$(MCU)
 | 
						|
CC      = avr-gcc
 | 
						|
 | 
						|
# generate list of objects
 | 
						|
CFILES    = $(filter %.c, $(SRC))
 | 
						|
EXTC     := $(foreach dir, $(EXT), $(wildcard $(dir)/*.c))
 | 
						|
CPPFILES  = $(filter %.cpp, $(SRC))
 | 
						|
EXTCPP   := $(foreach dir, $(EXT), $(wildcard $(dir)/*.cpp))
 | 
						|
OBJ       = $(CFILES:.c=.o) $(EXTC:.c=.o) $(CPPFILES:.cpp=.o) $(EXTCPP:.cpp=.o)
 | 
						|
 | 
						|
# user targets
 | 
						|
# compile all files
 | 
						|
all: $(PRJ).hex
 | 
						|
 | 
						|
# test programmer connectivity
 | 
						|
test:
 | 
						|
	$(AVRDUDE) -v
 | 
						|
 | 
						|
# flash program to mcu
 | 
						|
flash: all
 | 
						|
	$(AVRDUDE) -U flash:w:$(PRJ).hex:i
 | 
						|
 | 
						|
# write fuses to mcu
 | 
						|
fuse:
 | 
						|
	$(AVRDUDE) -U lfuse:w:$(LFU):m -U hfuse:w:$(HFU):m -U efuse:w:$(EFU):m
 | 
						|
 | 
						|
# generate disassembly files for debugging
 | 
						|
disasm: $(PRJ).elf
 | 
						|
	$(OBJDUMP) -d $(PRJ).elf
 | 
						|
 | 
						|
# remove compiled files
 | 
						|
clean:
 | 
						|
	rm -f *.hex *.elf *.o
 | 
						|
	$(foreach dir, $(EXT), rm -f $(dir)/*.o;)
 | 
						|
 | 
						|
# other targets
 | 
						|
# objects from c files
 | 
						|
.c.o:
 | 
						|
	$(CC) $(CFLAGS) -c $< -o $@
 | 
						|
 | 
						|
# objects from c++ files
 | 
						|
.cpp.o:
 | 
						|
	$(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $@
 | 
						|
 | 
						|
# elf file
 | 
						|
$(PRJ).elf: $(OBJ)
 | 
						|
	$(CC) $(CFLAGS) -o $(PRJ).elf $(OBJ)
 | 
						|
 | 
						|
# hex file
 | 
						|
$(PRJ).hex: $(PRJ).elf
 | 
						|
	rm -f $(PRJ).hex
 | 
						|
	$(OBJCOPY) -j .text -j .data -O ihex $(PRJ).elf $(PRJ).hex
 | 
						|
	$(SIZE) $(PRJ).elf
 |