• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/usr/bin/env bash
2# shellcheck disable=SC2086 # we want word splitting
3# shellcheck disable=SC1091 # paths only become valid at runtime
4
5. "${SCRIPTS_DIR}/setup-test-env.sh"
6
7section_start cuttlefish_setup "cuttlefish: setup"
8set -xe
9
10export HOME=/cuttlefish
11export PATH=/cuttlefish/bin:$PATH
12export LD_LIBRARY_PATH=/cuttlefish/lib64:${CI_PROJECT_DIR}/install/lib:$LD_LIBRARY_PATH
13export EGL_PLATFORM=surfaceless
14
15# Pick up a vulkan driver
16ARCH=$(uname -m)
17export VK_DRIVER_FILES=${CI_PROJECT_DIR}/install/share/vulkan/icd.d/${VK_DRIVER:-}_icd.$ARCH.json
18
19syslogd
20
21chown root:kvm /dev/kvm
22
23pushd /cuttlefish
24
25# Add a function to perform some tasks when exiting the script
26function my_atexit()
27{
28  # shellcheck disable=SC2317
29  cp /cuttlefish/cuttlefish/instances/cvd-1/logs/logcat $RESULTS_DIR || true
30  # shellcheck disable=SC2317
31  cp /cuttlefish/cuttlefish/instances/cvd-1/kernel.log $RESULTS_DIR || true
32
33  # shellcheck disable=SC2317
34  cp /cuttlefish/cuttlefish/instances/cvd-1/logs/launcher.log $RESULTS_DIR || true
35
36  # shellcheck disable=SC2317
37  /cuttlefish/bin/stop_cvd -wait_for_launcher=10
38}
39
40# stop cuttlefish if the script ends prematurely or is interrupted
41trap 'my_atexit' EXIT
42trap 'exit 2' HUP INT PIPE TERM
43
44ulimit -S -n 32768
45
46# Clean up state of previous run
47rm -rf  /cuttlefish/cuttlefish
48rm -rf  /cuttlefish/.cache
49rm -rf  /cuttlefish/.cuttlefish_config.json
50
51launch_cvd \
52  -daemon \
53  -verbosity=VERBOSE \
54  -file_verbosity=VERBOSE \
55  -use_overlay=false \
56  -enable_bootanimation=false \
57  -enable_minimal_mode=true \
58  -guest_enforce_security=false \
59  -report_anonymous_usage_stats=no \
60  -gpu_mode="$ANDROID_GPU_MODE" \
61  -cpus=${FDO_CI_CONCURRENT:-4} \
62  -memory_mb 8192 \
63  -kernel_path="$HOME/bzImage" \
64  -initramfs_path="$HOME/initramfs.img"
65
66sleep 1
67
68popd
69
70ADB=adb
71
72$ADB wait-for-device root
73sleep 1
74$ADB shell echo Hi from Android
75# shellcheck disable=SC2035
76$ADB logcat dEQP:D *:S &
77
78# overlay vendor
79
80OV_TMPFS="/data/overlay-remount"
81$ADB shell mkdir -p "$OV_TMPFS"
82$ADB shell mount -t tmpfs none "$OV_TMPFS"
83
84$ADB shell mkdir -p "$OV_TMPFS/vendor-upper"
85$ADB shell mkdir -p "$OV_TMPFS/vendor-work"
86
87opts="lowerdir=/vendor,upperdir=$OV_TMPFS/vendor-upper,workdir=$OV_TMPFS/vendor-work"
88$ADB shell mount -t overlay -o "$opts" none /vendor
89
90$ADB shell setenforce 0
91
92# deqp
93
94$ADB shell mkdir -p /data/deqp
95$ADB push /deqp-gles/modules/egl/deqp-egl-android /data/deqp
96$ADB push /deqp-gles/assets/gl_cts/data/mustpass/egl/aosp_mustpass/3.2.6.x/egl-main.txt /data/deqp
97$ADB push /deqp-vk/external/vulkancts/modules/vulkan/* /data/deqp
98$ADB push /deqp-vk/mustpass/vk-main.txt.zst /data/deqp
99$ADB push /deqp-tools/* /data/deqp
100$ADB push /deqp-runner/deqp-runner /data/deqp
101
102# download Android Mesa from S3
103MESA_ANDROID_ARTIFACT_URL=https://${PIPELINE_ARTIFACTS_BASE}/${S3_ANDROID_ARTIFACT_NAME}.tar.zst
104curl -L --retry 4 -f --retry-all-errors --retry-delay 60 -o ${S3_ANDROID_ARTIFACT_NAME}.tar.zst ${MESA_ANDROID_ARTIFACT_URL}
105mkdir /mesa-android
106tar -C /mesa-android -xvf ${S3_ANDROID_ARTIFACT_NAME}.tar.zst
107rm "${S3_ANDROID_ARTIFACT_NAME}.tar.zst" &
108
109INSTALL="/mesa-android/install"
110
111$ADB push "$INSTALL/all-skips.txt" /data/deqp
112$ADB push "$INSTALL/angle-skips.txt" /data/deqp
113if [ -e "$INSTALL/$GPU_VERSION-flakes.txt" ]; then
114  $ADB push "$INSTALL/$GPU_VERSION-flakes.txt" /data/deqp
115fi
116if [ -e "$INSTALL/$GPU_VERSION-fails.txt" ]; then
117  $ADB push "$INSTALL/$GPU_VERSION-fails.txt" /data/deqp
118fi
119if [ -e "$INSTALL/$GPU_VERSION-skips.txt" ]; then
120  $ADB push "$INSTALL/$GPU_VERSION-skips.txt" /data/deqp
121fi
122$ADB push "$INSTALL/deqp-$DEQP_SUITE.toml" /data/deqp
123
124# remove 32 bits libs from /vendor/lib
125
126$ADB shell rm -f /vendor/lib/libglapi.so
127$ADB shell rm -f /vendor/lib/egl/libGLES_mesa.so
128
129$ADB shell rm -f /vendor/lib/egl/libEGL_angle.so
130$ADB shell rm -f /vendor/lib/egl/libEGL_emulation.so
131$ADB shell rm -f /vendor/lib/egl/libGLESv1_CM_angle.so
132$ADB shell rm -f /vendor/lib/egl/libGLESv1_CM_emulation.so
133$ADB shell rm -f /vendor/lib/egl/libGLESv2_angle.so
134$ADB shell rm -f /vendor/lib/egl/libGLESv2_emulation.so
135
136$ADB shell rm -f /vendor/lib/hw/vulkan.*
137
138# replace on /vendor/lib64
139
140$ADB push "$INSTALL/lib/libgallium_dri.so" /vendor/lib64/libgallium_dri.so
141$ADB push "$INSTALL/lib/libEGL.so" /vendor/lib64/egl/libEGL_mesa.so
142$ADB push "$INSTALL/lib/libGLESv1_CM.so" /vendor/lib64/egl/libGLESv1_CM_mesa.so
143$ADB push "$INSTALL/lib/libGLESv2.so" /vendor/lib64/egl/libGLESv2_mesa.so
144
145$ADB push "$INSTALL/lib/libvulkan_lvp.so" /vendor/lib64/hw/vulkan.lvp.so
146$ADB push "$INSTALL/lib/libvulkan_virtio.so" /vendor/lib64/hw/vulkan.virtio.so
147
148$ADB shell rm -f /vendor/lib64/egl/libEGL_emulation.so
149$ADB shell rm -f /vendor/lib64/egl/libGLESv1_CM_emulation.so
150$ADB shell rm -f /vendor/lib64/egl/libGLESv2_emulation.so
151
152# Check what GLES implementation Surfaceflinger is using before copying the new mesa libraries
153while [ "$($ADB shell dumpsys SurfaceFlinger | grep GLES:)" = "" ] ; do sleep 1; done
154$ADB shell dumpsys SurfaceFlinger | grep GLES
155
156# restart Android shell, so that surfaceflinger uses the new libraries
157$ADB shell stop
158$ADB shell start
159
160# Check what GLES implementation Surfaceflinger is using after copying the new mesa libraries
161while [ "$($ADB shell dumpsys SurfaceFlinger | grep GLES:)" = "" ] ; do sleep 1; done
162MESA_RUNTIME_VERSION="$($ADB shell dumpsys SurfaceFlinger | grep GLES:)"
163MESA_BUILD_VERSION=$(cat "$INSTALL/VERSION")
164if ! printf "%s" "$MESA_RUNTIME_VERSION" | grep "${MESA_BUILD_VERSION}$"; then
165    echo "Fatal: Android is loading a wrong version of the Mesa3D libs: ${MESA_RUNTIME_VERSION}" 1>&2
166    exit 1
167fi
168
169BASELINE=""
170if [ -e "$INSTALL/$GPU_VERSION-fails.txt" ]; then
171    BASELINE="--baseline /data/deqp/$GPU_VERSION-fails.txt"
172fi
173
174# Default to an empty known flakes file if it doesn't exist.
175$ADB shell "touch /data/deqp/$GPU_VERSION-flakes.txt"
176
177if [ -e "$INSTALL/$GPU_VERSION-skips.txt" ]; then
178    DEQP_SKIPS="$DEQP_SKIPS /data/deqp/$GPU_VERSION-skips.txt"
179fi
180
181if [ -n "$USE_ANGLE" ]; then
182    DEQP_SKIPS="$DEQP_SKIPS /data/deqp/angle-skips.txt"
183fi
184
185AOSP_RESULTS=/data/deqp/results
186uncollapsed_section_switch cuttlefish_test "cuttlefish: testing"
187
188set +e
189$ADB shell "mkdir ${AOSP_RESULTS}; cd ${AOSP_RESULTS}/..; \
190  XDG_CACHE_HOME=/data/local/tmp \
191  ./deqp-runner \
192    suite \
193    --suite /data/deqp/deqp-$DEQP_SUITE.toml \
194    --output $AOSP_RESULTS \
195    --skips /data/deqp/all-skips.txt $DEQP_SKIPS \
196    --flakes /data/deqp/$GPU_VERSION-flakes.txt \
197    --testlog-to-xml /data/deqp/testlog-to-xml \
198    --shader-cache-dir /data/local/tmp \
199    --fraction-start ${CI_NODE_INDEX:-1} \
200    --fraction $(( CI_NODE_TOTAL * ${DEQP_FRACTION:-1})) \
201    --jobs ${FDO_CI_CONCURRENT:-4} \
202    $BASELINE \
203    ${DEQP_RUNNER_MAX_FAILS:+--max-fails \"$DEQP_RUNNER_MAX_FAILS\"} \
204    "
205
206EXIT_CODE=$?
207set -e
208section_switch cuttlefish_results "cuttlefish: gathering the results"
209
210$ADB pull "$AOSP_RESULTS/." "$RESULTS_DIR"
211
212# Remove all but the first 50 individual XML files uploaded as artifacts, to
213# save fd.o space when you break everything.
214find $RESULTS_DIR -name \*.xml | \
215    sort -n |
216    sed -n '1,+49!p' | \
217    xargs rm -f
218
219# If any QPA XMLs are there, then include the XSL/CSS in our artifacts.
220find $RESULTS_DIR -name \*.xml \
221    -exec cp /deqp-tools/testlog.css /deqp-tools/testlog.xsl "$RESULTS_DIR/" ";" \
222    -quit
223
224$ADB shell "cd ${AOSP_RESULTS}/..; \
225./deqp-runner junit \
226   --testsuite dEQP \
227   --results $AOSP_RESULTS/failures.csv \
228   --output $AOSP_RESULTS/junit.xml \
229   --limit 50 \
230   --template \"See $ARTIFACTS_BASE_URL/results/{{testcase}}.xml\""
231
232$ADB pull "$AOSP_RESULTS/junit.xml" "$RESULTS_DIR"
233
234section_end cuttlefish_results
235exit $EXIT_CODE
236