Joe Onorato | 344e404 | 2022-12-05 15:15:36 -0800 | [diff] [blame] | 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 | |
| 15 | function 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 | |
Joe Onorato | 2312475 | 2024-05-14 15:06:48 -0700 | [diff] [blame] | 43 | # Asserts that the root of the tree can be found. |
Joe Onorato | 344e404 | 2022-12-05 15:15:36 -0800 | [diff] [blame] | 44 | if [ -z "${IMPORTING_ENVSETUP:-}" ] ; then |
| 45 | function require_top |
| 46 | { |
| 47 | TOP=$(gettop) |
| 48 | if [[ ! $TOP ]] ; then |
Joe Onorato | 1b9ab29 | 2024-05-17 12:16:43 -0700 | [diff] [blame] | 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 |
Joe Onorato | 344e404 | 2022-12-05 15:15:36 -0800 | [diff] [blame] | 50 | exit 1 |
| 51 | fi |
| 52 | } |
| 53 | fi |
| 54 | |
Joe Onorato | 2312475 | 2024-05-14 15:06:48 -0700 | [diff] [blame] | 55 | # Asserts that the lunch variables have been set |
| 56 | if [ -z "${IMPORTING_ENVSETUP:-}" ] ; then |
| 57 | function 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 | } |
| 64 | fi |
| 65 | |
Joe Onorato | 344e404 | 2022-12-05 15:15:36 -0800 | [diff] [blame] | 66 | function 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 | |
Joe Onorato | 1b9ab29 | 2024-05-17 12:16:43 -0700 | [diff] [blame] | 83 | # Pretty print the build status and duration |
| 84 | function _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 |
Alexander Koskovich | 3544cf4 | 2024-10-13 21:33:23 -0400 | [diff] [blame] | 117 | printf "(%02d:%02d:%02d (hh:mm:ss))" $hours $mins $secs |
Joe Onorato | 1b9ab29 | 2024-05-17 12:16:43 -0700 | [diff] [blame] | 118 | elif [ $mins -gt 0 ] ; then |
Alexander Koskovich | 3544cf4 | 2024-10-13 21:33:23 -0400 | [diff] [blame] | 119 | printf "(%02d:%02d (mm:ss))" $mins $secs |
Joe Onorato | 1b9ab29 | 2024-05-17 12:16:43 -0700 | [diff] [blame] | 120 | elif [ $secs -gt 0 ] ; then |
Alexander Koskovich | 3544cf4 | 2024-10-13 21:33:23 -0400 | [diff] [blame] | 121 | printf "(%d seconds)" $secs |
Joe Onorato | 1b9ab29 | 2024-05-17 12:16:43 -0700 | [diff] [blame] | 122 | fi |
| 123 | echo " ####${color_reset}" |
| 124 | echo |
| 125 | return $ret |
| 126 | } |
| 127 | |
| 128 | |
Joe Onorato | 1f6eddb | 2024-05-31 15:04:44 -0700 | [diff] [blame] | 129 | function 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 | } |
Joe Onorato | 344e404 | 2022-12-05 15:15:36 -0800 | [diff] [blame] | 152 | |