blob: b49ee39a31421378b14c2ad5bef6dbda8aec496b [file] [log] [blame]
Makoto Onuki8558e9a2023-08-31 10:48:38 -07001# Copyright (C) 2023 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
15set -e # Exit at failure
16shopt -s globstar # Enable double-star wildcards (**)
17
18cd "${0%/*}" # Move to the script dir
19
20fail() {
21 echo "Error: $*" 1>&2
22 exit 1
23}
24
25# Print the arguments and then execute.
26run() {
27 echo "Running: $*" 1>&2
28 "$@"
29}
30
31# Concatenate the second and subsequent args with the first arg as a separator.
32# e.g. `join : a b c` -> prints `a:b:c`
33join() {
34 local IFS="$1"
35 shift
36 echo "$*"
37}
38
39abspath() {
40 for name in "${@}"; do
41 readlink -f $name
42 done
43}
44
45m() {
46 if (( $SKIP_BUILD )) ; then
47 echo "Skipping build: $*" 1>&2
48 return 0
49 fi
50 run ${ANDROID_BUILD_TOP}/build/soong/soong_ui.bash --make-mode "$@"
51}
52
53# Extract given jar files
54extract() {
55 for f in "${@}"; do
56 local out=$f.ext
57 run rm -fr $out
58 run mkdir -p $out
59
60 # It's too noisy, so only show the first few lines.
61 {
62 # Hmm unzipping kotlin jar files may produce a warning? Let's just add `|| true`...
63 run unzip $f -d $out || true
64 } |& sed -e '5,$d'
65 echo ' (omitting remaining output)'
66
67 done
68}
69
70# Find all *.java files in $1, and print them as Java class names.
71# For example, if there's a file `src/com/android/test/Test.java`, and you run
72# `list_all_classes_under_dir src`, then it'll print `com.android.test.Test`.
73list_all_classes_under_dir() {
74 local dir="$1"
75 ( # Use a subshell, so we won't change the current directory on the caller side.
76 cd "$dir"
77
78 # List the java files, but replace the slashes with dots, and remove the `.java` suffix.
79 ls **/*.java | sed -e 's!/!.!g' -e 's!.java$!!'
80 )
81}
82
83checkenv() {
84 # Make sure $ANDROID_BUILD_TOP is set.
85 : ${ANDROID_BUILD_TOP:?}
86
87 # Make sure ANDROID_BUILD_TOP doesn't contain whitespace.
88 set ${ANDROID_BUILD_TOP}
89 if [[ $# != 1 ]] ; then
90 fail "\$ANDROID_BUILD_TOP cannot contain whitespace."
91 fi
92}
93
94checkenv
95
96JAVAC=${JAVAC:-javac}
97JAVA=${JAVA:-java}
98JAR=${JAR:-jar}
99
100JAVAC_OPTS=${JAVAC_OPTS:--Xmaxerrs 99999 -Xlint:none}
101
102SOONG_INT=$ANDROID_BUILD_TOP/out/soong/.intermediates
103
104JUNIT_TEST_MAIN_CLASS=com.android.hoststubgen.hosthelper.HostTestSuite
105
106run_junit_test_jar() {
107 local jar="$1"
108 echo "Starting test: $jar ..."
109 run cd "${jar%/*}"
110
111 run $JAVA $JAVA_OPTS \
112 -cp $jar \
113 org.junit.runner.JUnitCore \
114 $main_class || return 1
115 return 0
116}