You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
# (1) Project Information
PROJECT_LIBS = SPI RF24 ; PROJECT_DIRS = $(PWD) ;
# (2) Board Information
UPLOAD_PROTOCOL ?= arduino ; UPLOAD_SPEED ?= 115200 ; MCU ?= atmega328p ; F_CPU ?= 16000000 ; CORE ?= arduino ; VARIANT ?= standard ; ARDUINO_VERSION ?= 100 ;
# (3) USB Ports
PORTS = p4 p6 p9 u0 u1 u2 ; PORT_p6 = /dev/tty.usbserial-A600eHIs ; PORT_p4 = /dev/tty.usbserial-A40081RP ; PORT_p9 = /dev/tty.usbserial-A9007LmI ; PORT_u0 = /dev/ttyUSB0 ; PORT_u1 = /dev/ttyUSB1 ; PORT_u2 = /dev/ttyUSB2 ;
# (4) Location of AVR tools # # This configuration assumes using avr-tools that were obtained separate from the Arduino # distribution.
if $(OS) = MACOSX { AVR_BIN ?= /usr/local/avrtools/bin ; AVR_ETC = /usr/local/avrtools/etc ; AVR_INCLUDE = /usr/local/avrtools/include ; } else { AVR_BIN ?= /usr/bin ; AVR_INCLUDE = /usr/lib/avr/include ; AVR_ETC = /etc ; }
# (5) Directories where Arduino core and libraries are located
ARDUINO_DIR ?= /opt/Arduino ; ARDUINO_CORE = $(ARDUINO_DIR)/hardware/arduino/cores/$(CORE) $(ARDUINO_DIR)/hardware/arduino/variants/$(VARIANT) ; ARDUINO_LIB = $(ARDUINO_DIR)/libraries ; SKETCH_LIB = $(HOME)/Source/Arduino/libraries ;
# # -------------------------------------------------- # Below this line usually never needs to be modified #
# Tool locations
CC = $(AVR_BIN)/avr-gcc ; C++ = $(AVR_BIN)/avr-g++ ; LINK = $(AVR_BIN)/avr-gcc ; AR = $(AVR_BIN)/avr-ar rcs ; RANLIB = ; OBJCOPY = $(AVR_BIN)/avr-objcopy ; AVRDUDE ?= $(AVR_BIN)/avrdude ;
# Flags
DEFINES += F_CPU=$(F_CPU)L ARDUINO=$(ARDUINO_VERSION) VERSION_H ; OPTIM = -Os ; CCFLAGS = -Wall -Wextra -Wno-strict-aliasing -mmcu=$(MCU) -ffunction-sections -fdata-sections ; C++FLAGS = $(CCFLAGS) -fno-exceptions -fno-strict-aliasing ; LINKFLAGS = $(OPTIM) -lm -Wl,--gc-sections -mmcu=$(MCU) ; AVRDUDEFLAGS = -V -F -D -C $(AVR_ETC)/avrdude.conf -p $(MCU) -c $(UPLOAD_PROTOCOL) -b $(UPLOAD_SPEED) ;
# Search everywhere for headers
HDRS = $(PROJECT_DIRS) $(AVR_INCLUDE) $(ARDUINO_CORE) $(ARDUINO_LIB)/$(PROJECT_LIBS) $(ARDUINO_LIB)/$(PROJECT_LIBS)/utility $(SKETCH_LIB)/$(PROJECT_LIBS) ;
# Output locations
LOCATE_TARGET = $(F_CPU) ; LOCATE_SOURCE = $(F_CPU) ;
# # Custom rules #
rule GitVersion { Always $(<) ; Depends all : $(<) ; }
actions GitVersion { echo "const char program_version[] = \"\\" > $(<) git log -1 --pretty=format:%h >> $(<) echo "\";" >> $(<) }
GitVersion version.h ;
rule Pde { Depends $(<) : $(>) ; MakeLocate $(<) : $(LOCATE_SOURCE) ; Clean clean : $(<) ; }
if ( $(ARDUINO_VERSION) < 100 ) { ARDUINO_H = WProgram.h ; } else { ARDUINO_H = Arduino.h ; }
actions Pde { echo "#include <$(ARDUINO_H)>" > $(<) echo "#line 1 \"$(>)\"" >> $(<) cat $(>) >> $(<) }
rule C++Pde { local _CPP = $(>:B).cpp ; Pde $(_CPP) : $(>) ; C++ $(<) : $(_CPP) ; }
rule UserObject { switch $(>:S) { case .ino : C++Pde $(<) : $(>) ; case .pde : C++Pde $(<) : $(>) ; } }
rule Objects { local _i ;
for _i in [ FGristFiles $(<) ] { local _b = $(_i:B)$(SUFOBJ) ; local _o = $(_b:G=$(SOURCE_GRIST:E)) ; Object $(_o) : $(_i) ; Depends obj : $(_o) ; } }
rule Library { LibraryFromObjects $(<) : $(>:B)$(SUFOBJ) ; Objects $(>) ; }
rule Main { MainFromObjects $(<) : $(>:B)$(SUFOBJ) ; Objects $(>) ; }
rule Hex { Depends $(<) : $(>) ; MakeLocate $(<) : $(LOCATE_TARGET) ; Depends hex : $(<) ; Clean clean : $(<) ; }
actions Hex { $(OBJCOPY) -O ihex -R .eeprom $(>) $(<) }
rule Upload { Depends $(1) : $(2) ; Depends $(2) : $(3) ; NotFile $(1) ; Always $(1) ; Always $(2) ; UploadAction $(2) : $(3) ; }
actions UploadAction { $(AVRDUDE) $(AVRDUDEFLAGS) -P $(<) $(AVRDUDE_WRITE_FLASH) -U flash:w:$(>):i }
rule Arduino { LINKFLAGS on $(<) = $(LINKFLAGS) -Wl,-Map=$(LOCATE_TARGET)/$(<:B).map ; Main $(<) : $(>) ; LinkLibraries $(<) : core libs ; Hex $(<:B).hex : $(<) ; for _p in $(PORTS) { Upload $(_p) : $(PORT_$(_p)) : $(<:B).hex ; } }
# # Targets #
# Grab everything from the core directory Library core : [ GLOB $(ARDUINO_CORE) : *.c *.cpp ] ;
# Grab everything from libraries. To avoid this "grab everything" behaviour, you # can specify specific modules to pick up in PROJECT_MODULES Library libs : [ GLOB $(ARDUINO_LIB)/$(PROJECT_LIBS) $(ARDUINO_LIB)/$(PROJECT_LIBS)/utility $(SKETCH_LIB)/$(PROJECT_LIBS) : *.cpp *.c ] ;
# Main output executable Arduino $(PWD:B).elf : $(PROJECT_MODULES) [ GLOB $(PROJECT_DIRS) : *.c *.cpp *.pde *.ino ] ;
|