You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
194 lines
5.6 KiB
194 lines
5.6 KiB
#!/bin/bash
|
|
#
|
|
# Copyright (C) 2018 The Android Open Source Project
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
#
|
|
# !!! Keep up-to-date with var_cache.py
|
|
#
|
|
|
|
#
|
|
# Provide a soong-build variable query mechanism that is cached
|
|
# in the current process and any other subchild process that knows
|
|
# how to parse the exported variable:
|
|
#
|
|
# export ART_TOOLS_BUILD_VAR_CACHE="..."
|
|
#
|
|
# Of the format:
|
|
#
|
|
# <key1>='<value1>'\n
|
|
# <key2>='<value2>'\n
|
|
# ...
|
|
# <keyN>='<valueN>'
|
|
#
|
|
# Note: This is intentionally the same output format as
|
|
# build/soong/soong_ui.bash --dumpvars-mode --vars "key1 key2 ... keyN"
|
|
#
|
|
# For example, this would be a valid var-cache:
|
|
#
|
|
# export ART_TOOLS_BUILD_VAR_CACHE="ART_APEX_JARS='core-oj core-libart'"
|
|
#
|
|
# Calling into soong repeatedly is very slow; whenever it needs to be done
|
|
# more than once, the var_cache.py or var_cache.sh script should be used instead.
|
|
#
|
|
|
|
# -------------------------------------------------------
|
|
|
|
# Echoes the result of get_build_var <var_name>.
|
|
# Var lookup is cached, subsequent var lookups in any child process
|
|
# (that includes a var-cache is free). The var must be in 'var_list'
|
|
# to participate in the cache.
|
|
#
|
|
# Example:
|
|
# local host_out="$(get_build_var HOST_OUT)"
|
|
#
|
|
# Note that build vars can often have spaces in them,
|
|
# so the caller must take care to ensure space-correctness.
|
|
get_build_var() {
|
|
local var_name="$1"
|
|
|
|
_var_cache_populate
|
|
_var_cache_build_dict
|
|
|
|
if [[ ${_VAR_CACHE_DICT[$var_name]+exists} ]]; then
|
|
echo "${_VAR_CACHE_DICT[$var_name]}"
|
|
return 0
|
|
else
|
|
echo "[ERROR] get_build_var: The variable '$var_name' is not in 'var_list', can't lookup." >&2
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
# The above functions are "public" and are intentionally not exported.
|
|
# User scripts must have "source var_cache.sh" to take advantage of caching.
|
|
|
|
# -------------------------------------------------------
|
|
# Below functions are "private";
|
|
# do not call them outside of this file.
|
|
|
|
_var_cache_populate() {
|
|
if [[ -n $ART_TOOLS_BUILD_VAR_CACHE ]]; then
|
|
_var_cache_debug "ART_TOOLS_BUILD_VAR_CACHE preset to (quotes added)..."
|
|
_var_cache_debug \""$ART_TOOLS_BUILD_VAR_CACHE"\"
|
|
return 0
|
|
fi
|
|
|
|
_var_cache_debug "Varcache missing... repopulate"
|
|
|
|
local this_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
|
local top="$this_dir/../../.."
|
|
|
|
local interesting_vars=()
|
|
while read -r line; do
|
|
if [[ -z $line ]] || [[ $line == '#'* ]]; then
|
|
continue;
|
|
fi
|
|
interesting_vars+=($line)
|
|
done < "$this_dir"/var_list
|
|
|
|
_var_cache_debug "Interesting vars: " ${interesting_vars[@]}
|
|
|
|
local flat_vars="${interesting_vars[*]}"
|
|
|
|
local var_values
|
|
_var_cache_show_command "$top"/build/soong/soong_ui.bash --dumpvars-mode -vars=\"${interesting_vars[*]}\"
|
|
|
|
# Invoke soong exactly once for optimal performance.
|
|
# soong_ui.bash must be invoked from $ANDROID_BUILD_TOP or it gets confused and breaks.
|
|
var_values="$(cd "$top" && "$top"/build/soong/soong_ui.bash --dumpvars-mode -vars="$flat_vars")"
|
|
|
|
# Export the ART_TOOLS_BUILD_VAR_CACHE in the same format as soong_ui.bash --dumpvars-mode.
|
|
export ART_TOOLS_BUILD_VAR_CACHE="$var_values"
|
|
|
|
_var_cache_debug ART_TOOLS_BUILD_VAR_CACHE=\"$var_values\"
|
|
}
|
|
|
|
_var_cache_build_dict() {
|
|
if [[ ${#_VAR_CACHE_DICT[@]} -ne 0 ]]; then
|
|
# Associative arrays cannot be exported, have
|
|
# a separate step to reconstruct the associative
|
|
# array from a flat variable.
|
|
return 0
|
|
fi
|
|
|
|
# Parse $ART_TOOLS_BUILD_VAR_CACHE, e.g.
|
|
# ART_APEX_JARS='core-oj core-libart conscrypt okhttp bouncycastle apache-xml'
|
|
|
|
local var_name
|
|
local var_value
|
|
local strip_quotes
|
|
|
|
_var_cache_debug "_var_cache_build_dict()"
|
|
|
|
declare -g -A _VAR_CACHE_DICT # global associative array.
|
|
while IFS='=' read -r var_name var_value; do
|
|
if [[ -z $var_name ]]; then
|
|
# skip empty lines, e.g. blank newline at the end
|
|
continue
|
|
fi
|
|
_var_cache_debug "Var_name was $var_name"
|
|
_var_cache_debug "Var_value was $var_value"
|
|
strip_quotes=${var_value//\'/}
|
|
_VAR_CACHE_DICT["$var_name"]="$strip_quotes"
|
|
done < <(echo "$ART_TOOLS_BUILD_VAR_CACHE")
|
|
|
|
_var_cache_debug ${#_VAR_CACHE_DICT[@]} -eq 0
|
|
}
|
|
|
|
_var_cache_debug() {
|
|
if ((_var_cache_debug_enabled)); then
|
|
echo "[DBG]: " "$@" >&2
|
|
fi
|
|
}
|
|
|
|
_var_cache_show_command() {
|
|
if (( _var_cache_show_commands || _var_cache_debug_enabled)); then
|
|
echo "$@" >&2
|
|
fi
|
|
}
|
|
|
|
while true; do
|
|
case $1 in
|
|
--help)
|
|
echo "Usage: $0 [--debug] [--show-commands] [--dump-cache] [--var <name>] [--var <name2>...]"
|
|
echo ""
|
|
echo "Exposes a function 'get_build_var' which returns the result of"
|
|
echo "a soong build variable."
|
|
echo ""
|
|
echo "Primarily intended to be used as 'source var_cache.sh',"
|
|
echo "but also allows interactive command line usage for simplifying development."
|
|
exit 0
|
|
;;
|
|
--var)
|
|
echo -ne "$2="
|
|
get_build_var "$2"
|
|
shift
|
|
;;
|
|
--debug)
|
|
_var_cache_debug_enabled=1
|
|
;;
|
|
--show-commands)
|
|
_var_cache_show_commands=1
|
|
;;
|
|
--dump-cache)
|
|
_var_cache_populate
|
|
echo "ART_TOOLS_BUILD_VAR_CACHE=\"$ART_TOOLS_BUILD_VAR_CACHE\""
|
|
;;
|
|
*)
|
|
break
|
|
;;
|
|
esac
|
|
shift
|
|
done
|