• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
43 # Asserts that the root of the tree can be found.
44 if [ -z "${IMPORTING_ENVSETUP:-}" ] ; then
45 function 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 }
53 fi
54 
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 
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 
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
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 
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 }
152 
153