@@ 8,6 8,7 @@ BINDIR=bin
SRCDIR=src
INCDIR=include
OBJDIR=obj
+DEPDIR=$(OBJDIR)/.deps
DEVICEDIR=devices/$(DEVICE)
GENERALDIR=devices/general
@@ 17,8 18,10 @@ GENERALSRCS=$(wildcard $(GENERALDIR)/*.c)
DEVICESRCS=$(wildcard $(DEVICEDIR)/*.c)
SRCS=$(PROJSRCS) $(GENERALSRCS) $(DEVICESRCS)
-OBJS=$(patsubst %.c,obj/%.o,$(SRCS))
+OBJS=$(patsubst %.c,$(OBJDIR)/%.o,$(SRCS))
+DEPFILES=$(patsubst %.c,$(DEPDIR)/%.d,$(SRCS))
+DEPFLAGS = -MT $@ -MMD -MP -MF $(DEPDIR)/$*.d
CFLAGS=-I$(INCDIR) \
-I$(DEVICEDIR)/$(INCDIR) \
-Ilibs/CMSIS_6/CMSIS/Core/Include \
@@ 31,21 34,14 @@ CC=arm-none-eabi-gcc
LD=arm-none-eabi-ld
OPENOCD=openocd
-$(BINDIR)/$(APP): $(OBJS)
- mkdir -p $(BINDIR)
- $(CC) $^ -o $@ $(CFLAGS) $(LDFLAGS)
+$(BINDIR)/$(APP): $(OBJS) | $(BINDIR)
+ $(CC) $^ -o $@ $(CFLAGS) $(LDFLAGS) $(DEPFLAGS)
-$(OBJDIR)/src/%.o: $(SRCDIR)/%.c
- mkdir -p "$(OBJDIR)/src"
- $(CC) -c $< -o $@ $(CFLAGS)
-
-$(OBJDIR)/$(DEVICEDIR)/%.o: $(DEVICEDIR)/%.c
- mkdir -p "$(OBJDIR)/$(DEVICEDIR)"
- $(CC) -c $< -o $@ $(CFLAGS)
-
-$(OBJDIR)/$(GENERALDIR)/%.o: $(GENERALDIR)/%.c
- mkdir -p "$(OBJDIR)/$(GENERALDIR)"
- $(CC) -c $< -o $@ $(CFLAGS)
+%.o : %.c
+$(OBJDIR)/%.o: %.c | $(DEPDIR) $(OBJDIR)
+ mkdir -p "$(dir $@)"
+ mkdir -p $(dir $(DEPDIR)/$*.d)
+ $(CC) -c $< -o $@ $(CFLAGS) $(DEPFLAGS)
.PHONY: openocd flash clean
openocd:
@@ 55,11 51,11 @@ flash: $(BINDIR)/$(APP)
$(OPENOCD) -f interface/stlink.cfg -f target/$(TARGET).cfg -c "program $(BINDIR)/$(APP) verify reset exit"
clean:
- rm -rf $(OBJDIR) $(BINDIR)
+ rm -rf $(OBJDIR) $(BINDIR) $(DEPDIR)
-depend: .depend
-.depend: $(SRCS)
- rm -f "$@"
- $(CC) $(CFLAGS) -MM $^ > "$@"
+$(BINDIR): ; mkdir -p $@
+$(OBJDIR): ; mkdir -p $@
+$(DEPDIR): ; mkdir -p $@
-include .depend
+$(DEPFILES):
+include $(wildcard $(DEPFILES))