You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
83 lines
2.3 KiB
83 lines
2.3 KiB
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 := $(filter-out $(SRC_NOLTO), $(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_LTO := $(SRC:%.c=$(BINDIR)/$(MODULE)/%.o) |
|
OBJC_NOLTO := $(SRC_NOLTO:%.c=$(BINDIR)/$(MODULE)/%.o) |
|
OBJC := $(OBJC_NOLTO) $(OBJC_LTO) |
|
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_LTO): CFLAGS+=$(LTOFLAGS) |
|
|
|
$(OBJC): $(BINDIR)/$(MODULE)/%.o: %.c $(RIOTBUILD_CONFIG_HEADER_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 $(RIOTBUILD_CONFIG_HEADER_C) |
|
$(AD)$(CCACHE) $(CXX) \ |
|
-DRIOT_FILE_RELATIVE=\"$(patsubst $(RIOTBASE)/%,%,$(abspath $<))\" \ |
|
-DRIOT_FILE_NOPATH=\"$(notdir $<)\" \ |
|
$(CXXFLAGS) $(CXXINCLUDES) $(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)
|
|
|