blob: 450bb836a618e394a4bbe886512db0d077136128 [file] [log] [blame]
Joe Onorato344e4042022-12-05 15:15:36 -08001# 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
Joe Onorato23124752024-05-14 15:06:48 -070043# Asserts that the root of the tree can be found.
Joe Onorato344e4042022-12-05 15:15:36 -080044if [ -z "${IMPORTING_ENVSETUP:-}" ] ; then
45function require_top
46{
47 TOP=$(gettop)
48 if [[ ! $TOP ]] ; then
Joe Onorato1b9ab292024-05-17 12:16:43 -070049 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 Onorato344e4042022-12-05 15:15:36 -080050 exit 1
51 fi
52}
53fi
54
Joe Onorato23124752024-05-14 15:06:48 -070055# 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
Joe Onorato344e4042022-12-05 15:15:36 -080066function 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 Onorato1b9ab292024-05-17 12:16:43 -070083# 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
Joe Onorato344e4042022-12-05 15:15:36 -0800129