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:
Joe Onorato 2024-05-15 18:40:12 +00:00 committed by Gerrit Code Review
commit 5c9f86dcd8
4 changed files with 30 additions and 436 deletions

View file

@ -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.

View file

@ -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

View file

@ -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)

View file

@ -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 "$@"