From b607f7bd4c270c8bef16db46966992528ce25ebc Mon Sep 17 00:00:00 2001 From: Ying Wang Date: Fri, 8 Feb 2013 18:01:04 -0800 Subject: [PATCH] mma and mmma augmented mm/mmm: Their usages are the same as mm/mmm. They build not only all modules in given path(s), but also their dependencies. With them, to run mm/mmm you don't need to run a full build first now: Just run mma/mmma first. Note that mma/mmma need to load all the makefiles in the source tree so they are much slower than mm/mmm. You should run mma/mmma the first time, and then mm/mmm for incremental build. Bug: 8163814 Change-Id: I554a97c0a23343b65c50870406225eb0064e0651 --- core/main.mk | 19 +++++++++++++----- envsetup.sh | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 67 insertions(+), 7 deletions(-) diff --git a/core/main.mk b/core/main.mk index 9b4d478c3..b401ed2e6 100644 --- a/core/main.mk +++ b/core/main.mk @@ -725,6 +725,20 @@ cacheimage: $(INSTALLED_CACHEIMAGE_TARGET) .PHONY: bootimage bootimage: $(INSTALLED_BOOTIMAGE_TARGET) +# phony target that include any targets in $(ALL_MODULES) +.PHONY: all_modules +ifndef BUILD_MODULES_IN_PATHS +all_modules: $(ALL_MODULES) +else +# BUILD_MODULES_IN_PATHS is a list of paths relative to the top of the tree +module_path_patterns := $(foreach p, $(BUILD_MODULES_IN_PATHS),\ + $(if $(filter %/,$(p)),$(p)%,$(p)/%)) +my_all_modules := $(sort $(foreach m, $(ALL_MODULES),$(if $(filter\ + $(module_path_patterns), $(addsuffix /,$(ALL_MODULES.$(m).PATH))),$(m)))) +all_modules: $(my_all_modules) +endif + + # Build files and then package it into the rom formats .PHONY: droidcore droidcore: files \ @@ -801,13 +815,8 @@ droid: droidcore dist_files endif # TARGET_BUILD_APPS endif # droid in $(MAKECMDGOALS) - .PHONY: droid -# phony target that include any targets in $(ALL_MODULES) -.PHONY: all_modules -all_modules: $(ALL_MODULES) - .PHONY: docs docs: $(ALL_DOCS) diff --git a/envsetup.sh b/envsetup.sh index 1ab2c5ace..3ec8e1a52 100644 --- a/envsetup.sh +++ b/envsetup.sh @@ -5,8 +5,10 @@ Invoke ". build/envsetup.sh" from your shell to add the following functions to y - tapas: tapas [ ...] [arm|x86|mips|armv5] [eng|userdebug|user] - croot: Changes directory to the top of the tree. - m: Makes from the top of the tree. -- mm: Builds all of the modules in the current directory. -- mmm: Builds all of the modules in the supplied directories. +- mm: Builds all of the modules in the current directory, but not their dependencies. +- mmm: Builds all of the modules in the supplied directories, but not their dependencies. +- mma: Builds all of the modules in the current directory, and their dependencies. +- mmma: Builds all of the modules in the supplied directories, and their dependencies. - cgrep: Greps on all local C/C++ files. - jgrep: Greps on all local Java files. - resgrep: Greps on all local res/*.xml files. @@ -696,6 +698,55 @@ function mmm() fi } +function mma() +{ + if [ -f build/core/envsetup.mk -a -f Makefile ]; then + make $@ + else + T=$(gettop) + if [ ! "$T" ]; then + echo "Couldn't locate the top of the tree. Try setting TOP." + fi + local MY_PWD=`PWD= /bin/pwd|sed 's:'$T'/::'` + make -C $T -f build/core/main.mk $@ all_modules BUILD_MODULES_IN_PATHS="$MY_PWD" + fi +} + +function mmma() +{ + T=$(gettop) + if [ "$T" ]; then + local DASH_ARGS=$(echo "$@" | awk -v RS=" " -v ORS=" " '/^-.*$/') + local DIRS=$(echo "$@" | awk -v RS=" " -v ORS=" " '/^[^-].*$/') + local MY_PWD=`PWD= /bin/pwd` + if [ "$MY_PWD" = "$T" ]; then + MY_PWD= + else + MY_PWD=`echo $MY_PWD|sed 's:'$T'/::'` + fi + local DIR= + local MODULE_PATHS= + local ARGS= + for DIR in $DIRS ; do + if [ -d $DIR ]; then + if [ "$MY_PWD" = "" ]; then + MODULE_PATHS="$MODULE_PATHS $DIR" + else + MODULE_PATHS="$MODULE_PATHS $MY_PWD/$DIR" + fi + else + case $DIR in + showcommands | snod | dist | incrementaljavac) ARGS="$ARGS $DIR";; + *) echo "Couldn't find directory $DIR"; return 1;; + esac + fi + done + make -C $T -f build/core/main.mk $DASH_ARGS $ARGS all_modules BUILD_MODULES_IN_PATHS="$MODULE_PATHS" + else + echo "Couldn't locate the top of the tree. Try setting TOP." + fi +} + function croot() { T=$(gettop)