From 163ec5d808189f54028860e23406e6be60423028 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Michel=20D=C3=A4nzer?= Date: Tue, 8 Oct 2019 19:46:11 +0200 Subject: [PATCH] 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 --- .gitlab-ci.yml | 59 ++++++++++++---------- ...ian-test-install.sh => debian-arm64-install.sh} | 35 ++++++++----- .gitlab-ci/debian-install.sh | 6 ++- 3 files changed, 59 insertions(+), 41 deletions(-) rename .gitlab-ci/{debian-test-install.sh => debian-arm64-install.sh} (77%) 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-test-install.sh b/.gitlab-ci/debian-arm64-install.sh similarity index 77% rename from .gitlab-ci/debian-test-install.sh rename to .gitlab-ci/debian-arm64-install.sh index 85817d161f0..1dac7b99593 100644 --- a/.gitlab-ci/debian-test-install.sh +++ b/.gitlab-ci/debian-arm64-install.sh @@ -6,36 +6,49 @@ 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 \ - libelf1 \ - libexpat1 \ + 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-pip \ - python3-setuptools \ - unzip \ + python3-mako \ wget \ zlib1g-dev -export LIBDRM_VERSION=libdrm-2.4.99 +############### 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" -pip3 install meson +export LIBDRM_VERSION=libdrm-2.4.99 ############### Build libdrm @@ -96,12 +109,10 @@ rm -rf /VK-GL-CTS ############### Uninstall the build software apt-get purge -y \ - bison \ cmake \ - flex \ - g++ \ - gcc \ git \ - ninja-build + 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 -- 2.11.0