From 7b51a583edb72f9e66c231b60f9fae4c3c448d22 Mon Sep 17 00:00:00 2001 From: Helen Koike Date: Mon, 21 Nov 2022 14:37:22 -0300 Subject: [PATCH] ci/android: add android to the ci MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add android to the ci, so we can test mesa on it. Add debian/x86_test-android and test-android jobs. One build the container to run tests, and the other execute the tests. Android is executed on top of cuttlefish VM with virgl. Mesa libs are replaced on the cuttlefish image, and deqp and deqp-runner are used to execute tests. Co-developed-by: Tomeu Vizoso Signed-off-by: Helen Koike Reviewed-by: Sergi Blanch Torné Part-of: --- .../container/debian/x86_test-android.sh | 99 +++++++++++++++ .gitlab-ci/container/gitlab-ci.yml | 17 +++ .gitlab-ci/cuttlefish-runner.sh | 113 ++++++++++++++++++ .gitlab-ci/image-tags.yml | 4 +- .gitlab-ci/test/gitlab-ci.yml | 14 +++ .../drivers/virgl/ci/deqp-android-virgl.toml | 10 ++ src/gallium/drivers/virgl/ci/gitlab-ci.yml | 10 ++ 7 files changed, 266 insertions(+), 1 deletion(-) create mode 100644 .gitlab-ci/container/debian/x86_test-android.sh create mode 100755 .gitlab-ci/cuttlefish-runner.sh create mode 100644 src/gallium/drivers/virgl/ci/deqp-android-virgl.toml diff --git a/.gitlab-ci/container/debian/x86_test-android.sh b/.gitlab-ci/container/debian/x86_test-android.sh new file mode 100644 index 00000000000..c2715309d40 --- /dev/null +++ b/.gitlab-ci/container/debian/x86_test-android.sh @@ -0,0 +1,99 @@ +#!/usr/bin/env bash +# The relative paths in this file only become valid at runtime. +# shellcheck disable=SC1091 +# shellcheck disable=SC2086 # we want word splitting + +set -e +set -o xtrace + +export DEBIAN_FRONTEND=noninteractive + +# Ephemeral packages (installed for this script and removed again at the end) +STABLE_EPHEMERAL=" \ + ccache \ + unzip \ + dpkg-dev \ + build-essential:native \ + config-package-dev \ + debhelper-compat \ + cmake \ + ninja-build \ + " + +apt-get install -y --no-remove --no-install-recommends \ + $STABLE_EPHEMERAL \ + iproute2 + +############### Building ... + +. .gitlab-ci/container/container_pre_build.sh + +############### Downloading NDK for native builds for the guest ... + +# Fetch the NDK and extract just the toolchain we want. +ndk=$ANDROID_NDK +curl -L --retry 4 -f --retry-all-errors --retry-delay 60 \ + -o $ndk.zip https://dl.google.com/android/repository/$ndk-linux.zip +unzip -d / $ndk.zip +rm $ndk.zip + +############### Build dEQP runner + +export ANDROID_NDK_HOME=/$ndk +. .gitlab-ci/container/build-rust.sh +. .gitlab-ci/container/build-deqp-runner.sh + +rm -rf /root/.cargo +rm -rf /root/.rustup + +############### Build dEQP GL + +DEQP_TARGET="android" \ +EXTRA_CMAKE_ARGS="-DDEQP_TARGET_TOOLCHAIN=ndk-modern -DANDROID_NDK_PATH=/$ndk -DANDROID_ABI=x86_64 -DDE_ANDROID_API=28" \ +. .gitlab-ci/container/build-deqp.sh + +############### Downloading Cuttlefish resources ... + +CUTTLEFISH_VERSION=9082637 # Chosen from https://ci.android.com/builds/branches/aosp-master/grid? + +mkdir /cuttlefish +pushd /cuttlefish + +curl -L --retry 4 -f --retry-all-errors --retry-delay 60 \ + -o aosp_cf_x86_64_phone-img-$CUTTLEFISH_VERSION.zip https://ci.android.com/builds/submitted/$CUTTLEFISH_VERSION/aosp_cf_x86_64_phone-userdebug/latest/raw/aosp_cf_x86_64_phone-img-$CUTTLEFISH_VERSION.zip +unzip aosp_cf_x86_64_phone-img-$CUTTLEFISH_VERSION.zip +rm aosp_cf_x86_64_phone-img-$CUTTLEFISH_VERSION.zip +ls -lhS ./* + +curl -L --retry 4 -f --retry-all-errors --retry-delay 60 \ + https://ci.android.com/builds/submitted/$CUTTLEFISH_VERSION/aosp_cf_x86_64_phone-userdebug/latest/raw/cvd-host_package.tar.gz | tar -xzvf- + +popd + +############### Building and installing Debian package ... + +git clone --depth 1 https://github.com/google/android-cuttlefish.git +pushd android-cuttlefish + +pushd base +dpkg-buildpackage -uc -us +popd + +apt-get install -y ./cuttlefish-base_*.deb + +popd +rm -rf android-cuttlefish + +addgroup --system kvm +usermod -a -G kvm,cvdnetwork root + +############### Uninstall the build software + +rm -rf "/${ndk:?}" + +ccache --show-stats + +apt-get purge -y \ + $STABLE_EPHEMERAL + +apt-get autoremove -y --purge \ No newline at end of file diff --git a/.gitlab-ci/container/gitlab-ci.yml b/.gitlab-ci/container/gitlab-ci.yml index 696b6a62bc8..7cbf42392fb 100644 --- a/.gitlab-ci/container/gitlab-ci.yml +++ b/.gitlab-ci/container/gitlab-ci.yml @@ -236,6 +236,23 @@ debian/x86_test-vk: needs: - debian/x86_test-vk +# Debian 11 based x86 test image for Android +debian/x86_test-android: + extends: .use-debian/x86_test-base + variables: + MESA_IMAGE_TAG: &debian-x86_test-android ${DEBIAN_X86_TEST_ANDROID_TAG} + ANDROID_NDK: android-ndk-r25b + +.use-debian/x86_test-android: + extends: + - .set-image-base-tag + variables: + MESA_BASE_TAG: *debian-x86_test-base + MESA_IMAGE_PATH: ${DEBIAN_X86_TEST_ANDROID_IMAGE_PATH} + MESA_IMAGE_TAG: *debian-x86_test-android + needs: + - debian/x86_test-android + # Debian 11 based ARM build image debian/arm_build: extends: diff --git a/.gitlab-ci/cuttlefish-runner.sh b/.gitlab-ci/cuttlefish-runner.sh new file mode 100755 index 00000000000..d74579c1a5a --- /dev/null +++ b/.gitlab-ci/cuttlefish-runner.sh @@ -0,0 +1,113 @@ +#!/usr/bin/env bash + +set -x + +export HOME=/cuttlefish +export PATH=$PATH:/cuttlefish/bin +export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${CI_PROJECT_DIR}/install/lib/:/cuttlefish/lib64 +export EGL_PLATFORM=surfaceless + +syslogd + +chown root.kvm /dev/kvm + +/etc/init.d/cuttlefish-host-resources start + +cd /cuttlefish + +launch_cvd --verbosity=DEBUG --report_anonymous_usage_stats=n --cpus=8 --memory_mb=8192 --gpu_mode=drm_virgl --daemon --enable_minimal_mode=true --guest_enforce_security=false --use_overlay=false +sleep 1 + +cd - + +adb connect vsock:3:5555 +ADB="adb -s vsock:3:5555" + +$ADB root +sleep 1 +$ADB shell echo Hi from Android +$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 push /deqp/modules/egl/deqp-egl /data/. +$ADB push /deqp/assets/gl_cts/data/mustpass/egl/aosp_mustpass/3.2.6.x/egl-master.txt /data/. +$ADB push /deqp-runner/deqp-runner /data/. + +# download mesa-x86_64-android.tar.zst + +MESA_ANDROID_ARTIFACT_URL=https://${PIPELINE_ARTIFACTS_BASE}/${MINIO_ARTIFACT_NAME}.tar.zst +curl -L --retry 4 -f --retry-all-errors --retry-delay 60 -o ${MINIO_ARTIFACT_NAME}.tar.zst ${MESA_ANDROID_ARTIFACT_URL} +tar -xvf ${MINIO_ARTIFACT_NAME}.tar.zst + +GPU_VERSION=virgl-gl +$ADB push install/all-skips.txt /data/. +$ADB push install/$GPU_VERSION-flakes.txt /data/. +$ADB push install/deqp-android-virgl.toml /data/. + +# remove 32 bits libs from /vendor/lib + +$ADB shell rm /vendor/lib/dri/virtio_gpu_dri.so +$ADB shell rm /vendor/lib/libglapi.so +$ADB shell rm /vendor/lib/egl/libEGL_mesa.so + +$ADB shell rm /vendor/lib/egl/libEGL_angle.so +$ADB shell rm /vendor/lib/egl/libEGL_emulation.so +$ADB shell rm /vendor/lib/egl/libGLESv1_CM_angle.so +$ADB shell rm /vendor/lib/egl/libGLESv1_CM_emulation.so +$ADB shell rm /vendor/lib/egl/libGLESv2_angle.so +$ADB shell rm /vendor/lib/egl/libGLESv2_emulation.so + +# replace on /vendor/lib64 + +$ADB push install/lib/dri/virtio_gpu_dri.so /vendor/lib64/dri/virtio_gpu_dri.so +$ADB push install/lib/libglapi.so /vendor/lib64/libglapi.so +$ADB push install/lib/libEGL.so /vendor/lib64/egl/libEGL_mesa.so + +$ADB shell rm /vendor/lib64/egl/libEGL_angle.so +$ADB shell rm /vendor/lib64/egl/libEGL_emulation.so +$ADB shell rm /vendor/lib64/egl/libGLESv1_CM_angle.so +$ADB shell rm /vendor/lib64/egl/libGLESv1_CM_emulation.so +$ADB shell rm /vendor/lib64/egl/libGLESv2_angle.so +$ADB shell rm /vendor/lib64/egl/libGLESv2_emulation.so + +# run tests + +RESULTS=/data/results +DEQP_SUITE=/data/deqp-android-virgl.toml + +$ADB shell "mkdir /data/results; cd /data; strace -o /data/results/out.strace -f -s 1000 ./deqp-runner \ + suite \ + --suite $DEQP_SUITE \ + --output $RESULTS \ + --skips /data/all-skips.txt $DEQP_SKIPS \ + --flakes /data/$GPU_VERSION-flakes.txt \ + --testlog-to-xml /deqp/executor/testlog-to-xml \ + --fraction-start $CI_NODE_INDEX \ + --fraction `expr $CI_NODE_TOTAL \* ${DEQP_FRACTION:-1}` \ + --jobs ${FDO_CI_CONCURRENT:-4} \ + $DEQP_RUNNER_OPTIONS" + +EXIT_CODE=$? + +$ADB pull $RESULTS results + +cp /cuttlefish/cuttlefish/instances/cvd-1/logs/logcat results +cp /cuttlefish/cuttlefish/instances/cvd-1/kernel.log results +cp /cuttlefish/cuttlefish/instances/cvd-1/logs/launcher.log results + +exit $EXIT_CODE \ No newline at end of file diff --git a/.gitlab-ci/image-tags.yml b/.gitlab-ci/image-tags.yml index 1ecfa6ff23e..0e53149f419 100644 --- a/.gitlab-ci/image-tags.yml +++ b/.gitlab-ci/image-tags.yml @@ -3,7 +3,7 @@ variables: DEBIAN_BASE_TAG: "2023-01-20-kernel-6.1-439f86d0" DEBIAN_X86_BUILD_IMAGE_PATH: "debian/x86_build" - DEBIAN_BUILD_TAG: "2023-01-20-mold-1_10" + DEBIAN_BUILD_TAG: "2023-01-24-android" DEBIAN_X86_BUILD_MINGW_IMAGE_PATH: "debian/x86_build-mingw" DEBIAN_BUILD_MINGW_TAG: "2023-01-03-ci-libva-2.17" @@ -13,6 +13,8 @@ variables: DEBIAN_X86_TEST_IMAGE_GL_PATH: "debian/x86_test-gl" DEBIAN_X86_TEST_IMAGE_VK_PATH: "debian/x86_test-vk" DEBIAN_X86_TEST_IMAGE_PATH: ${DEBIAN_X86_TEST_IMAGE_GL_PATH} + DEBIAN_X86_TEST_ANDROID_IMAGE_PATH: "debian/x86_test-android" + DEBIAN_X86_TEST_ANDROID_TAG: "2023-01-24-test-android-2" DEBIAN_X86_TEST_GL_TAG: "2023-01-23-vkvalidate" DEBIAN_X86_TEST_VK_TAG: "2023-01-12-cts" diff --git a/.gitlab-ci/test/gitlab-ci.yml b/.gitlab-ci/test/gitlab-ci.yml index bdfb1152ea6..fddb66179e2 100644 --- a/.gitlab-ci/test/gitlab-ci.yml +++ b/.gitlab-ci/test/gitlab-ci.yml @@ -52,6 +52,20 @@ rustfmt: needs: - debian/x86_test-gl +.test-android: + extends: + - .test + - .use-debian/x86_test-android + variables: + MINIO_ARTIFACT_NAME: mesa-x86_64-android + needs: + - job: debian-testing + artifacts: true # On the host we want the Linux build + - job: debian-android + artifacts: false # The Android build will be downloaded later + - job: debian/x86_test-android + artifacts: false + .vkd3d-proton-test: artifacts: when: on_failure diff --git a/src/gallium/drivers/virgl/ci/deqp-android-virgl.toml b/src/gallium/drivers/virgl/ci/deqp-android-virgl.toml new file mode 100644 index 00000000000..ea55b2b8ad1 --- /dev/null +++ b/src/gallium/drivers/virgl/ci/deqp-android-virgl.toml @@ -0,0 +1,10 @@ +[[deqp]] +deqp = "/data/deqp-egl" +caselists = ["/data/egl-master.txt"] +deqp_args = [ + "--deqp-surface-width=256", + "--deqp-surface-height=256", + "--deqp-surface-type=pbuffer", + "--deqp-gl-config-name=rgba8888d24s8ms0", + "--deqp-visibility=hidden" +] \ No newline at end of file diff --git a/src/gallium/drivers/virgl/ci/gitlab-ci.yml b/src/gallium/drivers/virgl/ci/gitlab-ci.yml index 772460aa169..e260fb0da2e 100644 --- a/src/gallium/drivers/virgl/ci/gitlab-ci.yml +++ b/src/gallium/drivers/virgl/ci/gitlab-ci.yml @@ -105,3 +105,13 @@ virgl-iris-traces-performance: PIGLIT_REPLAY_LOOP_TIMES: 150 PIGLIT_REPLAY_EXTRA_ARGS: "--download-caching-proxy-url=${FDO_HTTP_CACHE_URI}" allow_failure: true + +android-virgl-llvmpipe: + extends: + - .test-android + - .virgl-rules + script: + - ./install/cuttlefish-runner.sh + artifacts: + paths: + - results/ \ No newline at end of file