Currently you need to add every new sys and driver module into the
respective Makefile. This requires rebasing if another module was merged
in the meantime.
This PR allows you to omit the entry to {sys,drivers}/Makefile, if the
subfolder has the same name as the module name, which should be sensible
in most cases.
74 lines
1.7 KiB
Makefile
74 lines
1.7 KiB
Makefile
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) -rcs $@ $?
|
|
|
|
|
|
CXXFLAGS = $(filter-out $(CXXUWFLAGS), $(CFLAGS)) $(CXXEXFLAGS)
|
|
|
|
# compile and generate dependency info
|
|
|
|
$(OBJC): $(BINDIR)$(MODULE)/%.o: %.c
|
|
$(AD)$(CC) $(CFLAGS) $(INCLUDES) -MD -MP -c -o $@ $(abspath $<)
|
|
|
|
$(OBJCXX): $(BINDIR)$(MODULE)/%.o: %.cpp
|
|
$(AD)$(CXX) $(CXXFLAGS) $(INCLUDES) -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)
|