Skip to content

Commit 4d12b84

Browse files
committed
~~~WIP~~~ 0.6
Signed-off-by: Omer Caspi <omer.caspi@gmail.com>
1 parent 473d325 commit 4d12b84

File tree

1 file changed

+72
-59
lines changed

1 file changed

+72
-59
lines changed

module.inc.mk

Lines changed: 72 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ ECHO := /usr/bin/echo
77
MAKEFLAGS := --no-print-directory
88
SBS_MODULE_PATH := $(shell pwd)
99
SBS_BASE_MAKEFILE := $(firstword $(MAKEFILE_LIST))
10-
SBS_VERSION := 0.5.0
10+
SBS_VERSION := 0.6.0
1111

1212
# If no module name is defined use the directory as the name
1313
SBS_MODULE_NAME := $(MODULE_NAME)
@@ -16,11 +16,9 @@ SBS_MODULE_NAME := $(notdir $(SBS_MODULE_PATH))
1616
endif
1717

1818
# Start with empty targets, lets see what the module's Makefile has for us
19-
SBS_EMPTY_TARGET := sbs_empty_target
20-
$(SBS_EMPTY_TARGET):
19+
SBS_EMPTY_TGT := sbs_empty_target
20+
$(SBS_EMPTY_TGT):
2121
@true
22-
SBS_CLEAN_TARGET := $(SBS_EMPTY_TARGET)
23-
SBS_MAIN_TARGET := $(SBS_EMPTY_TARGET)
2422

2523
######################### Binary build start #########################
2624
ifneq ($(MODULE_SRCS),)
@@ -219,10 +217,7 @@ ifneq ($(filter 1,$(MODULE_VERBOSE)),1)
219217
SBS_Q := @
220218
endif
221219

222-
# The empty target is added as an ordered dependency so the binary rule
223-
# will always require *something* to do. This way we can suppress the 'up to date'
224-
# messages without silencing the entire build output.
225-
$(SBS_ARTIFACT): $(SBS_OBJS) $(MODULE_EXTERN_OBJS) $(MAKEFILE_LIST) $(MODULE_BIN_DEPS) | $(SBS_EMPTY_TARGET)
220+
$(SBS_ARTIFACT): $(SBS_OBJS) $(MODULE_EXTERN_OBJS) $(MAKEFILE_LIST) $(MODULE_BIN_DEPS)
226221
ifneq ($(SBS_BIN_TYPE), $(SBS_NONE_BIN_TYPE))
227222
@mkdir -p $(SBS_ARTIFACT_DIR)
228223
$(if $(SBS_Q),@$(ECHO) -e "$(SBS_LD_STR)\t$(notdir $@)")
@@ -231,6 +226,8 @@ else
231226
.PHONY: $(SBS_ARTIFACT)
232227
endif
233228

229+
SBS_MAIN_TGT := $(SBS_ARTIFACT)
230+
234231
# $1 - source suffix
235232
# $2 - compiler print string (SBS_CC or CXX)
236233
# $3 - compiler binary (gcc or g++)
@@ -256,68 +253,84 @@ ifneq ($(MAKECMDGOALS),clean)
256253
-include $(SBS_OBJS_DEPS)
257254
endif
258255

259-
SBS_CLEAN_FILES := $(SBS_OBJS) $(SBS_OBJS_DEPS)
256+
SBS_CLN_FILES := $(SBS_OBJS) $(SBS_OBJS_DEPS)
260257
ifneq ($(SBS_BIN_TYPE), $(SBS_NONE_BIN_TYPE))
261-
SBS_CLEAN_FILES += $(SBS_ARTIFACT)
258+
SBS_CLN_FILES += $(SBS_ARTIFACT)
262259
endif
263-
$(SBS_ARTIFACT)_clean:
264-
$(SBS_Q)rm -f $(SBS_CLEAN_FILES)
265260

266-
SBS_MAIN_TARGET := $(SBS_ARTIFACT)
267-
SBS_CLEAN_TARGET := $(SBS_ARTIFACT)_clean
261+
SBS_CLN_TGT := $(SBS_ARTIFACT)_clean
262+
$(SBS_CLN_TGT):
263+
$(SBS_Q)rm -f $(SBS_CLN_FILES)
268264

269265
endif # None empty target
270266
######################### Binary build end #########################
271-
272-
ifneq ($(MODULE_SUB_MODULES),)
273-
$(MODULE_SUB_MODULES):
274-
@$(MAKE) -C $@
275-
276-
SBS_CLEAN_SUFFIX := __clean
277-
SBS_SUBMODULES_CLEAN := $(addsuffix $(SBS_CLEAN_SUFFIX),$(MODULE_SUB_MODULES))
278-
$(SBS_SUBMODULES_CLEAN):
279-
@$(MAKE) -C $(@:$(SBS_CLEAN_SUFFIX)=) clean
280-
endif
281-
282267
# Set the default target to 'all'. Make just picks up the first non empty
283268
# target (or such). Here we make sure we control the make behavior.
284269
.DEFAULT_GOAL := all
285-
.PHONY: all clean $(SBS_CLEAN_TARGET)
286-
.PHONY: $(MODULE_PRE_SUB_MODULES) $(MODULE_SUB_MODULES) $(MODULE_POST_SUB_MODULES) $(SBS_SUBMODULES_CLEAN)
270+
SBS_ALL_SUB_MODULES := $(MODULE_SUB_MODULES) $(MODULE_PRE_SUB_MODULES) $(MODULE_POST_SUB_MODULES)
287271

288-
SBS_BUILD_ORDER := $(strip $(MODULE_PRE_BUILD) $(MODULE_PRE_SUB_MODULES))
289-
ifneq ($(SBS_ARTIFACT),)
290-
SBS_BUILD_ORDER := $(strip $(SBS_BUILD_ORDER) $(strip $(SBS_MODULE_NAME)))
272+
SBS_BUILD_DEPS := $(strip $(SBS_BASE_MAKEFILE) $(MODULE_EXT_DEPS))
273+
274+
# Build dependencies rules
275+
BUILD_TITLE_TGT := SBS_BUILD_TITLE
276+
$(BUILD_TITLE_TGT):
277+
@$(ECHO) "Building $(SBS_MODULE_NAME)"
278+
279+
.PHONY: all $(SBS_ALL_SUB_MODULES) $(BUILD_TITLE_TGT)
280+
# $1 - modules list
281+
# $2 - 1 if it's a SBS target 0 if external pre/post build target
282+
# Add the moudules to the dependencies list after rule is set, so following rules depend on them
283+
define GenSubModuleRule
284+
ifneq ($1,)
285+
$1: $$(SBS_BUILD_DEPS)
286+
ifeq ($2,1)
287+
@$(MAKE) -C $$@
291288
endif
292-
SBS_BUILD_ORDER := $(strip $(SBS_BUILD_ORDER) $(strip $(MODULE_SUB_MODULES)))
293-
SBS_BUILD_ORDER := $(strip $(SBS_BUILD_ORDER) $(strip $(MODULE_POST_BUILD) $(MODULE_POST_SUB_MODULES)))
294-
ifneq ($(SBS_BUILD_ORDER),$(SBS_MODULE_NAME))
295-
ifneq ($(SBS_BUILD_ORDER),)
296-
SBS_ORDER_STR := " order=[$(SBS_BUILD_ORDER)]"
289+
SBS_BUILD_DEPS += $1
290+
endif
291+
endef
292+
293+
$(eval $(call GenSubModuleRule,$(MODULE_PRE_BUILD),0))
294+
$(eval $(call GenSubModuleRule,$(MODULE_PRE_SUB_MODULES),1))
295+
$(SBS_MAIN_TGT): $(SBS_BUILD_DEPS)
296+
$(eval $(call GenSubModuleRule,$(MODULE_SUB_MODULES),1))
297+
SBS_BUILD_DEPS += $(SBS_MAIN_TGT)
298+
$(eval $(call GenSubModuleRule,$(MODULE_POST_SUB_MODULES),1))
299+
$(eval $(call GenSubModuleRule,$(MODULE_POST_BUILD),0))
300+
301+
all: $(SBS_BUILD_DEPS)
302+
@true
303+
$(SBS_BUILD_DEPS) all: $(BUILD_TITLE_TGT)
304+
305+
# Clean dependencies rules
306+
CLN_TITLE_TGT := SBS_CLEAN_TITLE
307+
$(CLN_TITLE_TGT):
308+
@$(ECHO) "Cleaning $(SBS_MODULE_NAME)"
309+
310+
ifneq ($(MODULE_PRE_CLN),)
311+
clean: $(MODULE_PRE_CLN)
297312
endif
313+
314+
SBS_CLN_TGT := clean
315+
SBS_CLN_SUFFIX := __clean
316+
SBS_SUB_MODULES_CLN_TGTS := $(addsuffix $(SBS_CLN_SUFFIX),$(SBS_ALL_SUB_MODULES))
317+
.PHONY: $(SBS_SUB_MODULES_CLN_TGTS) $(SBS_CLN_TGT) $(CLN_TITLE_TGT)
318+
ifneq ($(SBS_ALL_SUB_MODULES),)
319+
$(SBS_SUB_MODULES_CLN_TGTS):
320+
@$(MAKE) -C $(@:$(SBS_CLN_SUFFIX)=) $(SBS_CLN_TGT)
298321
endif
299322

323+
ifneq ($(MODULE_POST_CLN),)
324+
$(MODULE_POST_CLN): $(MODULE_PRE_CLN) $(SBS_CLN_TGT) $(SBS_SUB_MODULES_CLN_TGTS)
325+
endif
300326

301-
define SbsForEach
302-
for t in $(1); do $(2) $$t $(3) || exit $$? ; done
303-
endef
327+
SBS_ALL_CLN_TGTS := $(MODULE_PRE_CLN) $(SBS_CLN_TGT) $(SBS_SUB_MODULES_CLN_TGTS) $(MODULE_POST_CLN)
304328

305-
all:
306-
@echo "Building '$(SBS_MODULE_NAME)'$(SBS_ORDER_STR)"
307-
@$(call SbsForEach,$(MODULE_PRE_BUILD),$(MAKE) -f $(SBS_BASE_MAKEFILE))
308-
@$(call SbsForEach,$(MODULE_PRE_SUB_MODULES),$(MAKE) -C)
309-
@$(MAKE) -f $(SBS_BASE_MAKEFILE) $(SBS_MAIN_TARGET) $(MODULE_SUB_MODULES)
310-
@$(call SbsForEach,$(MODULE_POST_SUB_MODULES),$(MAKE) -C)
311-
@$(call SbsForEach,$(MODULE_POST_BUILD),$(MAKE) -f $(SBS_BASE_MAKEFILE))
312-
313-
clean:
314-
@echo "Cleaning '$(SBS_MODULE_NAME)'$(SBS_ORDER_STR)"
315-
@$(call SbsForEach,$(MODULE_PRE_CLEAN),$(MAKE) -f $(SBS_BASE_MAKEFILE))
316-
@$(call SbsForEach,$(MODULE_PRE_SUB_MODULES),$(MAKE) -C, clean)
317-
@$(MAKE) -f $(SBS_BASE_MAKEFILE) $(SBS_CLEAN_TARGET) $(SBS_SUBMODULES_CLEAN)
318-
@$(call SbsForEach,$(MODULE_POST_SUB_MODULES),$(MAKE) -C, clean)
319-
@$(call SbsForEach,$(MODULE_POST_CLEAN),$(MAKE) -f $(SBS_BASE_MAKEFILE))
329+
clean: $(SBS_ALL_CLN_TGTS)
330+
@true
331+
$(SBS_ALL_CLN_TGTS): $(CLN_TITLE_TGT)
320332

333+
# Debug targets
321334
sbs_version:
322335
@echo SBS version $(SBS_VERSION)
323336

@@ -384,11 +397,11 @@ sbs_dump_module_submodules:
384397

385398
sbs_dump_module_build_steps:
386399
@$(call SbsDbgTitle,Build Steps,\
387-
$(MODULE_PRE_BUILD) $(MODULE_POST_BUILD) $(MODULE_PRE_CLEAN) $(MODULE_POST_CLEAN))
400+
$(MODULE_PRE_BUILD) $(MODULE_POST_BUILD) $(MODULE_PRE_CLN) $(MODULE_POST_CLN))
388401
@$(call SbsDbgVar,MODULE_PRE_BUILD)
389402
@$(call SbsDbgVar,MODULE_POST_BUILD)
390-
@$(call SbsDbgVar,MODULE_PRE_CLEAN)
391-
@$(call SbsDbgVar,MODULE_POST_CLEAN)
403+
@$(call SbsDbgVar,MODULE_PRE_CLN)
404+
@$(call SbsDbgVar,MODULE_POST_CLN)
392405

393406
sbs_dump_module: sbs_dump_module_vars sbs_dump_module_submodules sbs_dump_module_build_steps
394407

@@ -402,8 +415,8 @@ sbs_dump_internals:
402415
@$(call SbsDbgTitle,Build Settings,Always)
403416
@$(call SbsDbgVar,SBS_BIN_TYPE)
404417
@$(call SbsDbgVar,SBS_FLAV)
405-
@$(call SbsDbgVar,SBS_MAIN_TARGET)
406-
@$(call SbsDbgVar,SBS_CLEAN_TARGET)
418+
@$(call SbsDbgVar,SBS_MAIN_TGT)
419+
@$(call SbsDbgVar,SBS_CLN_TGT)
407420
@$(call SbsDbgVar,SBS_SRCS)
408421
@$(call SbsDbgVar,SBS_CDEFS)
409422
@$(call SbsDbgVar,SBS_CWARNS)

0 commit comments

Comments
 (0)