ifeq (, $(__RIOTBUILD_FLAG)) $(error You cannot build a module on its own. Use "make" in your application's directory instead.) endif unexport DIRS DIRS := $(sort $(abspath ${DIRS})) MODULE ?= $(shell basename $(CURDIR)) .PHONY: all ${DIRS:%=ALL--%} ${DIRS:%=CLEAN--%} all: $(BINDIR)$(MODULE).a ..nothing ..nothing: @: clean:: ${DIRS:%=CLEAN--%} ${DIRS:%=ALL--%}: "$(MAKE)" -C ${@:ALL--%=%} ${DIRS:%=CLEAN--%}: "$(MAKE)" -C ${@:CLEAN--%=%} clean ifeq ($(strip $(SRC)),) SRC := $(wildcard *.c) endif ifeq ($(strip $(SRCXX)),) SRCXX := $(wildcard *.cpp) endif ifeq ($(strip $(ASMSRC)),) ASMSRC := $(wildcard *.s) endif ifeq ($(strip $(ASSMSRC)),) ASSMSRC := $(wildcard *.S) endif OBJC := $(SRC:%.c=$(BINDIR)$(MODULE)/%.o) OBJCXX := $(SRCXX:%.cpp=$(BINDIR)$(MODULE)/%.o) ASMOBJ := $(ASMSRC:%.s=$(BINDIR)$(MODULE)/%.o) ASSMOBJ := $(ASSMSRC:%.S=$(BINDIR)$(MODULE)/%.o) OBJ := $(OBJC) $(OBJCXX) $(ASMOBJ) $(ASSMOBJ) DEP := $(OBJC:.o=.d) $(OBJCXX:.o=.d) $(ASSMOBJ:.o=.d) $(BINDIR)$(MODULE)/: $(AD)mkdir -p $@ $(BINDIR)$(MODULE).a $(OBJ): | $(BINDIR)$(MODULE)/ $(BINDIR)$(MODULE).a: $(OBJ) | ${DIRS:%=ALL--%} $(AD)$(AR) $(ARFLAGS) $@ $? CXXFLAGS = $(filter-out $(CXXUWFLAGS), $(CFLAGS)) $(CXXEXFLAGS) # compile and generate dependency info $(OBJC): $(BINDIR)$(MODULE)/%.o: %.c $(AD)$(CCACHE) $(CC) \ -DRIOT_FILE_RELATIVE=\"$(patsubst $(RIOTBASE)/%,%,$(abspath $<))\" \ -DRIOT_FILE_NOPATH=\"$(notdir $<)\" \ $(CFLAGS) $(INCLUDES) -MD -MP -c -o $@ $(abspath $<) $(OBJCXX): $(BINDIR)$(MODULE)/%.o: %.cpp $(AD)$(CCACHE) $(CXX) \ -DRIOT_FILE_RELATIVE=\"$(patsubst $(RIOTBASE)/%,%,$(abspath $<))\" \ -DRIOT_FILE_NOPATH=\"$(notdir $<)\" \ $(CXXFLAGS) $(INCLUDES) $(CXXINCLUDES) -MD -MP -c -o $@ $(abspath $<) $(ASMOBJ): $(BINDIR)$(MODULE)/%.o: %.s $(AD)$(AS) $(ASFLAGS) -o $@ $(abspath $<) $(ASSMOBJ): $(BINDIR)$(MODULE)/%.o: %.S $(AD)$(CC) $(CFLAGS) $(INCLUDES) -MD -MP -c -o $@ $(abspath $<) # pull in dependency info for *existing* .o files # deleted header files will be silently ignored -include $(DEP)