1*d57664e9SAndroid Build Coastguard Worker# Copyright (C) 2023 The Android Open Source Project 2*d57664e9SAndroid Build Coastguard Worker# 3*d57664e9SAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); 4*d57664e9SAndroid Build Coastguard Worker# you may not use this file except in compliance with the License. 5*d57664e9SAndroid Build Coastguard Worker# You may obtain a copy of the License at 6*d57664e9SAndroid Build Coastguard Worker# 7*d57664e9SAndroid Build Coastguard Worker# http://www.apache.org/licenses/LICENSE-2.0 8*d57664e9SAndroid Build Coastguard Worker# 9*d57664e9SAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 10*d57664e9SAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, 11*d57664e9SAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*d57664e9SAndroid Build Coastguard Worker# See the License for the specific language governing permissions and 13*d57664e9SAndroid Build Coastguard Worker# limitations under the License. 14*d57664e9SAndroid Build Coastguard Worker 15*d57664e9SAndroid Build Coastguard Workerset -e # Exit at failure 16*d57664e9SAndroid Build Coastguard Workershopt -s globstar # Enable double-star wildcards (**) 17*d57664e9SAndroid Build Coastguard Worker 18*d57664e9SAndroid Build Coastguard Workercd "${0%/*}" # Move to the script dir 19*d57664e9SAndroid Build Coastguard Worker 20*d57664e9SAndroid Build Coastguard Workerfail() { 21*d57664e9SAndroid Build Coastguard Worker echo "Error: $*" 1>&2 22*d57664e9SAndroid Build Coastguard Worker exit 1 23*d57664e9SAndroid Build Coastguard Worker} 24*d57664e9SAndroid Build Coastguard Worker 25*d57664e9SAndroid Build Coastguard Worker# Print the arguments and then execute. 26*d57664e9SAndroid Build Coastguard Workerrun() { 27*d57664e9SAndroid Build Coastguard Worker echo "Running: $*" 1>&2 28*d57664e9SAndroid Build Coastguard Worker "$@" 29*d57664e9SAndroid Build Coastguard Worker} 30*d57664e9SAndroid Build Coastguard Worker 31*d57664e9SAndroid Build Coastguard Worker# Concatenate the second and subsequent args with the first arg as a separator. 32*d57664e9SAndroid Build Coastguard Worker# e.g. `join : a b c` -> prints `a:b:c` 33*d57664e9SAndroid Build Coastguard Workerjoin() { 34*d57664e9SAndroid Build Coastguard Worker local IFS="$1" 35*d57664e9SAndroid Build Coastguard Worker shift 36*d57664e9SAndroid Build Coastguard Worker echo "$*" 37*d57664e9SAndroid Build Coastguard Worker} 38*d57664e9SAndroid Build Coastguard Worker 39*d57664e9SAndroid Build Coastguard Workerabspath() { 40*d57664e9SAndroid Build Coastguard Worker for name in "${@}"; do 41*d57664e9SAndroid Build Coastguard Worker readlink -f $name 42*d57664e9SAndroid Build Coastguard Worker done 43*d57664e9SAndroid Build Coastguard Worker} 44*d57664e9SAndroid Build Coastguard Worker 45*d57664e9SAndroid Build Coastguard Workerm() { 46*d57664e9SAndroid Build Coastguard Worker if (( $SKIP_BUILD )) ; then 47*d57664e9SAndroid Build Coastguard Worker echo "Skipping build: $*" 1>&2 48*d57664e9SAndroid Build Coastguard Worker return 0 49*d57664e9SAndroid Build Coastguard Worker fi 50*d57664e9SAndroid Build Coastguard Worker run ${ANDROID_BUILD_TOP}/build/soong/soong_ui.bash --make-mode "$@" 51*d57664e9SAndroid Build Coastguard Worker} 52*d57664e9SAndroid Build Coastguard Worker 53*d57664e9SAndroid Build Coastguard Worker# Extract given jar files 54*d57664e9SAndroid Build Coastguard Workerextract() { 55*d57664e9SAndroid Build Coastguard Worker for f in "${@}"; do 56*d57664e9SAndroid Build Coastguard Worker local out=$f.ext 57*d57664e9SAndroid Build Coastguard Worker run rm -fr $out 58*d57664e9SAndroid Build Coastguard Worker run mkdir -p $out 59*d57664e9SAndroid Build Coastguard Worker 60*d57664e9SAndroid Build Coastguard Worker # It's too noisy, so only show the first few lines. 61*d57664e9SAndroid Build Coastguard Worker { 62*d57664e9SAndroid Build Coastguard Worker # Hmm unzipping kotlin jar files may produce a warning? Let's just add `|| true`... 63*d57664e9SAndroid Build Coastguard Worker run unzip $f -d $out || true 64*d57664e9SAndroid Build Coastguard Worker } |& sed -e '5,$d' 65*d57664e9SAndroid Build Coastguard Worker echo ' (omitting remaining output)' 66*d57664e9SAndroid Build Coastguard Worker 67*d57664e9SAndroid Build Coastguard Worker done 68*d57664e9SAndroid Build Coastguard Worker} 69*d57664e9SAndroid Build Coastguard Worker 70*d57664e9SAndroid Build Coastguard Worker# Find all *.java files in $1, and print them as Java class names. 71*d57664e9SAndroid Build Coastguard Worker# For example, if there's a file `src/com/android/test/Test.java`, and you run 72*d57664e9SAndroid Build Coastguard Worker# `list_all_classes_under_dir src`, then it'll print `com.android.test.Test`. 73*d57664e9SAndroid Build Coastguard Workerlist_all_classes_under_dir() { 74*d57664e9SAndroid Build Coastguard Worker local dir="$1" 75*d57664e9SAndroid Build Coastguard Worker ( # Use a subshell, so we won't change the current directory on the caller side. 76*d57664e9SAndroid Build Coastguard Worker cd "$dir" 77*d57664e9SAndroid Build Coastguard Worker 78*d57664e9SAndroid Build Coastguard Worker # List the java files, but replace the slashes with dots, and remove the `.java` suffix. 79*d57664e9SAndroid Build Coastguard Worker ls **/*.java | sed -e 's!/!.!g' -e 's!.java$!!' 80*d57664e9SAndroid Build Coastguard Worker ) 81*d57664e9SAndroid Build Coastguard Worker} 82*d57664e9SAndroid Build Coastguard Worker 83*d57664e9SAndroid Build Coastguard Workercheckenv() { 84*d57664e9SAndroid Build Coastguard Worker # Make sure $ANDROID_BUILD_TOP is set. 85*d57664e9SAndroid Build Coastguard Worker : ${ANDROID_BUILD_TOP:?} 86*d57664e9SAndroid Build Coastguard Worker 87*d57664e9SAndroid Build Coastguard Worker # Make sure ANDROID_BUILD_TOP doesn't contain whitespace. 88*d57664e9SAndroid Build Coastguard Worker set ${ANDROID_BUILD_TOP} 89*d57664e9SAndroid Build Coastguard Worker if [[ $# != 1 ]] ; then 90*d57664e9SAndroid Build Coastguard Worker fail "\$ANDROID_BUILD_TOP cannot contain whitespace." 91*d57664e9SAndroid Build Coastguard Worker fi 92*d57664e9SAndroid Build Coastguard Worker} 93*d57664e9SAndroid Build Coastguard Worker 94*d57664e9SAndroid Build Coastguard Workercheckenv 95*d57664e9SAndroid Build Coastguard Worker 96*d57664e9SAndroid Build Coastguard WorkerJAVAC=${JAVAC:-javac} 97*d57664e9SAndroid Build Coastguard WorkerJAVA=${JAVA:-java} 98*d57664e9SAndroid Build Coastguard WorkerJAR=${JAR:-jar} 99*d57664e9SAndroid Build Coastguard Worker 100*d57664e9SAndroid Build Coastguard WorkerJAVAC_OPTS=${JAVAC_OPTS:--Xmaxerrs 99999 -Xlint:none} 101*d57664e9SAndroid Build Coastguard Worker 102*d57664e9SAndroid Build Coastguard WorkerSOONG_INT=$ANDROID_BUILD_TOP/out/soong/.intermediates 103*d57664e9SAndroid Build Coastguard Worker 104*d57664e9SAndroid Build Coastguard WorkerJUNIT_TEST_MAIN_CLASS=com.android.hoststubgen.hosthelper.HostTestSuite 105*d57664e9SAndroid Build Coastguard Worker 106*d57664e9SAndroid Build Coastguard Workerrun_junit_test_jar() { 107*d57664e9SAndroid Build Coastguard Worker local jar="$1" 108*d57664e9SAndroid Build Coastguard Worker echo "Starting test: $jar ..." 109*d57664e9SAndroid Build Coastguard Worker run cd "${jar%/*}" 110*d57664e9SAndroid Build Coastguard Worker 111*d57664e9SAndroid Build Coastguard Worker run $JAVA $JAVA_OPTS \ 112*d57664e9SAndroid Build Coastguard Worker -cp $jar \ 113*d57664e9SAndroid Build Coastguard Worker org.junit.runner.JUnitCore \ 114*d57664e9SAndroid Build Coastguard Worker $main_class || return 1 115*d57664e9SAndroid Build Coastguard Worker return 0 116*d57664e9SAndroid Build Coastguard Worker} 117