## Copyright 2017 Chris Johns ## ## The following builds in parallel. The subdirectories are ## expanded into separate rules and all the targets are listed ## and make runs as many as it can. ## ## A macro is defined and evaluated once for each directory. This ## creates the instance of the rule. Use $(info ...) to print them. ## SUBDIRS_dot = $(filter .,$(_SUBDIRS)) SUBDIRS_no_dot = $(filter-out .,$(_SUBDIRS)) SUBDIRS_no_dot_no_wrapup = $(filter-out wrapup,$(SUBDIRS_no_dot)) SUBDIRS_wrapup = $(filter wrapup,$(SUBDIRS_no_dot)) preinstall: $(preintstall_targets) define CPUKITDIR .PHONY: $1 $1: $(preintstall_targets) @+set fnord $(MAKEFLAGS); amf=$$$$2; \ subdir=$(2); \ target=`echo $(MAKECMDGOALS) | sed s/-recursive//`; \ if test "$$$$target" = "all-local-am"; then \ target="all-am"; \ fi; \ if test "$$$$target" = "all-local"; then \ target="all"; \ fi; \ echo "Making $$$$target in $$$$subdir"; \ if test "$$$$subdir" != "."; then \ cd $$$$subdir; \ $(MAKE) $(AM_MAKEFLAGS) $$$$target; \ fi; endef # # This GNU make syntax is being used to stop automake thinking the code is for # it. # $(if "$(SUBDIRS_dot)" ".",$(eval $(call CPUKITDIR,dot,.))) $(foreach D,$(SUBDIRS_no_dot),$(eval $(call CPUKITDIR,$(D),$(D)))) # # If there is a wrapup make it depend on all other directories so it is not # entered until they have finished. # $(if "$(SUBDIRS_wrapup)" "wrapup",wrapup: dot $(foreach D,$(SUBDIRS_no_dot_no_wrapup),$(D)),) all-local: $(if "$(SUBDIRS_dot)" ".",dot) $(SUBDIRS_no_dot) clean-local: $(if "$(SUBDIRS_dot)" ".",dot) $(SUBDIRS_no_dot)