blob: e13d44f8880b2d4b27c1fbb9697b614caee42028 [file] [log] [blame]
Xavier Ducrohet0f3d9032014-03-18 17:25:21 -07001#!/usr/bin/env bash
Jeff Gaston69713292020-06-04 12:53:39 -04002set -o pipefail
3set -e
Xavier Ducrohet0f3d9032014-03-18 17:25:21 -07004
5##############################################################################
6##
7## Gradle start up script for UN*X
8##
9##############################################################################
10
Aurimas Liutikas9979d072018-03-13 15:38:56 -070011# --------- androidx specific code needed for build server. ------------------
12
Jeff Gastondd8a6e92020-09-01 14:26:49 -040013SCRIPT_PATH="$(cd $(dirname $0) && pwd -P)"
Aurimas Liutikas9979d072018-03-13 15:38:56 -070014if [ -n "$OUT_DIR" ] ; then
Jeff Gaston8fd9fc82019-07-26 14:26:10 -040015 mkdir -p "$OUT_DIR"
Jeff Gastondd8a6e92020-09-01 14:26:49 -040016 OUT_DIR="$(cd $OUT_DIR && pwd -P)"
Aurimas Liutikas9979d072018-03-13 15:38:56 -070017 export GRADLE_USER_HOME="$OUT_DIR/.gradle"
Aurimas Liutikas54598672024-03-25 23:38:45 +000018 export TMPDIR="$OUT_DIR/tmp"
19 mkdir -p "$TMPDIR"
Jeff Gastoncc694ab2019-04-11 16:51:36 -040020else
Jeff Gastondd8a6e92020-09-01 14:26:49 -040021 CHECKOUT_ROOT="$(cd $SCRIPT_PATH/../.. && pwd -P)"
Jeff Gastoncc694ab2019-04-11 16:51:36 -040022 export OUT_DIR="$CHECKOUT_ROOT/out"
Jeff Gastond5719892022-04-21 12:06:24 -040023 export GRADLE_USER_HOME=~/.gradle
Aurimas Liutikas9979d072018-03-13 15:38:56 -070024fi
25
Jeff Gaston440e1ac2020-09-09 08:32:22 -040026ORG_GRADLE_JVMARGS="$(cd $SCRIPT_PATH && grep org.gradle.jvmargs gradle.properties | sed 's/^/-D/')"
Jeff Gaston0e3d19a2019-10-02 12:17:39 -040027if [ -n "$DIST_DIR" ]; then
28 mkdir -p "$DIST_DIR"
Jeff Gastondd8a6e92020-09-01 14:26:49 -040029 DIST_DIR="$(cd $DIST_DIR && pwd -P)"
Jeff Gaston0e3d19a2019-10-02 12:17:39 -040030
Jeff Gaston440e1ac2020-09-09 08:32:22 -040031 # tell Gradle where to put a heap dump on failure
32 ORG_GRADLE_JVMARGS="$(echo $ORG_GRADLE_JVMARGS | sed "s|$| -XX:HeapDumpPath=$DIST_DIR|")"
Jeff Gastone72d2302019-12-19 18:32:31 -050033
Jeff Gaston0e3d19a2019-10-02 12:17:39 -040034 # We don't set a default DIST_DIR in an else clause here because Studio doesn't use gradlew
35 # and doesn't set DIST_DIR and we want gradlew and Studio to match
36fi
37
Alan Viverette9d651362023-03-23 12:34:03 -040038# Loading the AIDL lexer requires disabling Lint's bytecode verification
39export ANDROID_LINT_SKIP_BYTECODE_VERIFIER=true
40
Jeff Gastonc21ecb32020-11-05 17:16:35 -050041# unset ANDROID_BUILD_TOP so that Lint doesn't think we're building the platform itself
42unset ANDROID_BUILD_TOP
Aurimas Liutikas9979d072018-03-13 15:38:56 -070043# ----------------------------------------------------------------------------
44
Xavier Ducrohet0f3d9032014-03-18 17:25:21 -070045# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
Xavier Ducrohet0f3d9032014-03-18 17:25:21 -070046
47APP_NAME="Gradle"
48APP_BASE_NAME=`basename "$0"`
49
50# Use the maximum available, or set MAX_FD != -1 to use that value.
51MAX_FD="maximum"
52
53warn ( ) {
54 echo "$*"
55}
56
57die ( ) {
58 echo
59 echo "$*"
60 echo
61 exit 1
62}
63
64# OS specific support (must be 'true' or 'false').
65cygwin=false
66msys=false
67darwin=false
68case "`uname`" in
69 CYGWIN* )
70 cygwin=true
71 ;;
72 Darwin* )
73 darwin=true
74 ;;
75 MINGW* )
76 msys=true
77 ;;
78esac
Rahul Ravikumar465ccfc2022-02-14 14:58:20 -080079platform_suffix="x86"
80case "$(arch)" in
81 arm64* )
82 platform_suffix="arm64"
83esac
Xavier Ducrohet0f3d9032014-03-18 17:25:21 -070084# Attempt to set APP_HOME
85# Resolve links: $0 may be a link
86PRG="$0"
87# Need this for relative symlinks.
88while [ -h "$PRG" ] ; do
89 ls=`ls -ld "$PRG"`
90 link=`expr "$ls" : '.*-> \(.*\)$'`
91 if expr "$link" : '/.*' > /dev/null; then
92 PRG="$link"
93 else
94 PRG=`dirname "$PRG"`"/$link"
95 fi
96done
97SAVED="`pwd`"
Yigit Boyarf77697d2016-08-16 10:55:36 -070098cd "`dirname \"$PRG\"`/" >/dev/null
Xavier Ducrohet0f3d9032014-03-18 17:25:21 -070099APP_HOME="`pwd -P`"
Yigit Boyarf77697d2016-08-16 10:55:36 -0700100cd "$SAVED" >/dev/null
Xavier Ducrohet0f3d9032014-03-18 17:25:21 -0700101
102CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
103
Jeff Gaston79a43f22019-04-09 16:19:12 -0400104# --------- androidx specific code needed for lint and java. ------------------
105
Alan Viveretted38b36c2017-02-01 16:45:31 -0500106# Pick the correct fullsdk for this OS.
Alan Viverette7df63ff2017-03-06 13:12:24 -0500107if [ $darwin == "true" ]; then
Alan Viveretted38b36c2017-02-01 16:45:31 -0500108 plat="darwin"
109else
110 plat="linux"
111fi
Alan Viveretted38b36c2017-02-01 16:45:31 -0500112
Matthew Fraschilla6ab84fc32019-11-21 16:40:16 -0800113# Tests for lint checks default to using sdk defined by this variable. This removes a lot of
114# setup from each lint module.
115export ANDROID_HOME="$APP_HOME/../../prebuilts/fullsdk-$plat"
Sergey Vasilinetsefab5eb2019-01-04 12:38:06 +0000116# override JAVA_HOME, because CI machines have it and it points to very old JDK
Aurimas Liutikas4e41da22023-12-13 15:38:28 -0800117export ANDROIDX_JDK17="$APP_HOME/../../prebuilts/jdk/jdk17/$plat-$platform_suffix"
118export ANDROIDX_JDK21="$APP_HOME/../../prebuilts/jdk/jdk21/$plat-$platform_suffix"
119export JAVA_HOME=$ANDROIDX_JDK21
Aurimas Liutikas4b897cb2019-10-14 13:25:08 -0700120export STUDIO_GRADLE_JDK=$JAVA_HOME
Oussama Ben Abdelbakif825eb52018-12-04 16:17:00 -0500121
Aurimas Liutikasd6bc55a2022-05-24 13:19:07 -0700122# Warn developers if they try to build top level project without the full checkout
Alan Viverette6b2fb212022-10-17 17:11:29 +0000123[ ! -d "$JAVA_HOME" ] && echo "Failed to find: $JAVA_HOME
Aurimas Liutikasd6bc55a2022-05-24 13:19:07 -0700124
Alan Viverette6b2fb212022-10-17 17:11:29 +0000125Typically, this means either:
1261. You are using the standalone AndroidX checkout, e.g. GitHub, which only supports
127 building a subset of projects. See CONTRIBUTING.md for details.
1282. You are using the repo checkout, but the last repo sync failed. Use repo status
129 to check for projects which are partially-synced, e.g. showing ***NO BRANCH***." && exit -1
Aurimas Liutikasd6bc55a2022-05-24 13:19:07 -0700130
Jeff Gaston79a43f22019-04-09 16:19:12 -0400131# ----------------------------------------------------------------------------
132
Xavier Ducrohet0f3d9032014-03-18 17:25:21 -0700133# Determine the Java command to use to start the JVM.
134if [ -n "$JAVA_HOME" ] ; then
135 if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
136 # IBM's JDK on AIX uses strange locations for the executables
137 JAVACMD="$JAVA_HOME/jre/sh/java"
138 else
139 JAVACMD="$JAVA_HOME/bin/java"
140 fi
141 if [ ! -x "$JAVACMD" ] ; then
142 die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
143
144Please set the JAVA_HOME variable in your environment to match the
145location of your Java installation."
146 fi
147else
148 JAVACMD="java"
149 which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
150
151Please set the JAVA_HOME variable in your environment to match the
152location of your Java installation."
153fi
154
155# Increase the maximum file descriptors if we can.
156if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
157 MAX_FD_LIMIT=`ulimit -H -n`
158 if [ $? -eq 0 ] ; then
159 if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
160 MAX_FD="$MAX_FD_LIMIT"
161 fi
162 ulimit -n $MAX_FD
163 if [ $? -ne 0 ] ; then
164 warn "Could not set maximum file descriptor limit: $MAX_FD"
165 fi
166 else
167 warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
168 fi
169fi
170
171# For Darwin, add options to specify how the application appears in the dock
172if $darwin; then
173 GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
174fi
175
176# For Cygwin, switch paths to Windows format before running java
177if $cygwin ; then
178 APP_HOME=`cygpath --path --mixed "$APP_HOME"`
179 CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
Yigit Boyarf77697d2016-08-16 10:55:36 -0700180 JAVACMD=`cygpath --unix "$JAVACMD"`
Xavier Ducrohet0f3d9032014-03-18 17:25:21 -0700181
182 # We build the pattern for arguments to be converted via cygpath
183 ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
184 SEP=""
185 for dir in $ROOTDIRSRAW ; do
186 ROOTDIRS="$ROOTDIRS$SEP$dir"
187 SEP="|"
188 done
189 OURCYGPATTERN="(^($ROOTDIRS))"
190 # Add a user-defined pattern to the cygpath arguments
191 if [ "$GRADLE_CYGPATTERN" != "" ] ; then
192 OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
193 fi
194 # Now convert the arguments - kludge to limit ourselves to /bin/sh
195 i=0
196 for arg in "$@" ; do
197 CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
198 CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
199
200 if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
201 eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
202 else
203 eval `echo args$i`="\"$arg\""
204 fi
205 i=$((i+1))
206 done
207 case $i in
208 (0) set -- ;;
209 (1) set -- "$args0" ;;
210 (2) set -- "$args0" "$args1" ;;
211 (3) set -- "$args0" "$args1" "$args2" ;;
212 (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
213 (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
214 (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
215 (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
216 (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
217 (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
218 esac
219fi
220
221# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
222function splitJvmOpts() {
223 JVM_OPTS=("$@")
224}
225eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
226JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
227
Jeff Gaston826bdbe2019-11-20 14:56:24 -0500228#TODO: Remove HOME_SYSTEM_PROPERTY_ARGUMENT if https://github.com/gradle/gradle/issues/11433 gets fixed
229HOME_SYSTEM_PROPERTY_ARGUMENT=""
230if [ "$GRADLE_USER_HOME" != "" ]; then
231 HOME_SYSTEM_PROPERTY_ARGUMENT="-Duser.home=$GRADLE_USER_HOME"
232fi
Jeff Gaston38004a62019-12-11 15:43:10 -0500233if [ "$TMPDIR" != "" ]; then
234 TMPDIR_ARG="-Djava.io.tmpdir=$TMPDIR"
235fi
Jeff Gaston826bdbe2019-11-20 14:56:24 -0500236
Jeff Gastonbaa2b202021-04-23 15:44:59 -0400237if [[ " ${@} " =~ " --clean " ]]; then
238 cleanCaches=true
239else
240 cleanCaches=false
241fi
242
Jeff Gaston794b0b72021-09-28 12:47:47 -0400243if [[ " ${@} " =~ " --no-ci " ]]; then
244 disableCi=true
245else
246 disableCi=false
247fi
248
Jeff Gaston7eafa5d2021-02-10 16:12:54 -0500249# Expand some arguments
Jeff Gaston794b0b72021-09-28 12:47:47 -0400250for compact in "--ci" "--strict" "--clean" "--no-ci"; do
251 expanded=""
Jeff Gaston7eafa5d2021-02-10 16:12:54 -0500252 if [ "$compact" == "--ci" ]; then
Jeff Gaston794b0b72021-09-28 12:47:47 -0400253 if [ "$disableCi" == "false" ]; then
254 expanded="--strict\
255 --stacktrace\
256 -Pandroidx.summarizeStderr\
257 -Pandroidx.enableAffectedModuleDetection\
Jeff Gaston3fa62a82023-10-25 15:00:25 -0400258 -Pandroidx.printTimestamps\
Jeff Gastoneeb07d32023-10-05 12:14:08 -0400259 --no-watch-fs\
Jeff Gaston678a9872024-03-20 16:32:16 -0400260 -Pandroidx.highMemory\
261 --profile"
Jeff Gaston794b0b72021-09-28 12:47:47 -0400262 fi
Jeff Gaston4537e142021-01-27 13:08:50 -0500263 fi
Jeff Gaston7eafa5d2021-02-10 16:12:54 -0500264 if [ "$compact" == "--strict" ]; then
Aurimas Liutikas41c58e02022-06-09 08:54:18 -0700265 expanded="-Pandroidx.validateNoUnrecognizedMessages\
Jeff Gastone79ed0e2024-02-09 11:54:02 -0500266 -Pandroidx.verifyUpToDate"
Jeff Gaston20419352024-04-08 16:23:17 -0400267 if [ "$USE_ANDROIDX_REMOTE_BUILD_CACHE" == "" -o "$USE_ANDROIDX_REMOTE_BUILD_CACHE" == "false" ]; then
Jeff Gaston934d0b12022-04-26 17:47:25 -0400268 expanded="$expanded --offline"
269 fi
Jeff Gaston7eafa5d2021-02-10 16:12:54 -0500270 fi
Jeff Gaston794b0b72021-09-28 12:47:47 -0400271 # if compact is something else then we parsed the argument above but
272 # still have to remove it (expanded == "") to avoid confusing Gradle
Jeff Gaston7eafa5d2021-02-10 16:12:54 -0500273
Jeff Gastonbaa2b202021-04-23 15:44:59 -0400274 # check whether this particular compat argument was passed (and therefore needs expansion)
275 if [[ " ${@} " =~ " $compact " ]]; then
276 # Expand an individual argument
277 # Start by making a copy of our list of arguments and iterating through the copy
278 for arg in "$@"; do
279 # Remove this argument from our list of arguments.
280 # By the time we've completed this loop, we will have removed the original copy of
281 # each argument, and potentially re-added a new copy or an expansion of each.
282 shift
283 # Determine whether to expand this argument
284 if [ "$arg" == "$compact" ]; then
285 # Add the expansion to our arguments
286 set -- "$@" $expanded
287 if [ "$expanded" != "" ]; then
288 echo "gradlew expanded '$compact' into '$expanded'"
289 echo
290 fi
291 # We avoid re-adding this argument itself back into the list for two reasons:
292 # 1. This argument might not be directly understood by Gradle
293 # 2. We want to enforce that all behaviors enabled by this flag can be toggled independently,
294 # so we don't want it to be easy to inadvertently check for the presence of this flag
295 # specifically
296 else
297 # Add this argument back into our arguments
298 set -- "$@" "$arg"
299 fi
300 done
301 fi
Jeff Gaston4537e142021-01-27 13:08:50 -0500302done
303
Jeff Gaston678a9872024-03-20 16:32:16 -0400304# workaround for https://github.com/gradle/gradle/issues/18386
305if [[ " ${@} " =~ " --profile " ]]; then
306 mkdir -p reports
307fi
308
Jeff Gaston2196fc62024-01-30 11:46:34 -0500309raiseMemory=false
Jeff Gastoneeb07d32023-10-05 12:14:08 -0400310if [[ " ${@} " =~ " -Pandroidx.highMemory " ]]; then
Jeff Gaston2196fc62024-01-30 11:46:34 -0500311 raiseMemory=true
312fi
313if [[ " ${@} " =~ " -Pandroidx.lowMemory " ]]; then
314 if [ "$raiseMemory" == "true" ]; then
315 echo "androidx.lowMemory overriding androidx.highMemory"
316 echo
317 fi
318 raiseMemory=false
319fi
Jeff Gastoneeb07d32023-10-05 12:14:08 -0400320
Jeff Gaston2196fc62024-01-30 11:46:34 -0500321if [ "$raiseMemory" == "true" ]; then
322 # Set the initial heap size to match the max heap size,
323 # by replacing a string like "-Xmx1g" with one like "-Xms1g -Xmx1g"
324 MAX_MEM=32g
325 ORG_GRADLE_JVMARGS="$(echo $ORG_GRADLE_JVMARGS | sed "s/-Xmx\([^ ]*\)/-Xms$MAX_MEM -Xmx$MAX_MEM/")"
326
327 # Increase the compiler cache size: b/260643754 . Remove when updating to JDK 20 ( https://bugs.openjdk.org/browse/JDK-8295724 )
328 ORG_GRADLE_JVMARGS="$(echo $ORG_GRADLE_JVMARGS | sed "s|$| -XX:ReservedCodeCacheSize=576M|")"
Jeff Gastoneeb07d32023-10-05 12:14:08 -0400329fi
330
Jeff Gastonb03b05a2022-04-11 11:41:59 -0400331# check whether the user has requested profiling via yourkit
332yourkitArgPrefix="androidx.profile.yourkitAgentPath"
333yourkitAgentPath=""
334if [[ " ${@}" =~ " -P$yourkitArgPrefix" ]]; then
335 for arg in "$@"; do
336 if echo "$arg" | grep "${yourkitArgPrefix}=" >/dev/null; then
337 yourkitAgentPath="$(echo "$arg" | sed "s/-P${yourkitArgPrefix}=//")"
338 fi
339 done
340 if [ "$yourkitAgentPath" == "" ]; then
341 echo "Error: $yourkitArgPrefix must be set to the path of the YourKit Java agent" >&2
342 exit 1
343 fi
344 if [ ! -e "$yourkitAgentPath" ]; then
345 echo "Error: $yourkitAgentPath does not exist" >&2
346 exit 1
347 fi
348 # add the agent to the path
349 export _JAVA_OPTIONS="$_JAVA_OPTIONS -agentpath:$yourkitAgentPath"
350 # add arguments
351 set -- "$@" --no-daemon --rerun-tasks
352
353 # lots of blank lines because these messages are important
354 echo
355 echo
356 echo
357 echo
358 echo
359 # suggest --clean
360 if [ "$cleanCaches" == "false" ]; then
361 echo "When setting $yourkitArgPrefix you may also want to pass --clean"
362 fi
363 COLOR_YELLOW="\u001B[33m"
364 COLOR_CLEAR="\u001B[0m"
365
366 echo -e "${COLOR_YELLOW}Also be sure to start the YourKit user interface and connect to the appropriate Java process (probably the Gradle Daemon)${COLOR_CLEAR}"
367 echo
368 echo
369 echo
370 echo
371 echo
372fi
373
Jeff Gastond2806b32021-09-29 12:20:39 -0400374if [[ " ${@} " =~ " --scan " ]]; then
375 if [[ " ${@} " =~ " --offline " ]]; then
376 echo "--scan incompatible with --offline"
377 echo "you could try --no-ci"
378 exit 1
379 fi
380fi
381
Jeff Gastonbaa2b202021-04-23 15:44:59 -0400382function removeCaches() {
383 rm -rf $SCRIPT_PATH/.gradle
384 rm -rf $SCRIPT_PATH/buildSrc/.gradle
385 rm -f $SCRIPT_PATH/local.properties
386 if [ "$GRADLE_USER_HOME" != "" ]; then
387 rm -rf "$GRADLE_USER_HOME"
388 else
389 rm -rf ~/.gradle
390 fi
Jeff Gaston829fd822021-09-23 11:42:48 -0400391 # https://github.com/gradle/gradle/issues/18386
392 rm -rf $SCRIPT_PATH/reports
Jeff Gaston96eb6012021-09-27 14:55:36 +0000393 rm -rf $SCRIPT_PATH/build
Jeff Gastonbaa2b202021-04-23 15:44:59 -0400394 rm -rf $OUT_DIR
395}
396
Jeff Gaston6cca77e52023-08-07 11:10:17 -0400397# Move any preexisting build scan to make room for a new one
398# After moving a build scan several times it eventually gets deleted
399function rotateBuildScans() {
400 filePrefix="$1"
401 iPlus1="10"
402 for i in $(seq 9 -1 1); do
403 mv "${filePrefix}.${i}.zip" "${filePrefix}.${iPlus1}.zip" 2>/dev/null || true
404 iPlus1=$i
405 done
406 mv ${filePrefix}.zip "${filePrefix}.1.zip" 2>/dev/null || true
407}
408
Jeff Gaston224eb172020-01-09 12:31:47 -0500409function runGradle() {
Jeff Gaston41b90222020-08-18 11:09:55 -0400410 processOutput=false
Jeff Gastone4b4b872020-08-25 09:02:13 -0400411 if [[ " ${@} " =~ " -Pandroidx.validateNoUnrecognizedMessages " ]]; then
Jeff Gaston41b90222020-08-18 11:09:55 -0400412 processOutput=true
413 fi
414 if [[ " ${@} " =~ " -Pandroidx.summarizeStderr " ]]; then
415 processOutput=true
416 fi
Jeff Gaston3fa62a82023-10-25 15:00:25 -0400417 if [[ "${@} " =~ " -Pandroidx.printTimestamps " ]]; then
418 processOutput=true
419 fi
Jeff Gaston41b90222020-08-18 11:09:55 -0400420 if [ "$processOutput" == "true" ]; then
421 wrapper="$SCRIPT_PATH/development/build_log_processor.sh"
422 else
423 wrapper=""
424 fi
Jeff Gaston3febf902021-03-16 11:23:15 -0400425
Jeff Gaston1e67a612021-11-24 13:31:10 -0500426 RETURN_VALUE=0
Aurimas Liutikas07c47d32023-08-03 15:46:39 -0700427 set -- "$@" -Dorg.gradle.projectcachedir="$OUT_DIR/gradle-project-cache"
Jeff Gaston9f25cdb2024-01-02 16:44:09 -0500428 KOTLIN_PROJECT_PERSISTENT_DIR="$OUT_DIR/kotlin-project-persistent-dir"
429 mkdir -p "$KOTLIN_PROJECT_PERSISTENT_DIR"
430 set -- "$@" -Pkotlin.project.persistent.dir="$KOTLIN_PROJECT_PERSISTENT_DIR"
Jeff Gastondc9c8cb2023-02-08 16:24:38 -0500431 # Disabled in Studio until these errors become shown (b/268380971) or computed more quickly (https://github.com/gradle/gradle/issues/23272)
432 if [[ " ${@} " =~ " --dependency-verification=" ]]; then
433 VERIFICATION_ARGUMENT="" # already specified by caller
434 else
435 VERIFICATION_ARGUMENT=--dependency-verification=strict
436 fi
Aurimas Liutikas07c47d32023-08-03 15:46:39 -0700437 if $wrapper "$JAVACMD" "${JVM_OPTS[@]}" $TMPDIR_ARG -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain $HOME_SYSTEM_PROPERTY_ARGUMENT $TMPDIR_ARG $VERIFICATION_ARGUMENT "$ORG_GRADLE_JVMARGS" "$@"; then
Jeff Gaston1e67a612021-11-24 13:31:10 -0500438 RETURN_VALUE=0
Jeff Gaston224eb172020-01-09 12:31:47 -0500439 else
440 # Print AndroidX-specific help message if build fails
441 # Have to do this build-failure detection in gradlew rather than in build.gradle
442 # so that this message still prints even if buildSrc itself fails
443 echo
Jeff Gaston61cef332020-12-22 11:23:09 -0500444 echo For help with unexpected failures, see development/diagnose-build-failure/README.md
445 echo
Jeff Gaston1e67a612021-11-24 13:31:10 -0500446 RETURN_VALUE=1
Jeff Gaston69713292020-06-04 12:53:39 -0400447 fi
Jeff Gaston1e67a612021-11-24 13:31:10 -0500448
449 # If the caller specified where to save data, then also save the build scan data
450 if [ "$DIST_DIR" != "" ]; then
451 if [ "$GRADLE_USER_HOME" != "" ]; then
Jeff Gaston9d97d5c2022-07-06 10:55:47 -0400452 scanDir="$GRADLE_USER_HOME/build-scan-data"
453 if [ -e "$scanDir" ]; then
454 if [[ "$DISALLOW_TASK_EXECUTION" != "" ]]; then
Jeff Gaston6cca77e52023-08-07 11:10:17 -0400455 zipPrefix="$DIST_DIR/scan-up-to-date"
Jeff Gaston9d97d5c2022-07-06 10:55:47 -0400456 else
Jeff Gaston6cca77e52023-08-07 11:10:17 -0400457 zipPrefix="$DIST_DIR/scan"
Jeff Gaston9d97d5c2022-07-06 10:55:47 -0400458 fi
Jeff Gaston6cca77e52023-08-07 11:10:17 -0400459 rotateBuildScans "$zipPrefix"
460 zipPath="${zipPrefix}.zip"
Jeff Gaston9d97d5c2022-07-06 10:55:47 -0400461 cd "$GRADLE_USER_HOME/build-scan-data"
462 zip -q -r "$zipPath" .
463 cd -
Jeff Gaston1e67a612021-11-24 13:31:10 -0500464 fi
Jeff Gaston1e67a612021-11-24 13:31:10 -0500465 fi
466 fi
467 return $RETURN_VALUE
Jeff Gaston69713292020-06-04 12:53:39 -0400468}
469
Jeff Gaston87a4bbb2022-04-21 12:31:08 -0400470if [ "$cleanCaches" == true ]; then
471 echo "IF ./gradlew --clean FIXES YOUR BUILD; OPEN A BUG."
472 echo "In nearly all cases, it should not be necessary to run a clean build."
473 echo
474 # one case where it is convenient to have a clean build is for double-checking that a build failure isn't due to an incremental build failure
475 # another case where it is convenient to have a clean build is for performance testing
476 # another case where it is convenient to have a clean build is when you're modifying the build and may have introduced some errors but haven't shared your changes yet (at which point you should have fixed the errors)
477
478 echo "Stopping Gradle daemons"
479 runGradle --stop || true
480 echo
481
482 backupDir=~/androidx-build-state-backup
483 ./development/diagnose-build-failure/impl/backup-state.sh "$backupDir" --move # prints that it is saving state into this dir"
484
485 echo "To restore this state later, run:"
486 echo
487 echo " ./development/diagnose-build-failure/impl/restore-state.sh $backupDir"
488 echo
489 echo "Running Gradle"
490 echo
491fi
492
Jeff Gaston7121d832022-06-08 13:36:50 -0400493if [[ "$DISALLOW_TASK_EXECUTION" != "" ]]; then
494 echo "Setting 'DISALLOW_TASK_EXECUTION' directly is forbidden. Did you mean -Pandroidx.verifyUpToDate ?"
Jeff Gaston400ccb32020-06-08 16:44:58 -0400495 echo "See TaskUpToDateValidator.java for more information"
496 exit 1
497fi
498
Jeff Gaston55624742021-04-22 14:05:49 -0400499runGradle "$@"
500# Check whether we were given the "-Pandroidx.verifyUpToDate" argument
501if [[ " ${@} " =~ " -Pandroidx.verifyUpToDate " ]]; then
Jeff Gastoncefdeae2020-03-09 13:12:35 -0400502 # Re-run Gradle, and find all tasks that are unexpectly out of date
Jeff Gaston7121d832022-06-08 13:36:50 -0400503 if ! DISALLOW_TASK_EXECUTION=true runGradle "$@" --continue; then
Jeff Gastone906e5c2020-11-05 12:33:10 -0500504 echo >&2
Jeff Gaston20f5e7a2022-01-27 13:39:25 -0500505 echo "TaskUpToDateValidator's second build failed. To reproduce, try running './gradlew -Pandroidx.verifyUpToDate <failing tasks>'" >&2
Jeff Gastone906e5c2020-11-05 12:33:10 -0500506 exit 1
507 fi
Jeff Gastonb89c82b2019-08-21 16:24:09 -0400508fi