From: Michel Dänzer Date: Tue, 8 Oct 2019 17:46:11 +0000 (+0200) Subject: gitlab-ci: Use native aarch64 runner for ARM build jobs X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=163ec5d808189f54028860e23406e6be60423028;p=mesa.git gitlab-ci: Use native aarch64 runner for ARM build jobs This allows running the regression tests. One downside is that we can't easily build the Vulkan overlay layer, because only x86 binaries of the glslang validator are available. If that's important, we could either use those binaries via qemu, or build it from source. v2: * Add :amd64 suffix to existing debian-9/10 job names (Eric Engestrom) Acked-by: Eric Engestrom # v1 --- diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 6ee6e02ca2c..7cde2945b58 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -14,8 +14,8 @@ # repository's registry will be used there as well. variables: UPSTREAM_REPO: mesa/mesa - DEBIAN_TAG: "2019-10-16" - DEBIAN_ARM64_TAG: "arm64v8-2019-08-09" + DEBIAN_TAG: "2019-10-22" + DEBIAN_ARM64_TAG: "arm64v8-2019-10-22" STRETCH_TAG: "2019-09-18" DEBIAN_VERSION: buster-slim STRETCH_VERSION: stretch-slim @@ -67,39 +67,38 @@ stages: # no need to pull the whole repo to build the container image GIT_STRATEGY: none -debian-10: +debian-10:amd64: extends: - .debian@container-ifnot-exists - .container variables: DEBIAN_EXEC: 'bash .gitlab-ci/debian-install.sh' -.use-debian-10: +.use-debian-10:amd64: image: $DEBIAN_IMAGE needs: - - debian-10 + - debian-10:amd64 -debian-9: - extends: debian-10 +debian-9:amd64: + extends: debian-10:amd64 variables: DEBIAN_TAG: $STRETCH_TAG DEBIAN_VERSION: $STRETCH_VERSION DEBIAN_IMAGE: $STRETCH_IMAGE DEBIAN_EXEC: 'bash .gitlab-ci/debian-stretch-install.sh' -.use-debian-9: +.use-debian-9:amd64: image: $STRETCH_IMAGE needs: - - debian-9 + - debian-9:amd64 -# Builds a Docker image with the native environment and VK-GL-CTS for testing. -test-container:arm64: +debian-10:arm64: extends: - .debian@container-ifnot-exists@arm64v8 - .container variables: DEBIAN_TAG: "$DEBIAN_ARM64_TAG" - DEBIAN_EXEC: 'bash .gitlab-ci/debian-test-install.sh' + DEBIAN_EXEC: 'bash .gitlab-ci/debian-arm64-install.sh' # BUILD @@ -141,14 +140,14 @@ test-container:arm64: .meson-build: extends: - .build - - .use-debian-10 + - .use-debian-10:amd64 script: - .gitlab-ci/meson-build.sh .scons-build: extends: - .build - - .use-debian-10 + - .use-debian-10:amd64 variables: SCONSFLAGS: "-j4" script: @@ -187,7 +186,6 @@ meson-main: .meson-cross: extends: - .meson-build - - .ci-deqp-artifacts variables: UNWIND: "false" DRI_LOADERS: > @@ -206,22 +204,29 @@ meson-main: -D gallium-nine=false -D llvm=false -meson-armhf: +.meson-arm: extends: .meson-cross + image: $DEBIAN_ARM64_IMAGE variables: - CROSS: armhf VULKAN_DRIVERS: freedreno GALLIUM_DRIVERS: "etnaviv,freedreno,kmsro,lima,nouveau,panfrost,tegra,v3d,vc4" - # Disable the tests since we're cross compiling. EXTRA_OPTION: > - -D build-tests=false -D I-love-half-baked-turnips=true - -D vulkan-overlay-layer=true + needs: + - debian-10:arm64 + tags: + - aarch64 + +meson-armhf: + extends: .meson-arm + variables: + CROSS: armhf meson-arm64: - extends: meson-armhf + extends: + - .meson-arm + - .ci-deqp-artifacts variables: - CROSS: arm64 BUILDTYPE: "debugoptimized" # NOTE: Building SWR is 2x (yes two) times slower than all the other @@ -300,7 +305,7 @@ meson-clover: meson-clover-old-llvm: extends: - meson-clover - - .use-debian-9 + - .use-debian-9:amd64 variables: UNWIND: "false" DRI_LOADERS: > @@ -378,7 +383,7 @@ scons: scons-old-llvm: extends: - scons - - .use-debian-9 + - .use-debian-9:amd64 script: - LLVM_VERSION=3.9 .gitlab-ci/scons-build.sh - LLVM_VERSION=4.0 .gitlab-ci/scons-build.sh @@ -393,7 +398,7 @@ scons-old-llvm: .deqp-test: extends: - .test - - .use-debian-10 + - .use-debian-10:amd64 variables: DEQP_SKIPS: deqp-default-skips.txt script: @@ -410,7 +415,7 @@ scons-old-llvm: - meson-main needs: - meson-main - - debian-10 + - debian-10:amd64 test-llvmpipe-gles2: parallel: 4 @@ -457,7 +462,7 @@ arm64_a630_gles2: - meson-arm64 needs: - meson-arm64 - - test-container:arm64 + - debian-10:arm64 arm64_a630_gles31: extends: arm64_a630_gles2 diff --git a/.gitlab-ci/debian-arm64-install.sh b/.gitlab-ci/debian-arm64-install.sh new file mode 100644 index 00000000000..1dac7b99593 --- /dev/null +++ b/.gitlab-ci/debian-arm64-install.sh @@ -0,0 +1,118 @@ +#!/bin/bash + +set -e +set -o xtrace + +############### Install packages for building +apt-get -y install ca-certificates +sed -i -e 's/http:\/\/deb/https:\/\/deb/g' /etc/apt/sources.list +dpkg --add-architecture armhf +apt-get update +apt-get -y install \ + bc \ + bison \ + bzip2 \ + ccache \ + cmake \ + crossbuild-essential-armhf \ + curl \ + flex \ + g++ \ + gettext \ + git \ + libdrm-dev \ + libdrm-dev:armhf \ + libelf-dev \ + libelf-dev:armhf \ + libexpat1-dev \ + libexpat1-dev:armhf \ + libgbm-dev \ + libgles2-mesa-dev \ + libpng-dev \ + libssl-dev \ + meson \ + ninja-build \ + pkg-config \ + procps \ + python \ + python3-mako \ + wget \ + zlib1g-dev + +############### Generate cross build file for Meson + +cross_file="/cross_file-armhf.txt" +/usr/share/meson/debcrossgen --arch armhf -o "$cross_file" +# Explicitly set ccache path for cross compilers +sed -i "s|/usr/bin/\([^-]*\)-linux-gnu\([^-]*\)-g|/usr/lib/ccache/\\1-linux-gnu\\2-g|g" "$cross_file" +# Don't need wrapper for armhf executables +sed -i -e '/\[properties\]/a\' -e "needs_exe_wrapper = False" "$cross_file" + +export LIBDRM_VERSION=libdrm-2.4.99 + +############### Build libdrm + +wget https://dri.freedesktop.org/libdrm/$LIBDRM_VERSION.tar.bz2 +tar -xvf $LIBDRM_VERSION.tar.bz2 && rm $LIBDRM_VERSION.tar.bz2 +cd $LIBDRM_VERSION; meson build/ -Detnaviv=true; ninja -C build/ install; cd .. +rm -rf $LIBDRM_VERSION + +############### Build dEQP + +git config --global user.email "mesa@example.com" +git config --global user.name "Mesa CI" +# XXX: Use --depth 1 once we can drop the cherry-picks. +git clone \ + https://github.com/KhronosGroup/VK-GL-CTS.git \ + -b opengl-es-cts-3.2.5.1 \ + /VK-GL-CTS +cd /VK-GL-CTS +# Fix surfaceless build +git cherry-pick -x 22f41e5e321c6dcd8569c4dad91bce89f06b3670 +git cherry-pick -x 1daa8dff73161ea60ead965bd6c9f2a0a2165648 + +# surfaceless links against libkms and such despite not using it. +sed -i '/gbm/d' targets/surfaceless/surfaceless.cmake +sed -i '/libkms/d' targets/surfaceless/surfaceless.cmake +sed -i '/libgbm/d' targets/surfaceless/surfaceless.cmake + +# --insecure is due to SSL cert failures hitting sourceforge for zlib and +# libpng (sigh). The archives get their checksums checked anyway, and git +# always goes through ssh or https. +python3 external/fetch_sources.py --insecure + +mkdir -p /deqp +cd /deqp +cmake -G Ninja \ + -DDEQP_TARGET=surfaceless \ + -DCMAKE_BUILD_TYPE=Release \ + /VK-GL-CTS +ninja + +# Copy out the mustpass lists we want from a bunch of other junk. +mkdir /deqp/mustpass +for gles in gles2 gles3 gles31; do + cp \ + /deqp/external/openglcts/modules/gl_cts/data/mustpass/gles/aosp_mustpass/3.2.5.x/$gles-master.txt \ + /deqp/mustpass/$gles-master.txt +done + +rm -rf /deqp/external +rm -rf /deqp/modules/internal +rm -rf /deqp/executor +rm -rf /deqp/execserver +rm -rf /deqp/modules/egl +rm -rf /deqp/framework +du -sh * +rm -rf /VK-GL-CTS + +############### Uninstall the build software + +apt-get purge -y \ + cmake \ + git \ + libgbm-dev \ + libgles2-mesa-dev \ + wget + +apt-get autoremove -y --purge diff --git a/.gitlab-ci/debian-install.sh b/.gitlab-ci/debian-install.sh index 8a74b2877da..774b8e02128 100644 --- a/.gitlab-ci/debian-install.sh +++ b/.gitlab-ci/debian-install.sh @@ -5,7 +5,7 @@ set -o xtrace export DEBIAN_FRONTEND=noninteractive -CROSS_ARCHITECTURES="armhf arm64 i386" +CROSS_ARCHITECTURES="i386" for arch in $CROSS_ARCHITECTURES; do dpkg --add-architecture $arch done @@ -216,9 +216,11 @@ for arch in $CROSS_ARCHITECTURES; do /usr/share/meson/debcrossgen --arch "$arch" -o "$cross_file" # Explicitly set ccache path for cross compilers sed -i "s|/usr/bin/\([^-]*\)-linux-gnu\([^-]*\)-g|/usr/lib/ccache/\\1-linux-gnu\\2-g|g" "$cross_file" - # Work around a bug in debcrossgen that should be fixed in the next release if [ "$arch" = "i386" ]; then + # Work around a bug in debcrossgen that should be fixed in the next release sed -i "s|cpu_family = 'i686'|cpu_family = 'x86'|g" "$cross_file" + # Don't need wrapper for i386 executables + sed -i -e '/\[properties\]/a\' -e "needs_exe_wrapper = False" "$cross_file" fi done diff --git a/.gitlab-ci/debian-test-install.sh b/.gitlab-ci/debian-test-install.sh deleted file mode 100644 index 85817d161f0..00000000000 --- a/.gitlab-ci/debian-test-install.sh +++ /dev/null @@ -1,107 +0,0 @@ -#!/bin/bash - -set -e -set -o xtrace - -############### Install packages for building -apt-get -y install ca-certificates -sed -i -e 's/http:\/\/deb/https:\/\/deb/g' /etc/apt/sources.list -apt-get update -apt-get -y install \ - bc \ - bison \ - bzip2 \ - cmake \ - curl \ - flex \ - g++ \ - gettext \ - git \ - libelf1 \ - libexpat1 \ - libgbm-dev \ - libgles2-mesa-dev \ - libpng-dev \ - libssl-dev \ - ninja-build \ - pkg-config \ - procps \ - python \ - python3-pip \ - python3-setuptools \ - unzip \ - wget \ - zlib1g-dev - -export LIBDRM_VERSION=libdrm-2.4.99 - -pip3 install meson - -############### Build libdrm - -wget https://dri.freedesktop.org/libdrm/$LIBDRM_VERSION.tar.bz2 -tar -xvf $LIBDRM_VERSION.tar.bz2 && rm $LIBDRM_VERSION.tar.bz2 -cd $LIBDRM_VERSION; meson build/ -Detnaviv=true; ninja -C build/ install; cd .. -rm -rf $LIBDRM_VERSION - -############### Build dEQP - -git config --global user.email "mesa@example.com" -git config --global user.name "Mesa CI" -# XXX: Use --depth 1 once we can drop the cherry-picks. -git clone \ - https://github.com/KhronosGroup/VK-GL-CTS.git \ - -b opengl-es-cts-3.2.5.1 \ - /VK-GL-CTS -cd /VK-GL-CTS -# Fix surfaceless build -git cherry-pick -x 22f41e5e321c6dcd8569c4dad91bce89f06b3670 -git cherry-pick -x 1daa8dff73161ea60ead965bd6c9f2a0a2165648 - -# surfaceless links against libkms and such despite not using it. -sed -i '/gbm/d' targets/surfaceless/surfaceless.cmake -sed -i '/libkms/d' targets/surfaceless/surfaceless.cmake -sed -i '/libgbm/d' targets/surfaceless/surfaceless.cmake - -# --insecure is due to SSL cert failures hitting sourceforge for zlib and -# libpng (sigh). The archives get their checksums checked anyway, and git -# always goes through ssh or https. -python3 external/fetch_sources.py --insecure - -mkdir -p /deqp -cd /deqp -cmake -G Ninja \ - -DDEQP_TARGET=surfaceless \ - -DCMAKE_BUILD_TYPE=Release \ - /VK-GL-CTS -ninja - -# Copy out the mustpass lists we want from a bunch of other junk. -mkdir /deqp/mustpass -for gles in gles2 gles3 gles31; do - cp \ - /deqp/external/openglcts/modules/gl_cts/data/mustpass/gles/aosp_mustpass/3.2.5.x/$gles-master.txt \ - /deqp/mustpass/$gles-master.txt -done - -rm -rf /deqp/external -rm -rf /deqp/modules/internal -rm -rf /deqp/executor -rm -rf /deqp/execserver -rm -rf /deqp/modules/egl -rm -rf /deqp/framework -du -sh * -rm -rf /VK-GL-CTS - -############### Uninstall the build software - -apt-get purge -y \ - bison \ - cmake \ - flex \ - g++ \ - gcc \ - git \ - ninja-build - -apt-get autoremove -y --purge