make config dependency resolving was always running serial, parallelize it for better performance.
$ time make T=x86_64-native-linuxapp-gcc config real 0m12.633s $ time make -j8 T=x86_64-native-linuxapp-gcc config real 0m1.826s Signed-off-by: Ferruh Yigit <ferruh.yi...@intel.com> --- mk/internal/rte.depdirs-post.mk | 11 ++++++----- mk/rte.sdkdepdirs.mk | 21 ++++++++++++--------- mk/rte.subdir.mk | 15 +++++++-------- 3 files changed, 25 insertions(+), 22 deletions(-) diff --git a/mk/internal/rte.depdirs-post.mk b/mk/internal/rte.depdirs-post.mk index 102a369..eb73ad3 100644 --- a/mk/internal/rte.depdirs-post.mk +++ b/mk/internal/rte.depdirs-post.mk @@ -29,11 +29,12 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -.PHONY: depdirs -depdirs: - @for d in $(DEPDIRS-y); do \ - $(RTE_SDK)/buildtools/depdirs-rule.sh $(S) $$d ; \ - done +.PHONY: depdirs $(DEPDIRS-y) +depdirs: $(DEPDIRS-y) + @echo "" + +$(DEPDIRS-y): + @$(RTE_SDK)/buildtools/depdirs-rule.sh $(S) $@ .PHONY: depgraph depgraph: diff --git a/mk/rte.sdkdepdirs.mk b/mk/rte.sdkdepdirs.mk index bebaf2a..daf42eb 100644 --- a/mk/rte.sdkdepdirs.mk +++ b/mk/rte.sdkdepdirs.mk @@ -36,19 +36,22 @@ ifeq (,$(wildcard $(RTE_OUTPUT)/Makefile)) $(error "need a make config first") endif +DEPDIRS = $(addsuffix /.depdirs, $(addprefix $(BUILDDIR)/,$(ROOTDIRS-y))) + # use a "for" in a shell to process dependencies: we don't want this # task to be run in parallel. .PHONY: depdirs depdirs: $(RTE_OUTPUT)/.depdirs -$(RTE_OUTPUT)/.depdirs: $(RTE_OUTPUT)/.config - @rm -f $(RTE_OUTPUT)/.depdirs ; \ - for d in $(ROOTDIRS-y); do \ - if [ -f $(RTE_SRCDIR)/$$d/Makefile ]; then \ - [ -d $(BUILDDIR)/$$d ] || mkdir -p $(BUILDDIR)/$$d ; \ - $(MAKE) S=$$d -f $(RTE_SRCDIR)/$$d/Makefile depdirs \ - >> $(RTE_OUTPUT)/.depdirs ; \ - fi ; \ - done +$(RTE_OUTPUT)/.depdirs: $(DEPDIRS) + @rm -f $@ + @for f in $(DEPDIRS); do cat $$f >> $@; done + @sort -u -o $@ $@ + +$(DEPDIRS): $(RTE_OUTPUT)/.config + @f=$(lastword $(subst /, ,$(dir $@))); \ + [ -d $(BUILDDIR)/$$f ] || mkdir -p $(BUILDDIR)/$$f; \ + rm -f $@; \ + $(MAKE) S=$$f -f $(RTE_SRCDIR)/$$f/Makefile depdirs >> $@ .PHONY: depgraph depgraph: diff --git a/mk/rte.subdir.mk b/mk/rte.subdir.mk index 256e64e..3bb3019 100644 --- a/mk/rte.subdir.mk +++ b/mk/rte.subdir.mk @@ -76,7 +76,7 @@ clean: _postclean # include .depdirs and define rules to order priorities between build # of directories. # -include $(RTE_OUTPUT)/.depdirs +-include $(RTE_OUTPUT)/.depdirs define depdirs_rule $(1): $(sort $(patsubst $(S)/%,%,$(LOCAL_DEPDIRS-$(S)/$(1)))) @@ -84,16 +84,15 @@ endef $(foreach d,$(DIRS-y),$(eval $(call depdirs_rule,$(d)))) +DEPDIRS = $(wildcard $(addprefix $(S)/,$(DIRS-y))) # use a "for" in a shell to process dependencies: we don't want this # task to be run in parallel. -.PHONY: depdirs -depdirs: - @for d in $(DIRS-y); do \ - if [ -f $(SRCDIR)/$$d/Makefile ]; then \ - $(MAKE) S=$S/$$d -f $(SRCDIR)/$$d/Makefile depdirs ; \ - fi ; \ - done +.PHONY: depdirs $(DEPDIRS) +depdirs: $(DEPDIRS) + +$(DEPDIRS): + @$(MAKE) S=$@ -f $(RTE_SRCDIR)/$@/Makefile depdirs .PHONY: depgraph depgraph: -- 2.9.3