Merge "Speed up lunch/tapas/etc. shell utility functions."
am: d3c08f8b76
* commit 'd3c08f8b763c1d8f865896cf7d03d1794bdd14fe':
Speed up lunch/tapas/etc. shell utility functions.
This commit is contained in:
commit
be81620114
|
@ -1,3 +1,35 @@
|
||||||
|
|
||||||
|
# List of variables we want to print in the build banner.
|
||||||
|
print_build_config_vars := \
|
||||||
|
PLATFORM_VERSION_CODENAME \
|
||||||
|
PLATFORM_VERSION \
|
||||||
|
TARGET_PRODUCT \
|
||||||
|
TARGET_BUILD_VARIANT \
|
||||||
|
TARGET_BUILD_TYPE \
|
||||||
|
TARGET_BUILD_APPS \
|
||||||
|
TARGET_ARCH \
|
||||||
|
TARGET_ARCH_VARIANT \
|
||||||
|
TARGET_CPU_VARIANT \
|
||||||
|
TARGET_2ND_ARCH \
|
||||||
|
TARGET_2ND_ARCH_VARIANT \
|
||||||
|
TARGET_2ND_CPU_VARIANT \
|
||||||
|
HOST_ARCH \
|
||||||
|
HOST_2ND_ARCH \
|
||||||
|
HOST_OS \
|
||||||
|
HOST_OS_EXTRA \
|
||||||
|
HOST_CROSS_OS \
|
||||||
|
HOST_CROSS_ARCH \
|
||||||
|
HOST_CROSS_2ND_ARCH \
|
||||||
|
HOST_BUILD_TYPE \
|
||||||
|
BUILD_ID \
|
||||||
|
OUT_DIR
|
||||||
|
|
||||||
|
ifeq ($(TARGET_BUILD_PDK),true)
|
||||||
|
print_build_config_vars += \
|
||||||
|
TARGET_BUILD_PDK \
|
||||||
|
PDK_FUSION_PLATFORM_ZIP
|
||||||
|
endif
|
||||||
|
|
||||||
# ---------------------------------------------------------------
|
# ---------------------------------------------------------------
|
||||||
# the setpath shell function in envsetup.sh uses this to figure out
|
# the setpath shell function in envsetup.sh uses this to figure out
|
||||||
# what to add to the path given the config we have chosen.
|
# what to add to the path given the config we have chosen.
|
||||||
|
@ -59,38 +91,37 @@ ifneq ($(dumpvar_goals),report_config)
|
||||||
PRINT_BUILD_CONFIG:=
|
PRINT_BUILD_CONFIG:=
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifneq ($(filter report_config,$(DUMP_MANY_VARS)),)
|
||||||
|
# Construct the shell commands that print the config banner.
|
||||||
|
report_config_sh := echo '============================================';
|
||||||
|
report_config_sh += $(foreach v,$(print_build_config_vars),echo '$v=$($(v))';)
|
||||||
|
report_config_sh += echo '============================================';
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Dump mulitple variables to "<var>=<value>" pairs, one per line.
|
||||||
|
# The output may be executed as bash script.
|
||||||
|
# Input variables:
|
||||||
|
# DUMP_MANY_VARS: the list of variable names.
|
||||||
|
# DUMP_VAR_PREFIX: an optional prefix of the variable name added to the output.
|
||||||
|
# DUMP_MANY_ABS_VARS: the list of abs variable names.
|
||||||
|
# DUMP_ABS_VAR_PREFIX: an optional prefix of the abs variable name added to the output.
|
||||||
|
.PHONY: dump-many-vars
|
||||||
|
dump-many-vars :
|
||||||
|
@$(foreach v, $(filter-out report_config, $(DUMP_MANY_VARS)),\
|
||||||
|
echo "$(DUMP_VAR_PREFIX)$(v)='$($(v))'";)
|
||||||
|
ifneq ($(filter report_config, $(DUMP_MANY_VARS)),)
|
||||||
|
@# Construct a special variable for report_config.
|
||||||
|
@# Escape \` to defer the execution of report_config_sh to preserve the line breaks.
|
||||||
|
@echo "$(DUMP_VAR_PREFIX)report_config=\`$(report_config_sh)\`"
|
||||||
|
endif
|
||||||
|
@$(foreach v, $(sort $(DUMP_MANY_ABS_VARS)),\
|
||||||
|
echo "$(DUMP_ABS_VAR_PREFIX)$(v)='$(PWD)/$($(v))'";)
|
||||||
|
|
||||||
endif # CALLED_FROM_SETUP
|
endif # CALLED_FROM_SETUP
|
||||||
|
|
||||||
|
|
||||||
ifneq ($(PRINT_BUILD_CONFIG),)
|
ifneq ($(PRINT_BUILD_CONFIG),)
|
||||||
HOST_OS_EXTRA:=$(shell python -c "import platform; print(platform.platform())")
|
|
||||||
$(info ============================================)
|
$(info ============================================)
|
||||||
$(info PLATFORM_VERSION_CODENAME=$(PLATFORM_VERSION_CODENAME))
|
$(foreach v, $(print_build_config_vars),\
|
||||||
$(info PLATFORM_VERSION=$(PLATFORM_VERSION))
|
$(info $v=$($(v))))
|
||||||
$(info TARGET_PRODUCT=$(TARGET_PRODUCT))
|
|
||||||
$(info TARGET_BUILD_VARIANT=$(TARGET_BUILD_VARIANT))
|
|
||||||
$(info TARGET_BUILD_TYPE=$(TARGET_BUILD_TYPE))
|
|
||||||
$(info TARGET_BUILD_APPS=$(TARGET_BUILD_APPS))
|
|
||||||
$(info TARGET_ARCH=$(TARGET_ARCH))
|
|
||||||
$(info TARGET_ARCH_VARIANT=$(TARGET_ARCH_VARIANT))
|
|
||||||
$(info TARGET_CPU_VARIANT=$(TARGET_CPU_VARIANT))
|
|
||||||
$(info TARGET_2ND_ARCH=$(TARGET_2ND_ARCH))
|
|
||||||
$(info TARGET_2ND_ARCH_VARIANT=$(TARGET_2ND_ARCH_VARIANT))
|
|
||||||
$(info TARGET_2ND_CPU_VARIANT=$(TARGET_2ND_CPU_VARIANT))
|
|
||||||
$(info HOST_ARCH=$(HOST_ARCH))
|
|
||||||
$(info HOST_2ND_ARCH=$(HOST_2ND_ARCH))
|
|
||||||
$(info HOST_OS=$(HOST_OS))
|
|
||||||
$(info HOST_OS_EXTRA=$(HOST_OS_EXTRA))
|
|
||||||
$(info HOST_CROSS_OS=$(HOST_CROSS_OS))
|
|
||||||
$(info HOST_CROSS_ARCH=$(HOST_CROSS_ARCH))
|
|
||||||
$(info HOST_CROSS_2ND_ARCH=$(HOST_CROSS_2ND_ARCH))
|
|
||||||
$(info HOST_BUILD_TYPE=$(HOST_BUILD_TYPE))
|
|
||||||
$(info BUILD_ID=$(BUILD_ID))
|
|
||||||
$(info OUT_DIR=$(OUT_DIR))
|
|
||||||
ifeq ($(TARGET_BUILD_PDK),true)
|
|
||||||
$(info TARGET_BUILD_PDK=$(TARGET_BUILD_PDK))
|
|
||||||
$(info PDK_FUSION_PLATFORM_ZIP=$(PDK_FUSION_PLATFORM_ZIP))
|
|
||||||
endif
|
|
||||||
|
|
||||||
$(info ============================================)
|
$(info ============================================)
|
||||||
endif
|
endif
|
||||||
|
|
|
@ -54,6 +54,8 @@ ifneq (,$(findstring Macintosh,$(UNAME)))
|
||||||
HOST_OS := darwin
|
HOST_OS := darwin
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
HOST_OS_EXTRA:=$(shell python -c "import platform; print(platform.platform())")
|
||||||
|
|
||||||
# BUILD_OS is the real host doing the build.
|
# BUILD_OS is the real host doing the build.
|
||||||
BUILD_OS := $(HOST_OS)
|
BUILD_OS := $(HOST_OS)
|
||||||
|
|
||||||
|
|
|
@ -23,14 +23,21 @@
|
||||||
# and the .mk suffix) of the product makefile, "<product_name>:" can be
|
# and the .mk suffix) of the product makefile, "<product_name>:" can be
|
||||||
# omitted.
|
# omitted.
|
||||||
|
|
||||||
|
# Search for AndroidProducts.mks in the given dir.
|
||||||
|
# $(1): the path to the dir
|
||||||
|
define _search-android-products-files-in-dir
|
||||||
|
$(sort $(shell test -d $(1) && find -L $(1) \
|
||||||
|
-maxdepth 6 \
|
||||||
|
-name .git -prune \
|
||||||
|
-o -name AndroidProducts.mk -print))
|
||||||
|
endef
|
||||||
|
|
||||||
#
|
#
|
||||||
# Returns the list of all AndroidProducts.mk files.
|
# Returns the list of all AndroidProducts.mk files.
|
||||||
# $(call ) isn't necessary.
|
# $(call ) isn't necessary.
|
||||||
#
|
#
|
||||||
define _find-android-products-files
|
define _find-android-products-files
|
||||||
$(sort $(shell test -d device && find -L device -maxdepth 6 -name AndroidProducts.mk)) \
|
$(foreach d, device vendor product,$(call _search-android-products-files-in-dir,$(d))) \
|
||||||
$(sort $(shell test -d vendor && find -L vendor -maxdepth 6 -name AndroidProducts.mk)) \
|
|
||||||
$(sort $(shell test -d product && find -L product -maxdepth 6 -name AndroidProducts.mk)) \
|
|
||||||
$(SRC_TARGET_DIR)/product/AndroidProducts.mk
|
$(SRC_TARGET_DIR)/product/AndroidProducts.mk
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
|
91
envsetup.sh
91
envsetup.sh
|
@ -37,9 +37,62 @@ EOF
|
||||||
echo $A
|
echo $A
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Get all the build variables needed by this script in a single call to the build system.
|
||||||
|
function build_build_var_cache()
|
||||||
|
{
|
||||||
|
T=$(gettop)
|
||||||
|
# Grep out the variable names from the script.
|
||||||
|
cached_vars=`cat $T/build/envsetup.sh | tr '()' ' ' | awk '{for(i=1;i<=NF;i++) if($i~/get_build_var/) print $(i+1)}' | sort -u | tr '\n' ' '`
|
||||||
|
cached_abs_vars=`cat $T/build/envsetup.sh | tr '()' ' ' | awk '{for(i=1;i<=NF;i++) if($i~/get_abs_build_var/) print $(i+1)}' | sort -u | tr '\n' ' '`
|
||||||
|
# Call the build system to dump the "<val>=<value>" pairs as a shell script.
|
||||||
|
build_dicts_script=`\cd $T; CALLED_FROM_SETUP=true BUILD_SYSTEM=build/core \
|
||||||
|
command make --no-print-directory -f build/core/config.mk \
|
||||||
|
dump-many-vars \
|
||||||
|
DUMP_MANY_VARS="$cached_vars" \
|
||||||
|
DUMP_MANY_ABS_VARS="$cached_abs_vars" \
|
||||||
|
DUMP_VAR_PREFIX="var_cache_" \
|
||||||
|
DUMP_ABS_VAR_PREFIX="abs_var_cache_"`
|
||||||
|
local ret=$?
|
||||||
|
if [ $ret -ne 0 ]
|
||||||
|
then
|
||||||
|
unset build_dicts_script
|
||||||
|
return $ret
|
||||||
|
fi
|
||||||
|
# Excute the script to store the "<val>=<value>" pairs as shell variables.
|
||||||
|
eval "$build_dicts_script"
|
||||||
|
unset build_dicts_script
|
||||||
|
ret=$?
|
||||||
|
if [ $ret -ne 0 ]
|
||||||
|
then
|
||||||
|
return $ret
|
||||||
|
fi
|
||||||
|
BUILD_VAR_CACHE_READY="true"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Delete the build cache, so that we can still call into the build system
|
||||||
|
# to get build variables not listed in this script.
|
||||||
|
function destroy_build_var_cache()
|
||||||
|
{
|
||||||
|
unset BUILD_VAR_CACHE_READY
|
||||||
|
for v in $cached_vars; do
|
||||||
|
unset var_cache_$v
|
||||||
|
done
|
||||||
|
unset cached_vars
|
||||||
|
for v in $cached_abs_vars; do
|
||||||
|
unset abs_var_cache_$v
|
||||||
|
done
|
||||||
|
unset cached_abs_vars
|
||||||
|
}
|
||||||
|
|
||||||
# Get the value of a build variable as an absolute path.
|
# Get the value of a build variable as an absolute path.
|
||||||
function get_abs_build_var()
|
function get_abs_build_var()
|
||||||
{
|
{
|
||||||
|
if [ "$BUILD_VAR_CACHE_READY" = "true" ]
|
||||||
|
then
|
||||||
|
eval echo \"\${abs_var_cache_$1}\"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
T=$(gettop)
|
T=$(gettop)
|
||||||
if [ ! "$T" ]; then
|
if [ ! "$T" ]; then
|
||||||
echo "Couldn't locate the top of the tree. Try setting TOP." >&2
|
echo "Couldn't locate the top of the tree. Try setting TOP." >&2
|
||||||
|
@ -52,6 +105,12 @@ function get_abs_build_var()
|
||||||
# Get the exact value of a build variable.
|
# Get the exact value of a build variable.
|
||||||
function get_build_var()
|
function get_build_var()
|
||||||
{
|
{
|
||||||
|
if [ "$BUILD_VAR_CACHE_READY" = "true" ]
|
||||||
|
then
|
||||||
|
eval echo \"\${var_cache_$1}\"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
T=$(gettop)
|
T=$(gettop)
|
||||||
if [ ! "$T" ]; then
|
if [ ! "$T" ]; then
|
||||||
echo "Couldn't locate the top of the tree. Try setting TOP." >&2
|
echo "Couldn't locate the top of the tree. Try setting TOP." >&2
|
||||||
|
@ -321,7 +380,9 @@ function choosetype()
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
|
build_build_var_cache
|
||||||
set_stuff_for_environment
|
set_stuff_for_environment
|
||||||
|
destroy_build_var_cache
|
||||||
}
|
}
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -338,6 +399,7 @@ function chooseproduct()
|
||||||
default_value=aosp_arm
|
default_value=aosp_arm
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
export TARGET_BUILD_APPS=
|
||||||
export TARGET_PRODUCT=
|
export TARGET_PRODUCT=
|
||||||
local ANSWER
|
local ANSWER
|
||||||
while [ -z "$TARGET_PRODUCT" ]
|
while [ -z "$TARGET_PRODUCT" ]
|
||||||
|
@ -365,7 +427,9 @@ function chooseproduct()
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
|
build_build_var_cache
|
||||||
set_stuff_for_environment
|
set_stuff_for_environment
|
||||||
|
destroy_build_var_cache
|
||||||
}
|
}
|
||||||
|
|
||||||
function choosevariant()
|
function choosevariant()
|
||||||
|
@ -428,8 +492,10 @@ function choosecombo()
|
||||||
choosevariant $3
|
choosevariant $3
|
||||||
|
|
||||||
echo
|
echo
|
||||||
|
build_build_var_cache
|
||||||
set_stuff_for_environment
|
set_stuff_for_environment
|
||||||
printconfig
|
printconfig
|
||||||
|
destroy_build_var_cache
|
||||||
}
|
}
|
||||||
|
|
||||||
# Clear this variable. It will be built up again when the vendorsetup.sh
|
# Clear this variable. It will be built up again when the vendorsetup.sh
|
||||||
|
@ -511,16 +577,6 @@ function lunch()
|
||||||
|
|
||||||
export TARGET_BUILD_APPS=
|
export TARGET_BUILD_APPS=
|
||||||
|
|
||||||
local product=$(echo -n $selection | sed -e "s/-.*$//")
|
|
||||||
check_product $product
|
|
||||||
if [ $? -ne 0 ]
|
|
||||||
then
|
|
||||||
echo
|
|
||||||
echo "** Don't have a product spec for: '$product'"
|
|
||||||
echo "** Do you have the right repo manifest?"
|
|
||||||
product=
|
|
||||||
fi
|
|
||||||
|
|
||||||
local variant=$(echo -n $selection | sed -e "s/^[^\-]*-//")
|
local variant=$(echo -n $selection | sed -e "s/^[^\-]*-//")
|
||||||
check_variant $variant
|
check_variant $variant
|
||||||
if [ $? -ne 0 ]
|
if [ $? -ne 0 ]
|
||||||
|
@ -531,6 +587,18 @@ function lunch()
|
||||||
variant=
|
variant=
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
local product=$(echo -n $selection | sed -e "s/-.*$//")
|
||||||
|
TARGET_PRODUCT=$product \
|
||||||
|
TARGET_BUILD_VARIANT=$variant \
|
||||||
|
build_build_var_cache
|
||||||
|
if [ $? -ne 0 ]
|
||||||
|
then
|
||||||
|
echo
|
||||||
|
echo "** Don't have a product spec for: '$product'"
|
||||||
|
echo "** Do you have the right repo manifest?"
|
||||||
|
product=
|
||||||
|
fi
|
||||||
|
|
||||||
if [ -z "$product" -o -z "$variant" ]
|
if [ -z "$product" -o -z "$variant" ]
|
||||||
then
|
then
|
||||||
echo
|
echo
|
||||||
|
@ -545,6 +613,7 @@ function lunch()
|
||||||
|
|
||||||
set_stuff_for_environment
|
set_stuff_for_environment
|
||||||
printconfig
|
printconfig
|
||||||
|
destroy_build_var_cache
|
||||||
}
|
}
|
||||||
|
|
||||||
# Tab completion for lunch.
|
# Tab completion for lunch.
|
||||||
|
@ -607,8 +676,10 @@ function tapas()
|
||||||
export TARGET_BUILD_TYPE=release
|
export TARGET_BUILD_TYPE=release
|
||||||
export TARGET_BUILD_APPS=$apps
|
export TARGET_BUILD_APPS=$apps
|
||||||
|
|
||||||
|
build_build_var_cache
|
||||||
set_stuff_for_environment
|
set_stuff_for_environment
|
||||||
printconfig
|
printconfig
|
||||||
|
destroy_build_var_cache
|
||||||
}
|
}
|
||||||
|
|
||||||
function gettop
|
function gettop
|
||||||
|
|
Loading…
Reference in New Issue