Merge changes from topic "joeo_envsetup" into main
* changes: Clean cruft out of envsetup.sh. Provide a function in envsetup.sh to get the host arch directly
This commit is contained in:
commit
5c9f86dcd8
4 changed files with 30 additions and 436 deletions
|
@ -255,6 +255,7 @@ endif
|
|||
HOST_PREBUILT_ARCH := x86
|
||||
# This is the standard way to name a directory containing prebuilt host
|
||||
# objects. E.g., prebuilt/$(HOST_PREBUILT_TAG)/cc
|
||||
# This must match the logic in get_host_prebuilt_prefix in envsetup.sh
|
||||
HOST_PREBUILT_TAG := $(BUILD_OS)-$(HOST_PREBUILT_ARCH)
|
||||
|
||||
# TARGET_COPY_OUT_* are all relative to the staging directory, ie PRODUCT_OUT.
|
||||
|
|
349
envsetup.sh
349
envsetup.sh
|
@ -196,40 +196,19 @@ function get_build_var()
|
|||
(\cd $T; build/soong/soong_ui.bash --dumpvar-mode $1)
|
||||
}
|
||||
|
||||
# check to see if the supplied product is one we can build
|
||||
function check_product()
|
||||
# This logic matches envsetup.mk
|
||||
function get_host_prebuilt_prefix
|
||||
{
|
||||
local T=$(gettop)
|
||||
if [ ! "$T" ]; then
|
||||
echo "Couldn't locate the top of the tree. Try setting TOP." >&2
|
||||
return
|
||||
local un=$(uname)
|
||||
if [[ $un == "Linux" ]] ; then
|
||||
echo linux-x86
|
||||
elif [[ $un == "Darwin" ]] ; then
|
||||
echo darwin-x86
|
||||
else
|
||||
echo "Error: Invalid host operating system: $un" 1>&2
|
||||
fi
|
||||
TARGET_PRODUCT=$1 \
|
||||
TARGET_RELEASE= \
|
||||
TARGET_BUILD_VARIANT= \
|
||||
TARGET_BUILD_TYPE= \
|
||||
TARGET_BUILD_APPS= \
|
||||
get_build_var TARGET_DEVICE > /dev/null
|
||||
# hide successful answers, but allow the errors to show
|
||||
}
|
||||
|
||||
VARIANT_CHOICES=(user userdebug eng)
|
||||
|
||||
# check to see if the supplied variant is valid
|
||||
function check_variant()
|
||||
{
|
||||
local v
|
||||
for v in ${VARIANT_CHOICES[@]}
|
||||
do
|
||||
if [ "$v" = "$1" ]
|
||||
then
|
||||
return 0
|
||||
fi
|
||||
done
|
||||
return 1
|
||||
}
|
||||
|
||||
|
||||
# Add directories to PATH that are dependent on the lunch target.
|
||||
# For directories that are not lunch-specific, add them in set_global_paths
|
||||
function set_lunch_paths()
|
||||
|
@ -467,9 +446,6 @@ function addcompletions()
|
|||
fi
|
||||
done
|
||||
|
||||
if should_add_completion bit ; then
|
||||
complete -C "bit --tab" bit
|
||||
fi
|
||||
if [ -z "$ZSH_VERSION" ]; then
|
||||
# Doesn't work in zsh.
|
||||
complete -o nospace -F _croot croot
|
||||
|
@ -486,236 +462,6 @@ function addcompletions()
|
|||
complete -F _complete_android_module_names m
|
||||
}
|
||||
|
||||
function multitree_lunch_help()
|
||||
{
|
||||
echo "usage: lunch PRODUCT-RELEASE-VARIANT" 1>&2
|
||||
echo " Set up android build environment based on a product short name and variant" 1>&2
|
||||
echo 1>&2
|
||||
echo "lunch COMBO_FILE VARIANT" 1>&2
|
||||
echo " Set up android build environment based on a specific lunch combo file" 1>&2
|
||||
echo " and variant." 1>&2
|
||||
echo 1>&2
|
||||
echo "lunch --print [CONFIG]" 1>&2
|
||||
echo " Print the contents of a configuration. If CONFIG is supplied, that config" 1>&2
|
||||
echo " will be flattened and printed. If CONFIG is not supplied, the currently" 1>&2
|
||||
echo " selected config will be printed. Returns 0 on success or nonzero on error." 1>&2
|
||||
echo 1>&2
|
||||
echo "lunch --list" 1>&2
|
||||
echo " List all possible combo files available in the current tree" 1>&2
|
||||
echo 1>&2
|
||||
echo "lunch --help" 1>&2
|
||||
echo "lunch -h" 1>&2
|
||||
echo " Prints this message." 1>&2
|
||||
}
|
||||
|
||||
function multitree_lunch()
|
||||
{
|
||||
local code
|
||||
local results
|
||||
# Lunch must be run in the topdir, but this way we get a clear error
|
||||
# message, instead of FileNotFound.
|
||||
local T=$(multitree_gettop)
|
||||
if [ -z "$T" ]; then
|
||||
_multitree_lunch_error
|
||||
return 1
|
||||
fi
|
||||
if $(echo "$1" | grep -q '^-') ; then
|
||||
# Calls starting with a -- argument are passed directly and the function
|
||||
# returns with the lunch.py exit code.
|
||||
"${T}/orchestrator/build/orchestrator/core/lunch.py" "$@"
|
||||
code=$?
|
||||
if [[ $code -eq 2 ]] ; then
|
||||
echo 1>&2
|
||||
multitree_lunch_help
|
||||
return $code
|
||||
elif [[ $code -ne 0 ]] ; then
|
||||
return $code
|
||||
fi
|
||||
else
|
||||
# All other calls go through the --lunch variant of lunch.py
|
||||
results=($(${T}/orchestrator/build/orchestrator/core/lunch.py --lunch "$@"))
|
||||
code=$?
|
||||
if [[ $code -eq 2 ]] ; then
|
||||
echo 1>&2
|
||||
multitree_lunch_help
|
||||
return $code
|
||||
elif [[ $code -ne 0 ]] ; then
|
||||
return $code
|
||||
fi
|
||||
|
||||
export TARGET_BUILD_COMBO=${results[0]}
|
||||
export TARGET_BUILD_VARIANT=${results[1]}
|
||||
fi
|
||||
}
|
||||
|
||||
function choosetype()
|
||||
{
|
||||
echo "Build type choices are:"
|
||||
echo " 1. release"
|
||||
echo " 2. debug"
|
||||
echo
|
||||
|
||||
local DEFAULT_NUM DEFAULT_VALUE
|
||||
DEFAULT_NUM=1
|
||||
DEFAULT_VALUE=release
|
||||
|
||||
export TARGET_BUILD_TYPE=
|
||||
local ANSWER
|
||||
while [ -z $TARGET_BUILD_TYPE ]
|
||||
do
|
||||
echo -n "Which would you like? ["$DEFAULT_NUM"] "
|
||||
if [ -z "$1" ] ; then
|
||||
read ANSWER
|
||||
else
|
||||
echo $1
|
||||
ANSWER=$1
|
||||
fi
|
||||
case $ANSWER in
|
||||
"")
|
||||
export TARGET_BUILD_TYPE=$DEFAULT_VALUE
|
||||
;;
|
||||
1)
|
||||
export TARGET_BUILD_TYPE=release
|
||||
;;
|
||||
release)
|
||||
export TARGET_BUILD_TYPE=release
|
||||
;;
|
||||
2)
|
||||
export TARGET_BUILD_TYPE=debug
|
||||
;;
|
||||
debug)
|
||||
export TARGET_BUILD_TYPE=debug
|
||||
;;
|
||||
*)
|
||||
echo
|
||||
echo "I didn't understand your response. Please try again."
|
||||
echo
|
||||
;;
|
||||
esac
|
||||
if [ -n "$1" ] ; then
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
build_build_var_cache
|
||||
set_stuff_for_environment
|
||||
destroy_build_var_cache
|
||||
}
|
||||
|
||||
#
|
||||
# This function isn't really right: It chooses a TARGET_PRODUCT
|
||||
# based on the list of boards. Usually, that gets you something
|
||||
# that kinda works with a generic product, but really, you should
|
||||
# pick a product by name.
|
||||
#
|
||||
function chooseproduct()
|
||||
{
|
||||
local default_value
|
||||
if [ "x$TARGET_PRODUCT" != x ] ; then
|
||||
default_value=$TARGET_PRODUCT
|
||||
else
|
||||
default_value=aosp_arm
|
||||
fi
|
||||
|
||||
export TARGET_BUILD_APPS=
|
||||
export TARGET_PRODUCT=
|
||||
local ANSWER
|
||||
while [ -z "$TARGET_PRODUCT" ]
|
||||
do
|
||||
echo -n "Which product would you like? [$default_value] "
|
||||
if [ -z "$1" ] ; then
|
||||
read ANSWER
|
||||
else
|
||||
echo $1
|
||||
ANSWER=$1
|
||||
fi
|
||||
|
||||
if [ -z "$ANSWER" ] ; then
|
||||
export TARGET_PRODUCT=$default_value
|
||||
else
|
||||
if check_product $ANSWER
|
||||
then
|
||||
export TARGET_PRODUCT=$ANSWER
|
||||
else
|
||||
echo "** Not a valid product: $ANSWER"
|
||||
fi
|
||||
fi
|
||||
if [ -n "$1" ] ; then
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
build_build_var_cache
|
||||
set_stuff_for_environment
|
||||
destroy_build_var_cache
|
||||
}
|
||||
|
||||
function choosevariant()
|
||||
{
|
||||
echo "Variant choices are:"
|
||||
local index=1
|
||||
local v
|
||||
for v in ${VARIANT_CHOICES[@]}
|
||||
do
|
||||
# The product name is the name of the directory containing
|
||||
# the makefile we found, above.
|
||||
echo " $index. $v"
|
||||
index=$(($index+1))
|
||||
done
|
||||
|
||||
local default_value=eng
|
||||
local ANSWER
|
||||
|
||||
export TARGET_BUILD_VARIANT=
|
||||
while [ -z "$TARGET_BUILD_VARIANT" ]
|
||||
do
|
||||
echo -n "Which would you like? [$default_value] "
|
||||
if [ -z "$1" ] ; then
|
||||
read ANSWER
|
||||
else
|
||||
echo $1
|
||||
ANSWER=$1
|
||||
fi
|
||||
|
||||
if [ -z "$ANSWER" ] ; then
|
||||
export TARGET_BUILD_VARIANT=$default_value
|
||||
elif (echo -n $ANSWER | grep -q -e "^[0-9][0-9]*$") ; then
|
||||
if [ "$ANSWER" -le "${#VARIANT_CHOICES[@]}" ] ; then
|
||||
export TARGET_BUILD_VARIANT=${VARIANT_CHOICES[@]:$(($ANSWER-1)):1}
|
||||
fi
|
||||
else
|
||||
if check_variant $ANSWER
|
||||
then
|
||||
export TARGET_BUILD_VARIANT=$ANSWER
|
||||
else
|
||||
echo "** Not a valid variant: $ANSWER"
|
||||
fi
|
||||
fi
|
||||
if [ -n "$1" ] ; then
|
||||
break
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
function choosecombo()
|
||||
{
|
||||
choosetype $1
|
||||
|
||||
echo
|
||||
echo
|
||||
chooseproduct $2
|
||||
|
||||
echo
|
||||
echo
|
||||
choosevariant $3
|
||||
|
||||
echo
|
||||
build_build_var_cache
|
||||
set_stuff_for_environment
|
||||
printconfig
|
||||
destroy_build_var_cache
|
||||
}
|
||||
|
||||
function add_lunch_combo()
|
||||
{
|
||||
if [ -n "$ZSH_VERSION" ]; then
|
||||
|
@ -1013,34 +759,6 @@ function banchan()
|
|||
destroy_build_var_cache
|
||||
}
|
||||
|
||||
# TODO: Merge into gettop as part of launching multitree
|
||||
function multitree_gettop
|
||||
{
|
||||
local TOPFILE=orchestrator/build/make/core/envsetup.mk
|
||||
if [ -n "$TOP" -a -f "$TOP/$TOPFILE" ] ; then
|
||||
# The following circumlocution ensures we remove symlinks from TOP.
|
||||
(cd "$TOP"; PWD= /bin/pwd)
|
||||
else
|
||||
if [ -f $TOPFILE ] ; then
|
||||
# The following circumlocution (repeated below as well) ensures
|
||||
# that we record the true directory name and not one that is
|
||||
# faked up with symlink names.
|
||||
PWD= /bin/pwd
|
||||
else
|
||||
local HERE=$PWD
|
||||
local T=
|
||||
while [ \( ! \( -f $TOPFILE \) \) -a \( "$PWD" != "/" \) ]; do
|
||||
\cd ..
|
||||
T=`PWD= /bin/pwd -P`
|
||||
done
|
||||
\cd "$HERE"
|
||||
if [ -f "$T/$TOPFILE" ]; then
|
||||
echo "$T"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
function croot()
|
||||
{
|
||||
local T=$(gettop)
|
||||
|
@ -1575,17 +1293,6 @@ function smoketest()
|
|||
adb shell am instrument -w com.android.smoketest.tests/android.test.InstrumentationTestRunner
|
||||
}
|
||||
|
||||
# simple shortcut to the runtest command
|
||||
function runtest()
|
||||
{
|
||||
local T=$(gettop)
|
||||
if [ ! "$T" ]; then
|
||||
echo "Couldn't locate the top of the tree. Try setting TOP." >&2
|
||||
return
|
||||
fi
|
||||
("$T"/development/testrunner/runtest.py $@)
|
||||
}
|
||||
|
||||
function godir () {
|
||||
if [[ -z "$1" ]]; then
|
||||
echo "Usage: godir <regex>"
|
||||
|
@ -1982,22 +1689,6 @@ function make()
|
|||
_wrap_build $(get_make_command "$@") "$@"
|
||||
}
|
||||
|
||||
function _multitree_lunch_error()
|
||||
{
|
||||
>&2 echo "Couldn't locate the top of the tree. Please run \'source build/envsetup.sh\' and multitree_lunch from the root of your workspace."
|
||||
}
|
||||
|
||||
function multitree_build()
|
||||
{
|
||||
local T=$(multitree_gettop)
|
||||
if [ -n "$T" ]; then
|
||||
"$T/orchestrator/build/orchestrator/core/orchestrator.py" "$@"
|
||||
else
|
||||
_multitree_lunch_error
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
function provision()
|
||||
{
|
||||
if [ ! "$ANDROID_PRODUCT_OUT" ]; then
|
||||
|
@ -2119,25 +1810,17 @@ function showcommands() {
|
|||
fi
|
||||
}
|
||||
|
||||
function avbtool() {
|
||||
if [[ ! -f "$ANDROID_SOONG_HOST_OUT"/bin/avbtool ]]; then
|
||||
m avbtool
|
||||
fi
|
||||
"$ANDROID_SOONG_HOST_OUT"/bin/avbtool $@
|
||||
}
|
||||
# These functions used to be here but are now standalone scripts.
|
||||
# Unset these for the time being so the real script is picked up.
|
||||
# TODO: Remove this some time after a suitable delay (maybe 2025?)
|
||||
unset aninja
|
||||
unset overrideflags
|
||||
|
||||
function overrideflags() {
|
||||
local T="$(gettop)"
|
||||
(\cd "${T}" && build/make/tools/overrideflags.sh "$@")
|
||||
}
|
||||
|
||||
function aninja() {
|
||||
local T="$(gettop)"
|
||||
(\cd "${T}" && prebuilts/build-tools/linux-x86/bin/ninja -f out/combined-${TARGET_PRODUCT}.ninja "$@")
|
||||
}
|
||||
|
||||
validate_current_shell
|
||||
set_global_paths
|
||||
source_vendorsetup
|
||||
addcompletions
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -40,9 +40,7 @@ function gettop
|
|||
fi
|
||||
}
|
||||
|
||||
# Sets TOP, or if the root of the tree can't be found, prints a message and
|
||||
# exits. Since this function exits, it should not be called from functions
|
||||
# defined in envsetup.sh.
|
||||
# Asserts that the root of the tree can be found.
|
||||
if [ -z "${IMPORTING_ENVSETUP:-}" ] ; then
|
||||
function require_top
|
||||
{
|
||||
|
@ -54,6 +52,17 @@ function require_top
|
|||
}
|
||||
fi
|
||||
|
||||
# Asserts that the lunch variables have been set
|
||||
if [ -z "${IMPORTING_ENVSETUP:-}" ] ; then
|
||||
function require_lunch
|
||||
{
|
||||
if [[ ! $TARGET_PRODUCT || ! $TARGET_RELEASE || ! $TARGET_BUILD_VARIANT ]] ; then
|
||||
echo "Please run lunch and try again." >&2
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
fi
|
||||
|
||||
function getoutdir
|
||||
{
|
||||
local top=$(gettop)
|
||||
|
|
|
@ -1,99 +0,0 @@
|
|||
#!/bin/bash -e
|
||||
# Copyright (C) 2023 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.
|
||||
|
||||
|
||||
source $(cd $(dirname $BASH_SOURCE) &> /dev/null && pwd)/../shell_utils.sh
|
||||
require_top
|
||||
|
||||
function print_help() {
|
||||
echo -e "overrideflags is used to set default value for local build."
|
||||
echo -e "\nOptions:"
|
||||
echo -e "\t--release-config \tPath to release configuration directory. Required"
|
||||
echo -e "\t--no-edit \tIf present, skip editing flag value file."
|
||||
echo -e "\t-h/--help \tShow this help."
|
||||
}
|
||||
|
||||
function main() {
|
||||
while (($# > 0)); do
|
||||
case $1 in
|
||||
--release-config)
|
||||
if [[ $# -le 1 ]]; then
|
||||
echo "--release-config requires a path"
|
||||
return 1
|
||||
fi
|
||||
local release_config_dir="$2"
|
||||
shift 2
|
||||
;;
|
||||
--no-edit)
|
||||
local no_edit="true"
|
||||
shift 1
|
||||
;;
|
||||
-h|--help)
|
||||
print_help
|
||||
return
|
||||
;;
|
||||
*)
|
||||
echo "$1 is unrecognized"
|
||||
print_help
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
|
||||
|
||||
case $(uname -s) in
|
||||
Darwin)
|
||||
local host_arch=darwin-x86
|
||||
;;
|
||||
Linux)
|
||||
local host_arch=linux-x86
|
||||
;;
|
||||
*)
|
||||
>&2 echo Unknown host $(uname -s)
|
||||
return
|
||||
;;
|
||||
esac
|
||||
|
||||
if [[ -z "${release_config_dir}" ]]; then
|
||||
echo "Please provide release configuration path by --release-config"
|
||||
exit 1
|
||||
elif [ ! -d "${release_config_dir}" ]; then
|
||||
echo "${release_config_dir} is an invalid directory"
|
||||
exit 1
|
||||
fi
|
||||
local T="$(gettop)"
|
||||
local aconfig_dir="${T}"/build/make/tools/aconfig/
|
||||
local overrideflag_py="${aconfig_dir}"/overrideflags/overrideflags.py
|
||||
local overridefile="${release_config_dir}/aconfig/override_values.textproto"
|
||||
|
||||
# Edit override file
|
||||
if [[ -z "${no_edit}" ]]; then
|
||||
editor="${EDITOR:-$(which vim)}"
|
||||
|
||||
eval "${editor} ${overridefile}"
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Fail to set override values"
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
|
||||
${T}/prebuilts/build-tools/${host_arch}/bin/py3-cmd -u "${overrideflag_py}" \
|
||||
--overrides "${overridefile}" \
|
||||
--out "${release_config_dir}/aconfig"
|
||||
}
|
||||
|
||||
|
||||
main "$@"
|
Loading…
Reference in a new issue