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 2cc411d..284afb6 100644 --- a/arduino-mk/Arduino.mk +++ b/arduino-mk/Arduino.mk @@ -205,6 +205,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 ######################################################################## @@ -334,15 +342,21 @@ 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)) +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_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)) +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 @@ -369,6 +383,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!!! @@ -474,8 +496,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) @@ -509,7 +531,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)