
Cuttlefish performs some checks on the host system before launching, setting VK_DRIVER_FILES to the path of the host artifacts makes sure that a vulkan library can be found on the host side. Reviewed-by: Eric Engestrom <None> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/30895>
187 lines
6.1 KiB
Bash
Executable File
187 lines
6.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# shellcheck disable=SC2086 # we want word splitting
|
|
# shellcheck disable=SC1091 # paths only become valid at runtime
|
|
|
|
. "${SCRIPTS_DIR}/setup-test-env.sh"
|
|
|
|
section_start cuttlefish_setup "cuttlefish: setup"
|
|
set -xe
|
|
|
|
export HOME=/cuttlefish
|
|
export PATH=/cuttlefish/bin:$PATH
|
|
export LD_LIBRARY_PATH=/cuttlefish/lib64:${CI_PROJECT_DIR}/install/lib:$LD_LIBRARY_PATH
|
|
export EGL_PLATFORM=surfaceless
|
|
|
|
# Pick up a vulkan driver
|
|
#
|
|
# TODO: the vulkan driver should probably be controlled by a variable in the
|
|
# .test-android job or in derived jobs
|
|
export VK_DRIVER_FILES=${CI_PROJECT_DIR}/install/share/vulkan/icd.d/
|
|
|
|
syslogd
|
|
|
|
chown root:kvm /dev/kvm
|
|
|
|
pushd /cuttlefish
|
|
|
|
# Add a function to perform some tasks when exiting the script
|
|
function my_atexit()
|
|
{
|
|
# shellcheck disable=SC2317
|
|
cp /cuttlefish/cuttlefish/instances/cvd-1/logs/logcat $RESULTS_DIR || true
|
|
# shellcheck disable=SC2317
|
|
cp /cuttlefish/cuttlefish/instances/cvd-1/kernel.log $RESULTS_DIR || true
|
|
|
|
# shellcheck disable=SC2317
|
|
cp /cuttlefish/cuttlefish/instances/cvd-1/logs/launcher.log $RESULTS_DIR || true
|
|
|
|
# shellcheck disable=SC2317
|
|
/cuttlefish/bin/stop_cvd -wait_for_launcher=10
|
|
}
|
|
|
|
# stop cuttlefish if the script ends prematurely or is interrupted
|
|
trap 'my_atexit' EXIT
|
|
trap 'exit 2' HUP INT PIPE TERM
|
|
|
|
ulimit -S -n 32768
|
|
|
|
# Clean up state of previous run
|
|
rm -rf /cuttlefish/cuttlefish
|
|
rm -rf /cuttlefish/.cache
|
|
rm -rf /cuttlefish/.cuttlefish_config.json
|
|
|
|
launch_cvd \
|
|
-daemon \
|
|
-verbosity=VERBOSE \
|
|
-file_verbosity=VERBOSE \
|
|
-use_overlay=false \
|
|
-enable_bootanimation=false \
|
|
-enable_minimal_mode=true \
|
|
-guest_enforce_security=false \
|
|
-report_anonymous_usage_stats=no \
|
|
-gpu_mode="$ANDROID_GPU_MODE" \
|
|
-cpus=${FDO_CI_CONCURRENT:-4} \
|
|
-memory_mb 8192 \
|
|
-kernel_path="$HOME/bzImage" \
|
|
-initramfs_path="$HOME/initramfs.img"
|
|
|
|
sleep 1
|
|
|
|
popd
|
|
|
|
ADB=adb
|
|
|
|
$ADB wait-for-device root
|
|
sleep 1
|
|
$ADB shell echo Hi from Android
|
|
# shellcheck disable=SC2035
|
|
$ADB logcat dEQP:D *:S &
|
|
|
|
# overlay vendor
|
|
|
|
OV_TMPFS="/data/overlay-remount"
|
|
$ADB shell mkdir -p "$OV_TMPFS"
|
|
$ADB shell mount -t tmpfs none "$OV_TMPFS"
|
|
|
|
$ADB shell mkdir -p "$OV_TMPFS/vendor-upper"
|
|
$ADB shell mkdir -p "$OV_TMPFS/vendor-work"
|
|
|
|
opts="lowerdir=/vendor,upperdir=$OV_TMPFS/vendor-upper,workdir=$OV_TMPFS/vendor-work"
|
|
$ADB shell mount -t overlay -o "$opts" none /vendor
|
|
|
|
$ADB shell setenforce 0
|
|
|
|
# deqp
|
|
|
|
$ADB shell mkdir -p /data/deqp
|
|
$ADB push /deqp-gles/modules/egl/deqp-egl-android /data/deqp
|
|
$ADB push /deqp-gles/assets/gl_cts/data/mustpass/egl/aosp_mustpass/3.2.6.x/egl-main.txt /data/deqp
|
|
$ADB push /deqp-vk/external/vulkancts/modules/vulkan/* /data/deqp
|
|
$ADB push /deqp-vk/mustpass/vk-main.txt.zst /data/deqp
|
|
$ADB push /deqp-tools/* /data/deqp
|
|
$ADB push /deqp-runner/deqp-runner /data/deqp
|
|
|
|
# download Android Mesa from S3
|
|
MESA_ANDROID_ARTIFACT_URL=https://${PIPELINE_ARTIFACTS_BASE}/${S3_ANDROID_ARTIFACT_NAME}.tar.zst
|
|
curl -L --retry 4 -f --retry-all-errors --retry-delay 60 -o ${S3_ANDROID_ARTIFACT_NAME}.tar.zst ${MESA_ANDROID_ARTIFACT_URL}
|
|
mkdir /mesa-android
|
|
tar -C /mesa-android -xvf ${S3_ANDROID_ARTIFACT_NAME}.tar.zst
|
|
rm "${S3_ANDROID_ARTIFACT_NAME}.tar.zst" &
|
|
|
|
$ADB push /mesa-android/install/all-skips.txt /data/deqp
|
|
$ADB push "/mesa-android/install/$GPU_VERSION-flakes.txt" /data/deqp
|
|
$ADB push "/mesa-android/install/deqp-$DEQP_SUITE.toml" /data/deqp
|
|
|
|
# remove 32 bits libs from /vendor/lib
|
|
|
|
$ADB shell rm -f /vendor/lib/libglapi.so
|
|
$ADB shell rm -f /vendor/lib/egl/libGLES_mesa.so
|
|
|
|
$ADB shell rm -f /vendor/lib/egl/libEGL_angle.so
|
|
$ADB shell rm -f /vendor/lib/egl/libEGL_emulation.so
|
|
$ADB shell rm -f /vendor/lib/egl/libGLESv1_CM_angle.so
|
|
$ADB shell rm -f /vendor/lib/egl/libGLESv1_CM_emulation.so
|
|
$ADB shell rm -f /vendor/lib/egl/libGLESv2_angle.so
|
|
$ADB shell rm -f /vendor/lib/egl/libGLESv2_emulation.so
|
|
|
|
$ADB shell rm -f /vendor/lib/hw/vulkan.*
|
|
|
|
# replace on /vendor/lib64
|
|
|
|
$ADB push /mesa-android/install/lib/libgallium_dri.so /vendor/lib64/libgallium_dri.so
|
|
$ADB push /mesa-android/install/lib/libglapi.so /vendor/lib64/libglapi.so
|
|
$ADB push /mesa-android/install/lib/libEGL.so /vendor/lib64/egl/libEGL_mesa.so
|
|
$ADB push /mesa-android/install/lib/libGLESv1_CM.so /vendor/lib64/egl/libGLESv1_CM_mesa.so
|
|
$ADB push /mesa-android/install/lib/libGLESv2.so /vendor/lib64/egl/libGLESv2_mesa.so
|
|
|
|
$ADB push /mesa-android/install/lib/libvulkan_lvp.so /vendor/lib64/hw/vulkan.lvp.so
|
|
$ADB push /mesa-android/install/lib/libvulkan_virtio.so /vendor/lib64/hw/vulkan.virtio.so
|
|
|
|
$ADB shell rm -f /vendor/lib64/egl/libEGL_emulation.so
|
|
$ADB shell rm -f /vendor/lib64/egl/libGLESv1_CM_emulation.so
|
|
$ADB shell rm -f /vendor/lib64/egl/libGLESv2_emulation.so
|
|
|
|
# Check what GLES implementation Surfaceflinger is using before copying the new mesa libraries
|
|
while [ "$($ADB shell dumpsys SurfaceFlinger | grep GLES:)" = "" ] ; do sleep 1; done
|
|
$ADB shell dumpsys SurfaceFlinger | grep GLES
|
|
|
|
# restart Android shell, so that surfaceflinger uses the new libraries
|
|
$ADB shell stop
|
|
$ADB shell start
|
|
|
|
# Check what GLES implementation Surfaceflinger is using after copying the new mesa libraries
|
|
while [ "$($ADB shell dumpsys SurfaceFlinger | grep GLES:)" = "" ] ; do sleep 1; done
|
|
MESA_RUNTIME_VERSION="$($ADB shell dumpsys SurfaceFlinger | grep GLES:)"
|
|
MESA_BUILD_VERSION=$(cat /mesa-android/install/VERSION)
|
|
if ! printf "%s" "$MESA_RUNTIME_VERSION" | grep "${MESA_BUILD_VERSION}$"; then
|
|
echo "Fatal: Android is loading a wrong version of the Mesa3D libs: ${MESA_RUNTIME_VERSION}" 1>&2
|
|
exit 1
|
|
fi
|
|
|
|
AOSP_RESULTS=/data/deqp/results
|
|
uncollapsed_section_switch cuttlefish_test "cuttlefish: testing"
|
|
|
|
set +e
|
|
$ADB shell "mkdir ${AOSP_RESULTS}; cd ${AOSP_RESULTS}/..; \
|
|
XDG_CACHE_HOME=/data/local/tmp \
|
|
./deqp-runner \
|
|
suite \
|
|
--suite /data/deqp/deqp-$DEQP_SUITE.toml \
|
|
--output $AOSP_RESULTS \
|
|
--skips /data/deqp/all-skips.txt $DEQP_SKIPS \
|
|
--flakes /data/deqp/$GPU_VERSION-flakes.txt \
|
|
--testlog-to-xml /data/deqp/testlog-to-xml \
|
|
--shader-cache-dir /data/local/tmp \
|
|
--fraction-start ${CI_NODE_INDEX:-1} \
|
|
--fraction $(( CI_NODE_TOTAL * ${DEQP_FRACTION:-1})) \
|
|
--jobs ${FDO_CI_CONCURRENT:-4}"
|
|
|
|
EXIT_CODE=$?
|
|
set -e
|
|
section_switch cuttlefish_results "cuttlefish: gathering the results"
|
|
|
|
$ADB pull $AOSP_RESULTS $RESULTS_DIR
|
|
|
|
section_end cuttlefish_results
|
|
exit $EXIT_CODE
|