diff --git a/Arduino.mk b/Arduino.mk index 91a637d..14543f5 100644 --- a/Arduino.mk +++ b/Arduino.mk @@ -311,6 +311,30 @@ else $(call show_config_variable,ARDUINO_VERSION,[USER]) endif +######################################################################## +# 1.5.x architecture - avr or sam for arduino vendor +ifndef ARCHITECTURE + ifeq ($(shell expr $(ARDUINO_VERSION) '>' 150), 1) + # default to avr for 1.5 + ARCHITECTURE = avr + else + # unset for 1.0 + ARCHITECTURE = + endif + $(call show_config_variable,ARCHITECTURE,[DEFAULT]) +else + $(call show_config_variable,ARCHITECTURE,[USER]) +endif + +######################################################################## +# 1.5.x vendor - defaults to arduino +ifndef VENDOR + VENDOR = arduino + $(call show_config_variable,VENDOR,[DEFAULT]) +else + $(call show_config_variable,VENDOR,[USER]) +endif + ######################################################################## # Arduino Sketchbook folder @@ -437,7 +461,7 @@ endif ARDUINO_LIB_PATH = $(ARDUINO_DIR)/libraries $(call show_config_variable,ARDUINO_LIB_PATH,[COMPUTED],(from ARDUINO_DIR)) ifndef ARDUINO_CORE_PATH - ARDUINO_CORE_PATH = $(ARDUINO_DIR)/hardware/arduino/cores/arduino + ARDUINO_CORE_PATH = $(ARDUINO_DIR)/hardware/$(VENDOR)/$(ARCHITECTURE)/cores/arduino $(call show_config_variable,ARDUINO_CORE_PATH,[DEFAULT]) else $(call show_config_variable,ARDUINO_CORE_PATH,[USER]) @@ -473,14 +497,14 @@ ifdef ALTERNATE_CORE_PATH else ifndef ARDUINO_VAR_PATH - ARDUINO_VAR_PATH = $(ARDUINO_DIR)/hardware/arduino/variants + ARDUINO_VAR_PATH = $(ARDUINO_DIR)/hardware/$(VENDOR)/$(ARCHITECTURE)/variants $(call show_config_variable,ARDUINO_VAR_PATH,[COMPUTED],(from ARDUINO_DIR)) else $(call show_config_variable,ARDUINO_VAR_PATH,[USER]) endif ifndef BOARDS_TXT - BOARDS_TXT = $(ARDUINO_DIR)/hardware/arduino/boards.txt + BOARDS_TXT = $(ARDUINO_DIR)/hardware/$(VENDOR)/$(ARCHITECTURE)/boards.txt $(call show_config_variable,BOARDS_TXT,[COMPUTED],(from ARDUINO_DIR)) else $(call show_config_variable,BOARDS_TXT,[USER]) @@ -508,6 +532,11 @@ endif ######################################################################## # boards.txt parsing +ifdef BOARD_SUB + BOARD_SUB := $(strip $(BOARD_SUB)) + $(call show_config_variable,BOARD_SUB,[USER]) +endif + ifndef BOARD_TAG BOARD_TAG = uno $(call show_config_variable,BOARD_TAG,[DEFAULT]) @@ -533,15 +562,31 @@ ifeq ($(strip $(NO_CORE)),) endif # see if we are a caterina device like leonardo or micro - CATERINA = $(findstring caterina,$(call PARSE_BOARD,$(BOARD_TAG),bootloader.path)) + CATERINA := $(findstring caterina,$(call PARSE_BOARD,$(BOARD_TAG),bootloader.path)) + ifndef CATERINA + # bootloader.path is deprecated in 1.5, its now part of bootloader.file + CATERINA := $(findstring caterina,$(call PARSE_BOARD,$(BOARD_TAG),bootloader.file)) + endif + ifndef CATERINA + # might be a submenu + CATERINA := $(findstring caterina,$(call PARSE_BOARD,$(BOARD_TAG),menu.cpu.$(BOARD_SUB).bootloader.file)) + endif # processor stuff ifndef MCU - MCU = $(call PARSE_BOARD,$(BOARD_TAG),build.mcu) + MCU := $(call PARSE_BOARD,$(BOARD_TAG),build.mcu) + ifndef MCU + # might be a submenu + MCU := $(call PARSE_BOARD,$(BOARD_TAG),menu.cpu.$(BOARD_SUB).build.mcu) + endif endif ifndef F_CPU - F_CPU = $(call PARSE_BOARD,$(BOARD_TAG),build.f_cpu) + F_CPU := $(call PARSE_BOARD,$(BOARD_TAG),build.f_cpu) + ifndef F_CPU + # might be a submenu + F_CPU := $(call PARSE_BOARD,$(BOARD_TAG),menu.cpu.$(BOARD_SUB).build.f_cpu) + endif endif ifneq ($(CATERINA),) @@ -557,11 +602,19 @@ ifeq ($(strip $(NO_CORE)),) # normal programming info ifndef AVRDUDE_ARD_PROGRAMMER - AVRDUDE_ARD_PROGRAMMER = $(call PARSE_BOARD,$(BOARD_TAG),upload.protocol) + AVRDUDE_ARD_PROGRAMMER := $(call PARSE_BOARD,$(BOARD_TAG),upload.protocol) + ifndef AVRDUDE_ARD_PROGRAMMER + # might be a submenu + AVRDUDE_ARD_PROGRAMMER := $(call PARSE_BOARD,$(BOARD_TAG),menu.cpu.$(BOARD_SUB).upload.protocol) + endif endif ifndef AVRDUDE_ARD_BAUDRATE - AVRDUDE_ARD_BAUDRATE = $(call PARSE_BOARD,$(BOARD_TAG),upload.speed) + AVRDUDE_ARD_BAUDRATE := $(call PARSE_BOARD,$(BOARD_TAG),upload.speed) + ifndef AVRDUDE_ARD_BAUDRATE + # might be a submenu + AVRDUDE_ARD_BAUDRATE := $(call PARSE_BOARD,$(BOARD_TAG),menu.cpu.$(BOARD_SUB).upload.speed) + endif endif # fuses if you're using e.g. ISP @@ -570,15 +623,27 @@ ifeq ($(strip $(NO_CORE)),) endif ifndef ISP_HIGH_FUSE - ISP_HIGH_FUSE = $(call PARSE_BOARD,$(BOARD_TAG),bootloader.high_fuses) + ISP_HIGH_FUSE := $(call PARSE_BOARD,$(BOARD_TAG),bootloader.high_fuses) + ifndef ISP_HIGH_FUSE + # might be a submenu + ISP_HIGH_FUSE := $(call PARSE_BOARD,$(BOARD_TAG),menu.cpu.$(BOARD_SUB).bootloader.high_fuses) + endif endif ifndef ISP_LOW_FUSE - ISP_LOW_FUSE = $(call PARSE_BOARD,$(BOARD_TAG),bootloader.low_fuses) + ISP_LOW_FUSE := $(call PARSE_BOARD,$(BOARD_TAG),bootloader.low_fuses) + ifndef ISP_LOW_FUSE + # might be a submenu + ISP_LOW_FUSE := $(call PARSE_BOARD,$(BOARD_TAG),menu.cpu.$(BOARD_SUB).bootloader.low_fuses) + endif endif ifndef ISP_EXT_FUSE - ISP_EXT_FUSE = $(call PARSE_BOARD,$(BOARD_TAG),bootloader.extended_fuses) + ISP_EXT_FUSE := $(call PARSE_BOARD,$(BOARD_TAG),bootloader.extended_fuses) + ifndef ISP_EXT_FUSE + # might be a submenu + ISP_EXT_FUSE := $(call PARSE_BOARD,$(BOARD_TAG),menu.cpu.$(BOARD_SUB).bootloader.extended_fuses) + endif endif ifndef BOOTLOADER_PATH @@ -586,7 +651,11 @@ ifeq ($(strip $(NO_CORE)),) endif ifndef BOOTLOADER_FILE - BOOTLOADER_FILE = $(call PARSE_BOARD,$(BOARD_TAG),bootloader.file) + BOOTLOADER_FILE := $(call PARSE_BOARD,$(BOARD_TAG),bootloader.file) + ifndef BOOTLOADER_FILE + # might be a submenu + BOOTLOADER_FILE := $(call PARSE_BOARD,$(BOARD_TAG),menu.cpu.$(BOARD_SUB).bootloader.file) + endif endif ifndef ISP_LOCK_FUSE_POST @@ -594,7 +663,11 @@ ifeq ($(strip $(NO_CORE)),) endif ifndef HEX_MAXIMUM_SIZE - HEX_MAXIMUM_SIZE = $(call PARSE_BOARD,$(BOARD_TAG),upload.maximum_size) + HEX_MAXIMUM_SIZE := $(call PARSE_BOARD,$(BOARD_TAG),upload.maximum_size) + ifndef HEX_MAXIMUM_SIZE + # might be a submenu + HEX_MAXIMUM_SIZE := $(call PARSE_BOARD,$(BOARD_TAG),menu.cpu.$(BOARD_SUB).upload.maximum_size) + endif endif endif @@ -924,7 +997,7 @@ endif # either calculate parent dir from arduino dir, or user-defined path ifndef BOOTLOADER_PARENT - BOOTLOADER_PARENT = $(ARDUINO_DIR)/hardware/arduino/bootloaders + BOOTLOADER_PARENT = $(ARDUINO_DIR)/hardware/$(VENDOR)/$(ARCHITECTURE)/bootloaders $(call show_config_variable,BOOTLOADER_PARENT,[COMPUTED],(from ARDUINO_DIR)) else $(call show_config_variable,BOOTLOADER_PARENT,[USER]) diff --git a/README.md b/README.md index 821db2e..cd0626f 100644 --- a/README.md +++ b/README.md @@ -95,6 +95,11 @@ On Windows (using cygwin), you might want to set: MONITOR_PORT = com3 BOARD_TAG = mega2560 +On Arduino 1.5.x installs, you should set the architecture to either `avr` or `sam` and if using a submenu CPU, then also set that: + + ARCHITECTURE = avr + BOARD_SUB = atmega168 + It is recommended in Windows that you create a symbolic link to avoid problems with file naming conventions on Windows. For example, if your your Arduino directory is in: c:\Program Files (x86)\Arduino diff --git a/arduino-mk-vars.md b/arduino-mk-vars.md index 57bf2c2..e62c9dd 100644 --- a/arduino-mk-vars.md +++ b/arduino-mk-vars.md @@ -129,6 +129,42 @@ ARDUINO_VERSION = 105 ---- +### ARCHITECTURE + +**Description:** + +Architecture for Arduino 1.5 + +Defaults to unset for 1.0 or `avr` for 1.5 + +**Example:** + +```Makefile +ARCHITECTURE = sam +``` + +**Requirement:** *Optional* + +---- + +### VENDOR + +**Description:** + +Board vendor/maintainer. + +Defaults to `arduino` + +**Example:** + +```Makefile +VENDOR = sparkfun +``` + +**Requirement:** *Optional* + +---- + ### ARDUINO_SKETCHBOOK **Description:** @@ -220,6 +256,26 @@ BOARD_TAG = uno or mega2560 ---- +### BOARD_SUB + +**Description:** + +1.5 submenu as listed in `boards.txt` + +**Example:** + +```Makefile +# diecimila.name=Arduino Duemilanove or Diecimila +BOARD_TAG=diecimila + +# diecimila.menu.cpu.atmega168=ATmega168 +BOARD_SUB=atmega168 +``` + +**Requirement:** *Mandatory for 1.5 if using a submenu CPU* + +---- + ### MONITOR_PORT **Description:** @@ -1030,6 +1086,8 @@ Relative path to bootloader directory. Usually can be auto-detected as a relative `bootloader.path` from `boards.txt` +Deprecated in 1.5, now part of bootloader.file + **Example:** ```Makefile