gitlab-ci: Use native aarch64 runner for ARM build jobs
authorMichel Dänzer <mdaenzer@redhat.com>
Tue, 8 Oct 2019 17:46:11 +0000 (19:46 +0200)
committerMichel Dänzer <michel@daenzer.net>
Tue, 22 Oct 2019 10:26:29 +0000 (10:26 +0000)
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 <eric.engestrom@intel.com> # v1
.gitlab-ci.yml
.gitlab-ci/debian-arm64-install.sh [new file with mode: 0644]
.gitlab-ci/debian-install.sh
.gitlab-ci/debian-test-install.sh [deleted file]

index 6ee6e02ca2c26b9c503ce0d99bd5a62a98dd9c6e..7cde2945b58f7fbdcf7a60f86091769b71901296 100644 (file)
@@ -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 (file)
index 0000000..1dac7b9
--- /dev/null
@@ -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
index 8a74b2877da5c391de4ad100be10fac2e8a0acb2..774b8e021283e1b36990786c3e076470716916a1 100644 (file)
@@ -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 (file)
index 85817d1..0000000
+++ /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