aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Arduino.mk89
-rw-r--r--HISTORY.md5
-rw-r--r--README.md2
-rw-r--r--arduino-mk-vars.md42
-rw-r--r--examples/BlinkNetworkRPi/ATtinyBlink.ino23
-rw-r--r--examples/BlinkNetworkRPi/Makefile46
-rwxr-xr-xtests/script/runtests.sh2
7 files changed, 184 insertions, 25 deletions
diff --git a/Arduino.mk b/Arduino.mk
index e007b19..a5b9bba 100644
--- a/Arduino.mk
+++ b/Arduino.mk
@@ -276,7 +276,7 @@ ifndef ARDUINO_VERSION
# Remove all the decimals, and right-pad with zeros, and finally grab the first 3 bytes.
# Works for 1.0 and 1.0.1
VERSION_FILE := $(ARDUINO_DIR)/lib/version.txt
- AUTO_ARDUINO_VERSION := $(shell [ -e "$(VERSION_FILE)" ] && cat "$(VERSION_FILE)" | sed -e 's/^[0-9]://g' -e 's/[.]//g' -e 's/$$/0000/' | head -c3)
+ AUTO_ARDUINO_VERSION := $(shell [ -e $(VERSION_FILE) ] && cat $(VERSION_FILE) | sed -e 's/^[0-9]://g' -e 's/[.]//g' -e 's/$$/0000/' | head -c3)
ifdef AUTO_ARDUINO_VERSION
ARDUINO_VERSION = $(AUTO_ARDUINO_VERSION)
$(call show_config_variable,ARDUINO_VERSION,[AUTODETECTED])
@@ -343,8 +343,8 @@ ifndef ARDUINO_SKETCHBOOK
endif
ifneq ($(ARDUINO_PREFERENCES_PATH),)
- ARDUINO_SKETCHBOOK := $(shell grep --max-count=1 --regexp="sketchbook.path=" \
- "$(ARDUINO_PREFERENCES_PATH)" | \
+ ARDUINO_SKETCHBOOK := $(shell grep --max-count=1 --regexp='sketchbook.path=' \
+ $(ARDUINO_PREFERENCES_PATH) | \
sed -e 's/sketchbook.path=//' )
endif
@@ -403,11 +403,20 @@ ifndef AVR_TOOLS_DIR
ifeq ($(CURRENT_OS),LINUX)
ifndef AVRDUDE
- AVRDUDE = $(AVR_TOOLS_DIR)/../avrdude
+ ifeq ($(shell expr $(ARDUINO_VERSION) '>' 157), 1)
+ # 1.5.8 has different location than all prior versions!
+ AVRDUDE = $(AVR_TOOLS_DIR)/bin/avrdude
+ else
+ AVRDUDE = $(AVR_TOOLS_DIR)/../avrdude
+ endif
endif
ifndef AVRDUDE_CONF
- AVRDUDE_CONF = $(AVR_TOOLS_DIR)/../avrdude.conf
+ ifeq ($(shell expr $(ARDUINO_VERSION) '>' 157), 1)
+ AVRDUDE_CONF = $(AVR_TOOLS_DIR)/etc/avrdude.conf
+ else
+ AVRDUDE_CONF = $(AVR_TOOLS_DIR)/../avrdude.conf
+ endif
endif
else
@@ -449,12 +458,6 @@ 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/$(VENDOR)/$(ARCHITECTURE)/cores/arduino
- $(call show_config_variable,ARDUINO_CORE_PATH,[DEFAULT])
-else
- $(call show_config_variable,ARDUINO_CORE_PATH,[USER])
-endif
# 1.5.x platform dependent libs path
ifndef ARDUINO_PLATFORM_LIB_PATH
@@ -549,13 +552,23 @@ endif
ifndef PARSE_BOARD
# result = $(call READ_BOARD_TXT, 'boardname', 'parameter')
- PARSE_BOARD = $(shell grep -v "^\#" "$(BOARDS_TXT)" | grep $(1).$(2) | cut -d = -f 2 )
+ PARSE_BOARD = $(shell grep -v '^\#' $(BOARDS_TXT) | grep $(1).$(2) | cut -d = -f 2 )
endif
# If NO_CORE is set, then we don't have to parse boards.txt file
# But the user might have to define MCU, F_CPU etc
ifeq ($(strip $(NO_CORE)),)
+ # Select a core from the 'cores' directory. Two main values: 'arduino' or
+ # 'robot', but can also hold 'tiny', for example, if using
+ # https://code.google.com/p/arduino-tiny alternate core.
+ ifndef CORE
+ CORE = $(shell echo $(call PARSE_BOARD,$(BOARD_TAG),build.core) | cut -d : -f 2)
+ $(call show_config_variable,CORE,[COMPUTED],(from build.core))
+ else
+ $(call show_config_variable,CORE,[USER])
+ endif
+
# Which variant ? This affects the include path
ifndef VARIANT
VARIANT = $(call PARSE_BOARD,$(BOARD_TAG),build.variant)
@@ -680,6 +693,25 @@ else
$(call show_config_variable,OBJDIR,[USER])
endif
+# Now that we have ARDUINO_DIR, VENDOR, ARCHITECTURE and CORE,
+# we can set ARDUINO_CORE_PATH.
+ifndef ARDUINO_CORE_PATH
+ ifeq ($(strip $(CORE)),)
+ ARDUINO_CORE_PATH = $(ARDUINO_DIR)/hardware/$(VENDOR)/$(ARCHITECTURE)/cores/arduino
+ $(call show_config_variable,ARDUINO_CORE_PATH,[DEFAULT])
+ else
+ ARDUINO_CORE_PATH = $(ALTERNATE_CORE_PATH)/cores/$(CORE)
+ ifeq ($(wildcard $(ARDUINO_CORE_PATH)),)
+ ARDUINO_CORE_PATH = $(ARDUINO_DIR)/hardware/$(VENDOR)/$(ARCHITECTURE)/cores/$(CORE)
+ $(call show_config_variable,ARDUINO_CORE_PATH,[COMPUTED],(from ARDUINO_DIR, BOARD_TAG and boards.txt))
+ else
+ $(call show_config_variable,ARDUINO_CORE_PATH,[COMPUTED],(from ALTERNATE_CORE_PATH, BOARD_TAG and boards.txt))
+ endif
+ endif
+else
+ $(call show_config_variable,ARDUINO_CORE_PATH,[USER])
+endif
+
########################################################################
# Reset
@@ -777,11 +809,11 @@ endif
ifndef ARDUINO_LIBS
# automatically determine included libraries
ARDUINO_LIBS += $(filter $(notdir $(wildcard $(ARDUINO_DIR)/libraries/*)), \
- $(shell sed -ne "s/^ *\# *include *[<\"]\(.*\)\.h[>\"]/\1/p" $(LOCAL_SRCS)))
+ $(shell sed -ne 's/^ *\# *include *[<\"]\(.*\)\.h[>\"]/\1/p' $(LOCAL_SRCS)))
ARDUINO_LIBS += $(filter $(notdir $(wildcard $(ARDUINO_SKETCHBOOK)/libraries/*)), \
- $(shell sed -ne "s/^ *\# *include *[<\"]\(.*\)\.h[>\"]/\1/p" $(LOCAL_SRCS)))
+ $(shell sed -ne 's/^ *\# *include *[<\"]\(.*\)\.h[>\"]/\1/p' $(LOCAL_SRCS)))
ARDUINO_LIBS += $(filter $(notdir $(wildcard $(USER_LIB_PATH)/*)), \
- $(shell sed -ne "s/^ *\# *include *[<\"]\(.*\)\.h[>\"]/\1/p" $(LOCAL_SRCS)))
+ $(shell sed -ne 's/^ *\# *include *[<\"]\(.*\)\.h[>\"]/\1/p' $(LOCAL_SRCS)))
endif
########################################################################
@@ -958,7 +990,7 @@ endif
# Using += instead of =, so that CPPFLAGS can be set per sketch level
CPPFLAGS += -$(MCU_FLAG_NAME)=$(MCU) -DF_CPU=$(F_CPU) -DARDUINO=$(ARDUINO_VERSION) $(ARDUINO_ARCH_FLAG) -D__PROG_TYPES_COMPAT__ \
- -I. -I$(ARDUINO_CORE_PATH) -I$(ARDUINO_VAR_PATH)/$(VARIANT) \
+ -I$(ARDUINO_CORE_PATH) -I$(ARDUINO_VAR_PATH)/$(VARIANT) \
$(SYS_INCLUDES) $(PLATFORM_INCLUDES) $(USER_INCLUDES) -Wall -ffunction-sections \
-fdata-sections
@@ -1022,11 +1054,22 @@ else
$(call show_config_variable,DEVICE_PATH,[AUTODETECTED])
endif
-# Returns the Arduino port (first wildcard expansion) if it exists, otherwise it errors.
-ifeq ($(CURRENT_OS), WINDOWS)
- get_monitor_port = $(COM_STYLE_MONITOR_PORT)
+ifndef FORCE_MONITOR_PORT
+ $(call show_config_variable,FORCE_MONITOR_PORT,[DEFAULT])
else
- get_monitor_port = $(if $(wildcard $(DEVICE_PATH)),$(firstword $(wildcard $(DEVICE_PATH))),$(error Arduino port $(DEVICE_PATH) not found!))
+ $(call show_config_variable,FORCE_MONITOR_PORT,[USER])
+endif
+
+ifdef FORCE_MONITOR_PORT
+ # Skips the DEVICE_PATH existance check.
+ get_monitor_port = $(DEVICE_PATH)
+else
+ # Returns the Arduino port (first wildcard expansion) if it exists, otherwise it errors.
+ ifeq ($(CURRENT_OS), WINDOWS)
+ get_monitor_port = $(COM_STYLE_MONITOR_PORT)
+ else
+ get_monitor_port = $(if $(wildcard $(DEVICE_PATH)),$(firstword $(wildcard $(DEVICE_PATH))),$(error Arduino port $(DEVICE_PATH) not found!))
+ endif
endif
# Returns the ISP port (first wildcard expansion) if it exists, otherwise it errors.
@@ -1416,10 +1459,10 @@ size: $(TARGET_HEX)
$(call avr_size,$(TARGET_ELF),$(TARGET_HEX))
show_boards:
- @$(CAT) "$(BOARDS_TXT)" | grep -E "^[a-zA-Z0-9_]+.name" | sort -uf | sed 's/.name=/:/' | column -s: -t
+ @$(CAT) $(BOARDS_TXT) | grep -E '^[a-zA-Z0-9_]+.name' | sort -uf | sed 's/.name=/:/' | column -s: -t
monitor:
-ifneq ("$(MONITOR_CMD)", "putty")
+ifneq ($(MONITOR_CMD), 'putty')
$(MONITOR_CMD) $(call get_monitor_port) $(MONITOR_BAUDRATE)
else
ifneq ($(strip $(MONITOR_PARMS)),)
@@ -1449,7 +1492,7 @@ generated_assembly: generate_assembly
@$(ECHO) "\"generated_assembly\" target is deprecated. Use \"generate_assembly\" target instead\n\n"
help_vars:
- @$(CAT) "$(ARDMK_DIR)/arduino-mk-vars.md"
+ @$(CAT) $(ARDMK_DIR)/arduino-mk-vars.md
help:
@$(ECHO) "\nAvailable targets:\n\
diff --git a/HISTORY.md b/HISTORY.md
index 80c48b5..f879f2d 100644
--- a/HISTORY.md
+++ b/HISTORY.md
@@ -16,6 +16,7 @@ I tried to give credit whenever possible. If I have missed anyone, kindly add it
- New: Support for Teensy 3.x (https://github.com/stepcut)
- New: Support for PuTTY under Windows (https://github.com/PeterMosmans)
- New: Add support for installation using homebrew(https://github.com/ladislas)
+- New: Add support and example for flashing on a remote RPi. (https://github.com/Gaboose)
- Tweak: Update Malefile-example.mk with STD flags (https://github.com/ladislas)
- Tweak: Allow remove of any OBJDIR with `$(REMOVE) $(OBJDIR)`. (https://github.com/ladislas)
@@ -23,6 +24,9 @@ I tried to give credit whenever possible. If I have missed anyone, kindly add it
- Tweak: Update travis-ci to test against Arduino 1.0.6. (https://github.com/sej7278)
- Tweak: Updated package instructions for Arch/Fedora/Raspbian. (https://github.com/sej7278)
- Tweak: Remove $(EXTRA_XXX) variables (Issue #234) (https://github.com/ladislas)
+- Tweak: Moved location of avrdude for 1.5.8 on Linux (Issue #301) (https://github.com/sej7278)
+- Tweak: Allow 'build.core' param as found in [arduino-tiny](https://code.google.com/p/arduino-tiny/) Prospective Boards.txt. (https://github.com/Gaboose)
+- Tweak: Replace CXX_NAME with CXX as per the Emacs Flymake Wiki (Issue #309) (https://github.com/sej7278)
- Fix: Improved Windows (Cygwin/MSYS) support (https://github.com/PeterMosmans)
- Fix: Change "tinyladi" username to "ladislas" in HISTORY.md. (https://github.com/ladislas)
@@ -37,6 +41,7 @@ I tried to give credit whenever possible. If I have missed anyone, kindly add it
- Fix: Changed IDE download URL *again* for Travis-CI. (https://github.com/sej7278)
- Fix: Allow avrdude to erase the chip before programming during ispload (https://github.com/tchebb)
- Fix: Fix speed regression. Thanks ladislas (Issue #280) (https://github.com/sej7278)
+- Fix: Removed some double quotes that were breaking variable expansion. (https://github.com/sej7278)
### 1.3.4 (2014-07-12)
- Tweak: Allow spaces in "Serial.begin (....)". (Issue #190) (https://github.com/pdav)
diff --git a/README.md b/README.md
index 7f017b0..0d3477f 100644
--- a/README.md
+++ b/README.md
@@ -259,7 +259,7 @@ Then, the following line must be added to the project Makefile :
```
check-syntax:
- $(CXX_NAME) -c -include Arduino.h -x c++ $(CXXFLAGS) $(CPPFLAGS) -fsyntax-only $(CHK_SOURCES)
+ $(CXX) -c -include Arduino.h -x c++ $(CXXFLAGS) $(CPPFLAGS) -fsyntax-only $(CHK_SOURCES)
```
## Test Suite
diff --git a/arduino-mk-vars.md b/arduino-mk-vars.md
index 73bed78..4003a6c 100644
--- a/arduino-mk-vars.md
+++ b/arduino-mk-vars.md
@@ -316,6 +316,25 @@ MONITOR_PORT = com3
----
+### FORCE_MONITOR_PORT
+
+**Description:**
+
+Skip the MONITOR_PORT existance check.
+
+**Example:**
+
+```Makefile
+# Enable
+FORCE_MONITOR_PORT = true
+# Disable (default)
+undefine FORCE_MONITOR_PORT
+```
+
+**Requirement:** *Optional*
+
+----
+
### USER_LIB_PATH
**Description:**
@@ -392,6 +411,29 @@ ARDUINO_VAR_PATH = ~/sketchbook/hardware/arduino-tiny/cores/tiny
----
+### CORE
+
+**Description:**
+
+Name of the core *inside* the ALTERNATE_CORE or the standard core.
+
+Usually can be auto-detected as `build.core` from `boards.txt`.
+
+**Example:**
+
+```Makefile
+# standard Arduino core (undefine ALTERNATE_CORE)
+CORE = arduino
+# or
+CORE = robot
+# tiny core (ALTERNATE_CORE = arduino-tiny)
+CORE = tiny
+```
+
+**Requirement:** *Optional*
+
+----
+
### VARIANT
**Description:**
diff --git a/examples/BlinkNetworkRPi/ATtinyBlink.ino b/examples/BlinkNetworkRPi/ATtinyBlink.ino
new file mode 100644
index 0000000..1d1566d
--- /dev/null
+++ b/examples/BlinkNetworkRPi/ATtinyBlink.ino
@@ -0,0 +1,23 @@
+/*
+ Blink
+ Turns on an LED on for one second, then off for one second, repeatedly.
+
+ This example code is in the public domain.
+ */
+
+// Connect a LED to Pin 3. It might be different in different ATtiny micro controllers
+int led = 3;
+
+// the setup routine runs once when you press reset:
+void setup() {
+ // initialize the digital pin as an output.
+ pinMode(led, OUTPUT);
+}
+
+// the loop routine runs over and over again forever:
+void loop() {
+ digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level)
+ delay(1000); // wait for a second
+ digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
+ delay(1000); // wait for a second
+}
diff --git a/examples/BlinkNetworkRPi/Makefile b/examples/BlinkNetworkRPi/Makefile
new file mode 100644
index 0000000..15e565e
--- /dev/null
+++ b/examples/BlinkNetworkRPi/Makefile
@@ -0,0 +1,46 @@
+# Arduino Make file. Refer to https://github.com/sudar/Arduino-Makefile
+
+# Tested and working with a linuxspi programmer on a remote Raspberry Pi
+# Refer to https://github.com/kcuzner/avrdude for linuxspi.
+# Should work with ISP as well if you replace $(AVRDUDE_ARD_OPTS) with
+# $(AVRDUDE_ISP_OPTS) in the net_set_fuses rule.
+
+# Alternate core from https://code.google.com/p/arduino-tiny
+ALTERNATE_CORE = tiny
+BOARD_TAG = attiny85at8
+
+# Avrdude config path on the remote Raspberry Pi
+AVRDUDE_CONF=/usr/local/etc/avrdude.conf
+
+# Skip the monitor port existance check since it's not on our machine.
+FORCE_MONITOR_PORT=true
+MONITOR_PORT=/dev/spidev0.0
+
+include ../../Arduino.mk
+
+
+# Additional rules to use a remote Raspberry Pi programmer
+
+# Note that it's recommended not to use root for this task,
+# but to setup spidev access on a normal user instead.
+HOST = root@alarmpi
+SSH_AVRDUDE = ssh $(HOST) /usr/local/bin/avrdude
+
+CAT_HEX = cat $(TARGET_HEX)
+AVRDUDE_UPLOAD_PIPE = -U flash:w:-:i
+
+.PHONY: net_upload net_set_fuses
+
+net_upload: $(TARGET_HEX) verify_size
+ $(CAT_HEX) | $(SSH_AVRDUDE) $(AVRDUDE_COM_OPTS) $(AVRDUDE_ARD_OPTS) \
+ $(AVRDUDE_UPLOAD_PIPE)
+
+net_set_fuses:
+ifneq ($(strip $(AVRDUDE_ISP_FUSES_PRE)),)
+ $(SSH_AVRDUDE) $(AVRDUDE_COM_OPTS) $(AVRDUDE_ARD_OPTS) -e \
+ $(AVRDUDE_ISP_FUSES_PRE)
+endif
+ifneq ($(strip $(AVRDUDE_ISP_FUSES_POST)),)
+ $(SSH_AVRDUDE) $(AVRDUDE_COM_OPTS) $(AVRDUDE_ARD_OPTS) \
+ $(AVRDUDE_ISP_FUSES_POST)
+endif
diff --git a/tests/script/runtests.sh b/tests/script/runtests.sh
index f45fa3f..1c54836 100755
--- a/tests/script/runtests.sh
+++ b/tests/script/runtests.sh
@@ -7,7 +7,7 @@ failures=()
# These examples cannot be tested easily at the moment as they require
# alternate cores. The MakefileExample doesn't actually contain any source code
# to compile.
-NON_TESTABLE_EXAMPLES=(ATtinyBlink MakefileExample TinySoftWareSerial BlinkTeensy)
+NON_TESTABLE_EXAMPLES=(ATtinyBlink MakefileExample TinySoftWareSerial BlinkTeensy BlinkNetworkRPi)
for dir in $TESTS_DIR/*/
do