# ---- Push on stack ---- SP := $(SP).x DIRSTACK_$(SP) := $(d) d := $(DIR) # Iterate through subdirectory tree # Local sources SRCS_$(d) := $(wildcard $(d)/*.c) OBJS_$(d) := $(SRCS_$(d):.c=.o) OBJS_$(d) := $(patsubst $(SRC_DIR)/%, $(OBJ_DIR)/%, $(OBJS_$(d))) DEPS_$(d) := $(OBJS_$(d):.o=.d) OBJS := $(OBJS) $(OBJS_$(d)) DEPS := $(DEPS) $(DEPS_$(d)) # Local targets LIBS_$(d) := LIBS_$(d) := $(patsubst $(SRC_DIR)/%, $(OBJ_DIR)/%, $(LIBS_$(d))) LIBS := $(LIBS) $(LIBS_$(d)) BINS_$(d) := $(d)/blas BINS_$(d) := $(patsubst $(SRC_DIR)/%, $(OBJ_DIR)/%, $(BINS_$(d))) BINS := $(BINS) $(BINS_$(d)) # Local rules # $(LIBS_$(d)) = TCFLAGS := # $(LIBS_$(d)) = TCINCS := # $(LIBS_$(d)) = TCLIBS := $(LIBS_$(d)): $(OBJS_$(d)) $(ARCHIVE) $(BINS_$(d)): TCFLAGS := -D_GNU_SOURCE $(BINS_$(d)): TCLIBS := -lpthread -lm $(BINS_$(d)): $(OBJS_$(d)) $(OBJ_DIR)/libn/libn.a $(LIB_DIR)/vendor/libblas.a $(LINK) # ---- Pop off stack ---- -include $(DEPS_$(d)) d := $(DIRSTACK_$(SP)) SP := $(basename $(SP))