163
165
ARDUINOCONST ?= 100
 
165
167
# default path for avr tools
 
167
 
AVRTOOLSPATH := $(subst :, , $(PATH))
 
168
 
AVRTOOLSPATH += $(ARDUINODIR)/hardware/tools
 
169
 
AVRTOOLSPATH += $(ARDUINODIR)/hardware/tools/avr/bin
 
 
168
AVRTOOLSPATH ?= $(subst :, , $(PATH)) $(ARDUINODIR)/hardware/tools \
 
 
169
        $(ARDUINODIR)/hardware/tools/avr/bin
 
172
171
# default path to find libraries
 
173
 
LIBRARYPATH ?= libraries libs $(ARDUINODIR)/libraries
 
 
172
LIBRARYPATH ?= libraries libs $(SKETCHBOOKDIR)/libraries $(ARDUINODIR)/libraries
 
 
174
# default serial device to a poor guess (something that might be an arduino)
 
 
177
SERIALDEV := $(firstword $(wildcard \
 
 
178
        /dev/ttyACM? /dev/ttyUSB? /dev/tty.usbserial* /dev/tty.usbmodem*))
 
 
184
ifneq "$(MAKECMDGOALS)" "boards"
 
 
185
ifneq "$(MAKECMDGOALS)" "clean"
 
 
186
$(error BOARD is unset.  Type 'make boards' to see possible values)
 
 
191
# obtain board parameters from the arduino boards.txt file
 
 
192
BOARDSFILE := $(ARDUINODIR)/hardware/arduino/boards.txt
 
 
193
readboardsparam = $(shell sed -ne "s/$(BOARD).$(1)=\(.*\)/\1/p" $(BOARDSFILE))
 
 
194
BOARD_BUILD_MCU := $(call readboardsparam,build.mcu)
 
 
195
BOARD_BUILD_FCPU := $(call readboardsparam,build.f_cpu)
 
 
196
BOARD_BUILD_VARIANT := $(call readboardsparam,build.variant)
 
 
197
BOARD_UPLOAD_SPEED := $(call readboardsparam,upload.speed)
 
 
198
BOARD_UPLOAD_PROTOCOL := $(call readboardsparam,upload.protocol)
 
 
199
BOARD_USB_VID := $(call readboardsparam,build.vid)
 
 
200
BOARD_USB_PID := $(call readboardsparam,build.pid)
 
 
201
BOARD_BOOTLOADER_UNLOCK := $(call readboardsparam,bootloader.unlock_bits)
 
 
202
BOARD_BOOTLOADER_LOCK := $(call readboardsparam,bootloader.lock_bits)
 
 
203
BOARD_BOOTLOADER_LFUSES := $(call readboardsparam,bootloader.low_fuses)
 
 
204
BOARD_BOOTLOADER_HFUSES := $(call readboardsparam,bootloader.high_fuses)
 
 
205
BOARD_BOOTLOADER_EFUSES := $(call readboardsparam,bootloader.extended_fuses)
 
 
206
BOARD_BOOTLOADER_PATH := $(call readboardsparam,bootloader.path)
 
 
207
BOARD_BOOTLOADER_FILE := $(call readboardsparam,bootloader.file)
 
 
209
# obtain preferences from the IDE's preferences.txt
 
 
210
PREFERENCESFILE := $(wildcard $(HOME)/.arduino/preferences.txt)
 
 
211
ifneq "$(PREFERENCESFILE)" ""
 
 
212
readpreferencesparam = $(shell sed -ne "s/$(1)=\(.*\)/\1/p" $(PREFERENCESFILE))
 
 
213
SKETCHBOOKDIR := $(call readpreferencesparam,sketchbook.path)
 
 
217
ifeq "$(BOARD_BUILD_MCU)" ""
 
 
218
ifneq "$(MAKECMDGOALS)" "boards"
 
 
219
ifneq "$(MAKECMDGOALS)" "clean"
 
 
220
$(error BOARD is invalid.  Type 'make boards' to see possible values)
 
176
226
INOFILE := $(wildcard *.ino *.pde)
 
 
215
257
LIBRARYDIRS := $(foreach lib, $(LIBRARIES), \
 
216
258
        $(firstword $(wildcard $(addsuffix /$(lib), $(LIBRARYPATH)))))
 
217
259
LIBRARYDIRS += $(addsuffix /utility, $(LIBRARYDIRS))
 
 
261
        $(ARDUINODIR)/hardware/arduino/bootloaders/$(BOARD_BOOTLOADER_PATH)
 
220
264
TARGET := $(if $(TARGET),$(TARGET),a.out)
 
 
238
 
ifneq "$(MAKECMDGOALS)" "boards"
 
239
 
ifneq "$(MAKECMDGOALS)" "clean"
 
240
 
$(error BOARD is unset.  Type 'make boards' to see possible values)
 
245
 
# obtain board parameters from the arduino boards.txt file
 
246
 
BOARDS_FILE := $(ARDUINODIR)/hardware/arduino/boards.txt
 
248
 
        $(shell sed -ne "s/$(BOARD).build.mcu=\(.*\)/\1/p" $(BOARDS_FILE))
 
249
 
BOARD_BUILD_FCPU := \
 
250
 
        $(shell sed -ne "s/$(BOARD).build.f_cpu=\(.*\)/\1/p" $(BOARDS_FILE))
 
251
 
BOARD_BUILD_VARIANT := \
 
252
 
        $(shell sed -ne "s/$(BOARD).build.variant=\(.*\)/\1/p" $(BOARDS_FILE))
 
253
 
BOARD_UPLOAD_SPEED := \
 
254
 
        $(shell sed -ne "s/$(BOARD).upload.speed=\(.*\)/\1/p" $(BOARDS_FILE))
 
255
 
BOARD_UPLOAD_PROTOCOL := \
 
256
 
        $(shell sed -ne "s/$(BOARD).upload.protocol=\(.*\)/\1/p" $(BOARDS_FILE))
 
258
 
        $(shell sed -ne "s/$(BOARD).build.vid=\(.*\)/\1/p" $(BOARDS_FILE))
 
260
 
        $(shell sed -ne "s/$(BOARD).build.pid=\(.*\)/\1/p" $(BOARDS_FILE))
 
263
 
ifeq "$(BOARD_BUILD_MCU)" ""
 
264
 
ifneq "$(MAKECMDGOALS)" "boards"
 
265
 
ifneq "$(MAKECMDGOALS)" "clean"
 
266
 
$(error BOARD is invalid.  Type 'make boards' to see possible values)
 
272
282
CPPFLAGS += -Os -Wall -fno-exceptions -ffunction-sections -fdata-sections
 
273
283
CPPFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
 
 
342
356
size: $(TARGET).elf
 
343
357
        echo && $(AVRSIZE) --format=avr --mcu=$(BOARD_BUILD_MCU) $(TARGET).elf
 
 
360
        @echo "Burning bootloader to board..."
 
 
361
        @test -n "$(BOOTLOADERHEX)" || { \
 
 
362
                echo "error: bootloader file could not be determined." >&2; \
 
 
364
        @test -n "$(SERIALDEV)" || { \
 
 
365
                echo "error: SERIALDEV could not be determined automatically." >&2; \
 
 
367
        @test 0 -eq $(SERIALDEVGUESS) || { \
 
 
368
                echo "*GUESSING* at serial device:" $(SERIALDEV); \
 
 
370
        stty $(STTYFARG) $(SERIALDEV) hupcl
 
 
371
        $(AVRDUDE) $(AVRDUDEFLAGS) -U lock:w:$(BOARD_BOOTLOADER_UNLOCK):m
 
 
372
        $(AVRDUDE) $(AVRDUDEFLAGS) -e -U lfuse:w:$(BOARD_BOOTLOADER_LFUSES):m \
 
 
373
                -U hfuse:w:$(BOARD_BOOTLOADER_HFUSES):m \
 
 
374
                $(patsubst %, -U efuse:w:%:m, $(BOARD_BOOTLOADER_EFUSES))
 
 
375
        $(AVRDUDE) $(AVRDUDEFLAGS) -U flash:w:$(BOOTLOADERHEX):i
 
 
376
        $(AVRDUDE) $(AVRDUDEFLAGS) -U lock:w:$(BOARD_BOOTLOADER_LOCK):m
 
345
378
# building the target
 
347
380
$(TARGET).hex: $(TARGET).elf