1# Copyright (C) 2022 The Android Open Source Project 2# 3# Licensed under the Apache License, Version 2.0 (the "License"); 4# you may not use this file except in compliance with the License. 5# You may obtain a copy of the License at 6# 7# http://www.apache.org/licenses/LICENSE-2.0 8# 9# Unless required by applicable law or agreed to in writing, software 10# distributed under the License is distributed on an "AS IS" BASIS, 11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12# See the License for the specific language governing permissions and 13# limitations under the License. 14 15function gettop 16{ 17 local TOPFILE=build/make/core/envsetup.mk 18 # The ${TOP-} expansion allows this to work even with set -u 19 if [ -n "${TOP:-}" -a -f "${TOP:-}/$TOPFILE" ] ; then 20 # The following circumlocution ensures we remove symlinks from TOP. 21 (cd "$TOP"; PWD= /bin/pwd) 22 else 23 if [ -f $TOPFILE ] ; then 24 # The following circumlocution (repeated below as well) ensures 25 # that we record the true directory name and not one that is 26 # faked up with symlink names. 27 PWD= /bin/pwd 28 else 29 local HERE=$PWD 30 local T= 31 while [ \( ! \( -f $TOPFILE \) \) -a \( "$PWD" != "/" \) ]; do 32 \cd .. 33 T=`PWD= /bin/pwd -P` 34 done 35 \cd "$HERE" 36 if [ -f "$T/$TOPFILE" ]; then 37 echo "$T" 38 fi 39 fi 40 fi 41} 42 43# Asserts that the root of the tree can be found. 44if [ -z "${IMPORTING_ENVSETUP:-}" ] ; then 45function require_top 46{ 47 TOP=$(gettop) 48 if [[ ! $TOP ]] ; then 49 echo "Can not locate root of source tree. $(basename $0) must be run from within the Android source tree or TOP must be set." >&2 50 exit 1 51 fi 52} 53fi 54 55# Asserts that the lunch variables have been set 56if [ -z "${IMPORTING_ENVSETUP:-}" ] ; then 57function require_lunch 58{ 59 if [[ ! $TARGET_PRODUCT || ! $TARGET_RELEASE || ! $TARGET_BUILD_VARIANT ]] ; then 60 echo "Please run lunch and try again." >&2 61 exit 1 62 fi 63} 64fi 65 66function getoutdir 67{ 68 local top=$(gettop) 69 local out_dir="${OUT_DIR:-}" 70 if [[ -z "${out_dir}" ]]; then 71 if [[ -n "${OUT_DIR_COMMON_BASE:-}" && -n "${top}" ]]; then 72 out_dir="${OUT_DIR_COMMON_BASE}/$(basename ${top})" 73 else 74 out_dir="out" 75 fi 76 fi 77 if [[ "${out_dir}" != /* ]]; then 78 out_dir="${top}/${out_dir}" 79 fi 80 echo "${out_dir}" 81} 82 83# Pretty print the build status and duration 84function _wrap_build() 85{ 86 if [[ "${ANDROID_QUIET_BUILD:-}" == true ]]; then 87 "$@" 88 return $? 89 fi 90 local start_time=$(date +"%s") 91 "$@" 92 local ret=$? 93 local end_time=$(date +"%s") 94 local tdiff=$(($end_time-$start_time)) 95 local hours=$(($tdiff / 3600 )) 96 local mins=$((($tdiff % 3600) / 60)) 97 local secs=$(($tdiff % 60)) 98 local ncolors=$(tput colors 2>/dev/null) 99 if [ -n "$ncolors" ] && [ $ncolors -ge 8 ]; then 100 color_failed=$'\E'"[0;31m" 101 color_success=$'\E'"[0;32m" 102 color_warning=$'\E'"[0;33m" 103 color_reset=$'\E'"[00m" 104 else 105 color_failed="" 106 color_success="" 107 color_reset="" 108 fi 109 110 echo 111 if [ $ret -eq 0 ] ; then 112 echo -n "${color_success}#### build completed successfully " 113 else 114 echo -n "${color_failed}#### failed to build some targets " 115 fi 116 if [ $hours -gt 0 ] ; then 117 printf "(%02g:%02g:%02g (hh:mm:ss))" $hours $mins $secs 118 elif [ $mins -gt 0 ] ; then 119 printf "(%02g:%02g (mm:ss))" $mins $secs 120 elif [ $secs -gt 0 ] ; then 121 printf "(%s seconds)" $secs 122 fi 123 echo " ####${color_reset}" 124 echo 125 return $ret 126} 127 128 129function log_tool_invocation() 130{ 131 if [[ -z $ANDROID_TOOL_LOGGER ]]; then 132 return 133 fi 134 135 LOG_TOOL_TAG=$1 136 LOG_START_TIME=$(date +%s.%N) 137 trap ' 138 exit_code=$?; 139 # Remove the trap to prevent duplicate log. 140 trap - EXIT; 141 $ANDROID_TOOL_LOGGER \ 142 --tool_tag="${LOG_TOOL_TAG}" \ 143 --start_timestamp="${LOG_START_TIME}" \ 144 --end_timestamp="$(date +%s.%N)" \ 145 --tool_args="$*" \ 146 --exit_code="${exit_code}" \ 147 ${ANDROID_TOOL_LOGGER_EXTRA_ARGS} \ 148 > /dev/null 2>&1 & 149 exit ${exit_code} 150 ' SIGINT SIGTERM SIGQUIT EXIT 151} 152 153