aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arduino-mk/Arduino.mk93
1 files changed, 66 insertions, 27 deletions
diff --git a/arduino-mk/Arduino.mk b/arduino-mk/Arduino.mk
index c3e3272..9a85222 100644
--- a/arduino-mk/Arduino.mk
+++ b/arduino-mk/Arduino.mk
@@ -82,27 +82,36 @@
# Daniele Vergini)
#
# 0.9.1 06.vi.2012 Sudar
-# - Corrected the ubuntu package names
-# - Prevent the *file-not-found* error if the depends.mk file is not needed
-# - Delete the build-cli folder as well while doing make clean
-# - Added support for compiling .pde files in Arduino 1.0 environment
-# - Replaced = with += in CPPFLAGS assignment so that we can set CPPFLAGS per sketch if needed
-# - Changed AVRDUDE_CONF so it can be defined in per-project makefile (https://github.com/WizenedEE)
-# - Cleaner way to delete the build-cli directory when make clean is invoked
-# - The package name in Debian and Ubuntu is arduino-mk (https://github.com/maqifrnswa)
+# - Corrected the ubuntu package names
+# - Prevent the *file-not-found* error if the depends.mk file is not needed
+# - Delete the build-cli folder as well while doing make clean
+# - Added support for compiling .pde files in Arduino 1.0 environment
+# - Replaced = with += in CPPFLAGS assignment so that we can set CPPFLAGS per sketch if needed
+# - Changed AVRDUDE_CONF so it can be defined in per-project makefile (https://github.com/WizenedEE)
+# - Cleaner way to delete the build-cli directory when make clean is invoked
+# - The package name in Debian and Ubuntu is arduino-mk (https://github.com/maqifrnswa)
#
#
# 0.9.2 06.vi.2012 Sudar
-# - Allow user to choose source files (LOCAL_*_SRCS flags) (https://github.com/Gaftech)
-# - Modified 'make size' behavior: using --mcu option and targeting .elf file instead of .hex file.(https://github.com/Gaftech)
-#
+# - Allow user to choose source files (LOCAL_*_SRCS flags) (https://github.com/Gaftech)
+# - Modified 'make size' behavior: using --mcu option and targeting .elf file instead of .hex file.(https://github.com/Gaftech)
+#
# 0.9.3 13.vi.2012 Sudar
-# - Autodetect ARDUINO_DIR, Arduino version (https://github.com/rpavlik/)
-# - Categorize libs into user and system (https://github.com/rpavlik/)
-# - Dump size at the end of the build (https://github.com/rpavlik/)
-# - Lots and lots of improvements (https://github.com/rpavlik/)
-# - Changed bytes option for the head shell command, so that it works in Mac as well
-# - Auto detect Serial Baud rate from sketch if possible
+# - Autodetect ARDUINO_DIR, Arduino version (https://github.com/rpavlik/)
+# - Categorize libs into user and system (https://github.com/rpavlik/)
+# - Dump size at the end of the build (https://github.com/rpavlik/)
+# - Lots and lots of improvements (https://github.com/rpavlik/)
+# - Changed bytes option for the head shell command, so that it works in Mac as well
+# - Auto detect Serial Baud rate from sketch if possible
+#
+# 0.9.3.1 18.viii.2012 jeffkowalski
+# - Autodetect ARDUINO_LIBS from includes in LOCAL_SRCS
+# - Autodetect ARDUINO_SKETCHBOOK from file
+# set by Arduino IDE
+# - Autodetect ARDMK_DIR based on location of
+# this file
+# - Added support for utility directory
+# within SYS and USER libraries
#
########################################################################
#
@@ -239,7 +248,7 @@
# bindkey ^C kill
#
# If you want to change the baudrate, just set MONITOR_BAUDRATE. If you
-# don't set it, it tries to read from the sketch. If it couldn't read
+# don't set it, it tries to read from the sketch. If it couldn't read
# from the sketch, then it defaults to 9600 baud.
#
########################################################################
@@ -384,28 +393,43 @@ endif
########################################################################
# Makefile distribution path
#
-ifdef ARDMK_DIR
- $(call show_config_variable,ARDMK_DIR)
+ifndef ARDMK_DIR
+ # presume it's a level above the path to our own file
+ ARDMK_DIR := $(realpath $(dir $(realpath $(lastword $(MAKEFILE_LIST))))/..)
+ $(call show_config_variable,ARDMK_DIR,[COMPUTED],(relative to $(notdir $(lastword $(MAKEFILE_LIST)))))
+else
+ $(call show_config_variable,ARDMK_DIR,[USER])
+endif
+ifdef ARDMK_DIR
ifndef ARDMK_PATH
ARDMK_PATH = $(ARDMK_DIR)/bin
$(call show_config_variable,ARDMK_PATH,[COMPUTED],(relative to ARDMK_DIR))
-
else
$(call show_config_variable,ARDMK_PATH)
endif
-
else
-
echo $(error "ARDMK_DIR is not defined")
-
endif
+
########################################################################
# Miscellanea
#
ifndef ARDUINO_SKETCHBOOK
- ARDUINO_SKETCHBOOK = $(HOME)/sketchbook
+ ifneq ($(wildcard $(HOME)/.arduino/preferences.txt),)
+ ARDUINO_SKETCHBOOK = $(shell grep --max-count=1 --regexp="sketchbook.path=" \
+ $(HOME)/.arduino/preferences.txt | \
+ sed -e 's/sketchbook.path=//' )
+ endif
+ ifneq ($(ARDUINO_SKETCHBOOK),)
+ $(call show_config_variable,ARDUINO_SKETCHBOOK,[AUTODETECTED],(in arduino preferences file))
+ else
+ ARDUINO_SKETCHBOOK = $(HOME)/sketchbook
+ $(call show_config_variable,ARDUINO_SKETCHBOOK,[DEFAULT])
+ endif
+else
+ $(call show_config_variable,ARDUINO_SKETCHBOOK)
endif
ifndef USER_LIB_PATH
@@ -423,7 +447,7 @@ endif
# for more information (search for 'character special device').
#
ifndef MONITOR_BAUDRATE
- #This works only in linux. TODO: Port it to MAC OS also
+ #This works only in linux. TODO: Port it to MAC OS also
SPEED = $(shell grep --max-count=1 --regexp="Serial.begin" $$(ls -1 *.ino) | sed -e 's/\/\/.*$$//g' -e 's/(/\t/' -e 's/)/\t/' | awk -F '\t' '{print $$2}' )
MONITOR_BAUDRATE = $(findstring $(SPEED),300 1200 2400 4800 9600 14400 19200 28800 38400 57600 115200)
@@ -529,6 +553,9 @@ LOCAL_CC_SRCS ?= $(wildcard *.cc)
LOCAL_PDE_SRCS ?= $(wildcard *.pde)
LOCAL_INO_SRCS ?= $(wildcard *.ino)
LOCAL_AS_SRCS ?= $(wildcard *.S)
+LOCAL_SRCS = $(LOCAL_C_SRCS) $(LOCAL_CPP_SRCS) \
+ $(LOCAL_CC_SRCS) $(LOCAL_PDE_SRCS) \
+ $(LOCAL_INO_SRCS) $(LOCAL_AS_SRCS)
LOCAL_OBJ_FILES = $(LOCAL_C_SRCS:.c=.o) $(LOCAL_CPP_SRCS:.cpp=.o) \
$(LOCAL_CC_SRCS:.cc=.o) $(LOCAL_PDE_SRCS:.pde=.o) \
$(LOCAL_INO_SRCS:.ino=.o) $(LOCAL_AS_SRCS:.S=.o)
@@ -556,6 +583,16 @@ else
$(call show_config_info,NO_CORE set so core library will not be built,[MANUAL])
endif
+########################################################################
+# Determine ARDUINO_LIBS automatically
+#
+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)))
+ ARDUINO_LIBS += $(filter $(notdir $(wildcard $(ARDUINO_SKETCHBOOK)/libraries/*)), \
+ $(shell sed -ne "s/^ *\# *include *[<\"]\(.*\)\.h[>\"]/\1/p" $(LOCAL_SRCS)))
+endif
########################################################################
# Rules for making stuff
@@ -597,6 +634,8 @@ ifneq (,$(strip $(LIBS_NOT_FOUND)))
$(error The following libraries specified in ARDUINO_LIBS could not be found (searched USER_LIB_PATH and ARDUINO_LIB_PATH): $(LIBS_NOT_FOUND))
endif
+SYS_LIBS := $(wildcard $(SYS_LIBS) $(addsuffix /utility,$(SYS_LIBS)))
+USER_LIBS := $(wildcard $(USER_LIBS) $(addsuffix /utility,$(USER_LIBS)))
SYS_INCLUDES = $(patsubst %,-I%,$(SYS_LIBS))
USER_INCLUDES = $(patsubst %,-I%,$(USER_LIBS))
LIB_C_SRCS = $(wildcard $(patsubst %,%/*.c,$(SYS_LIBS)))
@@ -833,7 +872,7 @@ ispload: $(TARGET_HEX)
-U lock:w:$(ISP_LOCK_FUSE_POST):m
clean:
- $(REMOVE) $(LOCAL_OBJS) $(CORE_OBJS) $(LIB_OBJS) $(CORE_LIB) $(TARGETS) $(DEP_FILE) $(DEPS) $(USER_LIB_OBJS) ${OBJDIR}
+ $(REMOVE) $(LOCAL_OBJS) $(CORE_OBJS) $(LIB_OBJS) $(CORE_LIB) $(TARGETS) $(DEP_FILE) $(DEPS) $(USER_LIB_OBJS) ${OBJDIR}
depends: $(DEPS)
cat $(DEPS) > $(DEP_FILE)