From 8f10b98e51a973f80fe6850eb36f340717bb11f7 Mon Sep 17 00:00:00 2001 From: Christopher Peplin Date: Sun, 25 Mar 2012 23:54:21 -0400 Subject: [PATCH 1/2] Build user libraries from the sketchbook directory. --- README.md | 7 +++++++ arduino-mk/Arduino.mk | 26 ++++++++++++++++++++++++-- 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index ec38ba9..e976748 100644 --- a/README.md +++ b/README.md @@ -8,3 +8,10 @@ documentation](http://mjo.tc/atelier/2009/02/arduino-cli.html "Documentation") exists. If you're using Debian or Ubuntu, you can find this in the arduino-core package. + +## User Libraries + +In order to use Arduino libraries installed in the user's sketchbook folder (the +standard location for custom libraries when using the Arduino IDE), you need to +set the `ARDUNIO_SKETCHBOOK` variable to point to this directory. By default it +is set to `$HOME/sketchbook`. diff --git a/arduino-mk/Arduino.mk b/arduino-mk/Arduino.mk index 2d39095..54d2f89 100644 --- a/arduino-mk/Arduino.mk +++ b/arduino-mk/Arduino.mk @@ -201,6 +201,14 @@ ARDUINO_LIB_PATH = $(ARDUINO_DIR)/libraries ARDUINO_CORE_PATH = $(ARDUINO_DIR)/hardware/arduino/cores/arduino ARDUINO_VAR_PATH = $(ARDUINO_DIR)/hardware/arduino/variants +ifndef ARDUINO_SKETCHBOOK +ARDUINO_SKETCHBOOK = $(HOME)/sketchbook +endif + +ifndef USER_LIB_PATH +USER_LIB_PATH = $(ARDUINO_SKETCHBOOK)/libraries +endif + endif ######################################################################## @@ -322,11 +330,17 @@ ECHO = echo # General arguments SYS_LIBS = $(patsubst %,$(ARDUINO_LIB_PATH)/%,$(ARDUINO_LIBS)) -SYS_INCLUDES = $(patsubst %,-I%,$(SYS_LIBS)) +USER_LIBS = $(patsubst %,$(USER_LIB_PATH)/%,$(ARDUINO_LIBS)) +SYS_INCLUDES = $(patsubst %,-I%,$(SYS_LIBS)) $(patsubst %,-I%,$(USER_LIBS)) LIB_C_SRCS = $(wildcard $(patsubst %,%/*.c,$(SYS_LIBS))) LIB_CPP_SRCS = $(wildcard $(patsubst %,%/*.cpp,$(SYS_LIBS))) +USER_LIB_CPP_SRC = $(wildcard $(patsubst %,%/*.cpp,$(USER_LIBS))) +USER_LIB_C_SRC = $(wildcard $(patsubst %,%/*.c,$(USER_LIBS))) LIB_OBJS = $(patsubst $(ARDUINO_LIB_PATH)/%.c,$(OBJDIR)/libs/%.o,$(LIB_C_SRCS)) \ - $(patsubst $(ARDUINO_LIB_PATH)/%.cpp,$(OBJDIR)/libs/%.o,$(LIB_CPP_SRCS)) + $(patsubst $(ARDUINO_LIB_PATH)/%.cpp,$(OBJDIR)/libs/%.o,$(LIB_CPP_SRCS)) \ + $(patsubst $(USER_LIB_PATH)/%.cpp,$(OBJDIR)/libs/%.o,$(USER_LIB_CPP_SRCS)) \ + $(patsubst $(USER_LIB_PATH)/%.c,$(OBJDIR)/libs/%.o,$(USER_LIB_C_SRCS)) + CPPFLAGS = -mmcu=$(MCU) -DF_CPU=$(F_CPU) -DARDUINO=$(ARDUINO_VERSION) \ -I. -I$(ARDUINO_CORE_PATH) -I$(ARDUINO_VAR_PATH)/$(VARIANT) \ @@ -357,6 +371,14 @@ $(OBJDIR)/libs/%.o: $(ARDUINO_LIB_PATH)/%.cpp mkdir -p $(dir $@) $(CC) -c $(CPPFLAGS) $(CXXFLAGS) $< -o $@ +$(OBJDIR)/libs/%.o: $(USER_LIB_PATH)/%.cpp + mkdir -p $(dir $@) + $(CC) -c $(CPPFLAGS) $(CFLAGS) $< -o $@ + +$(OBJDIR)/libs/%.o: $(USER_LIB_PATH)/%.c + mkdir -p $(dir $@) + $(CC) -c $(CPPFLAGS) $(CFLAGS) $< -o $@ + # normal local sources # .o rules are for objects, .d for dependency tracking # there seems to be an awful lot of duplication here!!! From de2b5273ec27fbf418c642a34af4721608cd4163 Mon Sep 17 00:00:00 2001 From: Christopher Peplin Date: Sat, 31 Mar 2012 18:48:20 -0400 Subject: [PATCH 2/2] Separate out user lib variables from sys lib counterparts for clarity. --- arduino-mk/Arduino.mk | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/arduino-mk/Arduino.mk b/arduino-mk/Arduino.mk index 54d2f89..f93ead3 100644 --- a/arduino-mk/Arduino.mk +++ b/arduino-mk/Arduino.mk @@ -331,20 +331,20 @@ ECHO = echo # General arguments SYS_LIBS = $(patsubst %,$(ARDUINO_LIB_PATH)/%,$(ARDUINO_LIBS)) USER_LIBS = $(patsubst %,$(USER_LIB_PATH)/%,$(ARDUINO_LIBS)) -SYS_INCLUDES = $(patsubst %,-I%,$(SYS_LIBS)) $(patsubst %,-I%,$(USER_LIBS)) +SYS_INCLUDES = $(patsubst %,-I%,$(SYS_LIBS)) +USER_INCLUDES = $(patsubst %,-I%,$(USER_LIBS)) LIB_C_SRCS = $(wildcard $(patsubst %,%/*.c,$(SYS_LIBS))) LIB_CPP_SRCS = $(wildcard $(patsubst %,%/*.cpp,$(SYS_LIBS))) -USER_LIB_CPP_SRC = $(wildcard $(patsubst %,%/*.cpp,$(USER_LIBS))) -USER_LIB_C_SRC = $(wildcard $(patsubst %,%/*.c,$(USER_LIBS))) +USER_LIB_CPP_SRCS = $(wildcard $(patsubst %,%/*.cpp,$(USER_LIBS))) +USER_LIB_C_SRCS = $(wildcard $(patsubst %,%/*.c,$(USER_LIBS))) LIB_OBJS = $(patsubst $(ARDUINO_LIB_PATH)/%.c,$(OBJDIR)/libs/%.o,$(LIB_C_SRCS)) \ - $(patsubst $(ARDUINO_LIB_PATH)/%.cpp,$(OBJDIR)/libs/%.o,$(LIB_CPP_SRCS)) \ - $(patsubst $(USER_LIB_PATH)/%.cpp,$(OBJDIR)/libs/%.o,$(USER_LIB_CPP_SRCS)) \ + $(patsubst $(ARDUINO_LIB_PATH)/%.cpp,$(OBJDIR)/libs/%.o,$(LIB_CPP_SRCS)) +USER_LIB_OBJS = $(patsubst $(USER_LIB_PATH)/%.cpp,$(OBJDIR)/libs/%.o,$(USER_LIB_CPP_SRCS)) \ $(patsubst $(USER_LIB_PATH)/%.c,$(OBJDIR)/libs/%.o,$(USER_LIB_C_SRCS)) - CPPFLAGS = -mmcu=$(MCU) -DF_CPU=$(F_CPU) -DARDUINO=$(ARDUINO_VERSION) \ -I. -I$(ARDUINO_CORE_PATH) -I$(ARDUINO_VAR_PATH)/$(VARIANT) \ - $(SYS_INCLUDES) -g -Os -w -Wall \ + $(SYS_INCLUDES) $(USER_INCLUDES) -g -Os -w -Wall \ -ffunction-sections -fdata-sections CFLAGS = -std=gnu99 CXXFLAGS = -fno-exceptions @@ -484,8 +484,8 @@ $(OBJDIR): $(TARGET_ELF): $(LOCAL_OBJS) $(CORE_LIB) $(OTHER_OBJS) $(CC) $(LDFLAGS) -o $@ $(LOCAL_OBJS) $(CORE_LIB) $(OTHER_OBJS) -lc -lm -$(CORE_LIB): $(CORE_OBJS) $(LIB_OBJS) - $(AR) rcs $@ $(CORE_OBJS) $(LIB_OBJS) +$(CORE_LIB): $(CORE_OBJS) $(LIB_OBJS) $(USER_LIB_OBJS) + $(AR) rcs $@ $(CORE_OBJS) $(LIB_OBJS) $(USER_LIB_OBJS) $(DEP_FILE): $(OBJDIR) $(DEPS) cat $(DEPS) > $(DEP_FILE) @@ -519,7 +519,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) + $(REMOVE) $(LOCAL_OBJS) $(CORE_OBJS) $(LIB_OBJS) $(CORE_LIB) $(TARGETS) $(DEP_FILE) $(DEPS) $(USER_LIB_OBJS) depends: $(DEPS) cat $(DEPS) > $(DEP_FILE)