mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2024-11-30 21:54:16 +08:00
c9df92bf79
The GKE pool we're using is 1-3 32-core VMs, preemptible (to keep costs down), with 8 jobs concurrent per system. We have plenty of memory (4G/core), so we run make -j8 to try to keep the cores busy even when one job is in a single-threaded step (docker image download, git clone, artifacts processing, etc.) When all jobs are generating work for all the cores, they'll be scheduled fairly. The nodes in the pool have 300GB boot disks (over-provisioned in space to provide enough iops and throughput) mounted to /ccache, and CACHE_DIR set pointing to them. This means that once a new autoscaled-up node has run some jobs, it should have a hot ccache from then on (instead of having to rely on the docker container cache having our ccache laying around and not getting wiped out by some other fd.o job). Local SSDs would provide higher performance, but unfortunately are not supported with the cluster autoscaler. For now, the softpipe/llvmpipe test runs are still on the shared runners, until I can get them ported onto Bas's runner so they can be parallelized in a single job. Reviewed-by: Michel Dänzer <mdaenzer@redhat.com>
545 lines
13 KiB
YAML
545 lines
13 KiB
YAML
# This is the tag of the docker image used for the build jobs. If the
|
|
# image doesn't exist yet, the containers stage generates it.
|
|
#
|
|
# In order to generate a new image, one should generally change the tag.
|
|
# While removing the image from the registry would also work, that's not
|
|
# recommended except for ephemeral images during development: Replacing
|
|
# an image after a significant amount of time might pull in newer
|
|
# versions of gcc/clang or other packages, which might break the build
|
|
# with older commits using the same tag.
|
|
#
|
|
# After merging a change resulting in generating a new image to the
|
|
# main repository, it's recommended to remove the image from the source
|
|
# repository's container registry, so that the image from the main
|
|
# repository's registry will be used there as well.
|
|
variables:
|
|
UPSTREAM_REPO: mesa/mesa
|
|
DEBIAN_TAG: "2019-10-30"
|
|
DEBIAN_ARM64_TAG: "arm64v8-2019-10-23"
|
|
STRETCH_TAG: "2019-09-18"
|
|
DEBIAN_VERSION: buster-slim
|
|
STRETCH_VERSION: stretch-slim
|
|
DEBIAN_IMAGE: "$CI_REGISTRY_IMAGE/debian/$DEBIAN_VERSION:$DEBIAN_TAG"
|
|
DEBIAN_ARM64_IMAGE: "$CI_REGISTRY_IMAGE/debian/$DEBIAN_VERSION:$DEBIAN_ARM64_TAG"
|
|
STRETCH_IMAGE: "$CI_REGISTRY_IMAGE/debian/$STRETCH_VERSION:$STRETCH_TAG"
|
|
|
|
include:
|
|
- project: 'wayland/ci-templates'
|
|
ref: 1f7f57c64ff4ebbf7292e3b7a13600518b8cb24c
|
|
file: '/templates/debian.yml'
|
|
|
|
include:
|
|
- local: '.gitlab-ci/lava-gitlab-ci.yml'
|
|
|
|
stages:
|
|
- container
|
|
- build
|
|
- test
|
|
|
|
|
|
# When to automatically run the CI
|
|
.ci-run-policy:
|
|
only:
|
|
refs:
|
|
- branches@mesa/mesa
|
|
- merge_requests
|
|
- /^ci([-/].*)?$/
|
|
changes:
|
|
- VERSION
|
|
- bin/**/*
|
|
# GitLab CI
|
|
- .gitlab-ci.yml
|
|
- .gitlab-ci/**/*
|
|
# Meson
|
|
- meson*
|
|
- build-support/**/*
|
|
- subprojects/**/*
|
|
# SCons
|
|
- SConstruct
|
|
- scons/**/*
|
|
- common.py
|
|
# Source code
|
|
- include/**/*
|
|
- src/**/*
|
|
retry:
|
|
max: 2
|
|
when:
|
|
- runner_system_failure
|
|
|
|
.ci-deqp-artifacts:
|
|
artifacts:
|
|
when: always
|
|
untracked: false
|
|
paths:
|
|
# Watch out! Artifacts are relative to the build dir.
|
|
# https://gitlab.com/gitlab-org/gitlab-ce/commit/8788fb925706cad594adf6917a6c5f6587dd1521
|
|
- artifacts
|
|
|
|
# Build the normal CI native and cross-build docker images.
|
|
|
|
.container:
|
|
stage: container
|
|
extends:
|
|
- .ci-run-policy
|
|
variables:
|
|
# no need to pull the whole repo to build the container image
|
|
GIT_STRATEGY: none
|
|
|
|
debian-10:amd64:
|
|
extends:
|
|
- .debian@container-ifnot-exists
|
|
- .container
|
|
variables:
|
|
DEBIAN_EXEC: 'bash .gitlab-ci/debian-install.sh'
|
|
|
|
.use-debian-10:amd64:
|
|
image: $DEBIAN_IMAGE
|
|
needs:
|
|
- debian-10:amd64
|
|
|
|
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:amd64:
|
|
image: $STRETCH_IMAGE
|
|
needs:
|
|
- debian-9:amd64
|
|
|
|
debian-10:arm64:
|
|
extends:
|
|
- .debian@container-ifnot-exists@arm64v8
|
|
- .container
|
|
variables:
|
|
DEBIAN_TAG: "$DEBIAN_ARM64_TAG"
|
|
DEBIAN_EXEC: 'bash .gitlab-ci/debian-arm64-install.sh'
|
|
|
|
|
|
# BUILD
|
|
|
|
# Shared between windows and Linux
|
|
.build-common:
|
|
extends: .ci-run-policy
|
|
stage: build
|
|
artifacts:
|
|
when: always
|
|
paths:
|
|
- _build/meson-logs/*.txt
|
|
# scons:
|
|
- build/*/config.log
|
|
- shader-db
|
|
|
|
# Just Linux
|
|
.build-linux:
|
|
extends: .build-common
|
|
tags:
|
|
- mesa-autoscale
|
|
cache:
|
|
key: ${CI_JOB_NAME}
|
|
paths:
|
|
- ccache
|
|
variables:
|
|
CCACHE_COMPILERCHECK: "content"
|
|
NINJA_FLAGS: "-j8" # autoscale is provisioned at 4 CPUs/job.
|
|
# kubernetes (the mesa-autoscale runner) always has a clean working
|
|
# dir, so we can't reuse the git clone, but that also means we don't
|
|
# need to download any extra history (normally extra history is
|
|
# needed so that a future fetch can find a shared parent).
|
|
GIT_DEPTH: 1
|
|
# Autoscale runners have 300GB of disk (since iops/throughput
|
|
# scales with disk size!), but we want to leave lots of space for
|
|
# container caching.
|
|
CCACHE_SIZE: 20G
|
|
# Use ccache transparently, and print stats before/after
|
|
before_script:
|
|
- export PATH="/usr/lib/ccache:$PATH"
|
|
- export CCACHE_BASEDIR="$PWD"
|
|
- ccache --max-size="$CCACHE_SIZE" || true
|
|
- ccache --show-stats || true
|
|
after_script:
|
|
# In case the install dir is being saved as artifacts, tar it up
|
|
# so that symlinks and hardlinks aren't each packed separately in
|
|
# the zip file.
|
|
- if [ -d install ]; then
|
|
tar -cf artifacts/install.tar install;
|
|
fi
|
|
- ccache --show-stats
|
|
|
|
.build-windows:
|
|
extends: .build-common
|
|
tags:
|
|
- mesa-windows
|
|
cache:
|
|
key: ${CI_JOB_NAME}
|
|
paths:
|
|
- subprojects/packagecache
|
|
|
|
.meson-build:
|
|
extends:
|
|
- .build-linux
|
|
- .use-debian-10:amd64
|
|
script:
|
|
- .gitlab-ci/meson-build.sh
|
|
|
|
.scons-build:
|
|
extends:
|
|
- .build-linux
|
|
- .use-debian-10:amd64
|
|
variables:
|
|
SCONSFLAGS: "-j8"
|
|
script:
|
|
- .gitlab-ci/scons-build.sh
|
|
|
|
meson-main:
|
|
extends:
|
|
- .meson-build
|
|
- .ci-deqp-artifacts
|
|
variables:
|
|
UNWIND: "true"
|
|
DRI_LOADERS: >
|
|
-D glx=dri
|
|
-D gbm=true
|
|
-D egl=true
|
|
-D platforms=x11,wayland,drm,surfaceless
|
|
DRI_DRIVERS: "i915,i965,r100,r200,nouveau"
|
|
GALLIUM_ST: >
|
|
-D dri3=true
|
|
-D gallium-extra-hud=true
|
|
-D gallium-vdpau=true
|
|
-D gallium-xvmc=true
|
|
-D gallium-omx=bellagio
|
|
-D gallium-va=true
|
|
-D gallium-xa=true
|
|
-D gallium-nine=true
|
|
-D gallium-opencl=disabled
|
|
GALLIUM_DRIVERS: "iris,nouveau,kmsro,r300,r600,freedreno,swrast,svga,v3d,vc4,virgl,etnaviv,panfrost,lima,zink"
|
|
LLVM_VERSION: "7"
|
|
EXTRA_OPTION: >
|
|
-D osmesa=gallium
|
|
-D tools=all
|
|
MESON_SHADERDB: "true"
|
|
BUILDTYPE: "debugoptimized"
|
|
|
|
.meson-cross:
|
|
extends:
|
|
- .meson-build
|
|
variables:
|
|
UNWIND: "false"
|
|
DRI_LOADERS: >
|
|
-D glx=disabled
|
|
-D gbm=false
|
|
-D egl=true
|
|
-D platforms=surfaceless
|
|
-D osmesa=none
|
|
GALLIUM_ST: >
|
|
-D dri3=false
|
|
-D gallium-vdpau=false
|
|
-D gallium-xvmc=false
|
|
-D gallium-omx=disabled
|
|
-D gallium-va=false
|
|
-D gallium-xa=false
|
|
-D gallium-nine=false
|
|
|
|
.meson-arm:
|
|
extends: .meson-cross
|
|
image: $DEBIAN_ARM64_IMAGE
|
|
variables:
|
|
VULKAN_DRIVERS: freedreno
|
|
GALLIUM_DRIVERS: "etnaviv,freedreno,kmsro,lima,nouveau,panfrost,swrast,tegra,v3d,vc4"
|
|
EXTRA_OPTION: >
|
|
-D I-love-half-baked-turnips=true
|
|
NINJA_FLAGS: "-j4"
|
|
CCACHE_DIR: "$PWD/ccache"
|
|
CCACHE_SIZE: "1500M"
|
|
needs:
|
|
- debian-10:arm64
|
|
tags:
|
|
- aarch64
|
|
|
|
meson-armhf:
|
|
extends: .meson-arm
|
|
variables:
|
|
CROSS: armhf
|
|
LLVM_VERSION: "7"
|
|
|
|
meson-arm64:
|
|
extends:
|
|
- .meson-arm
|
|
- .ci-deqp-artifacts
|
|
variables:
|
|
BUILDTYPE: "debugoptimized"
|
|
|
|
# NOTE: Building SWR is 2x (yes two) times slower than all the other
|
|
# gallium drivers combined.
|
|
# Start this early so that it doesn't limit the total run time.
|
|
#
|
|
# We also stick the glvnd build here, since we want non-glvnd in
|
|
# meson-main for actual driver CI.
|
|
meson-swr-glvnd:
|
|
extends: .meson-build
|
|
variables:
|
|
UNWIND: "true"
|
|
DRI_LOADERS: >
|
|
-D glvnd=true
|
|
-D egl=true
|
|
GALLIUM_ST: >
|
|
-D dri3=true
|
|
-D gallium-vdpau=false
|
|
-D gallium-xvmc=false
|
|
-D gallium-omx=disabled
|
|
-D gallium-va=false
|
|
-D gallium-xa=false
|
|
-D gallium-nine=false
|
|
-D gallium-opencl=disabled
|
|
GALLIUM_DRIVERS: "swr,iris"
|
|
LLVM_VERSION: "6.0"
|
|
|
|
meson-clang:
|
|
extends: .meson-build
|
|
variables:
|
|
UNWIND: "true"
|
|
DRI_DRIVERS: "auto"
|
|
GALLIUM_DRIVERS: "auto"
|
|
VULKAN_DRIVERS: intel,amd,freedreno
|
|
CC: "ccache clang-8"
|
|
CXX: "ccache clang++-8"
|
|
|
|
.meson-windows:
|
|
extends:
|
|
- .build-windows
|
|
before_script:
|
|
- $ENV:ARCH = "x86"
|
|
- $ENV:VERSION = "2019\Community"
|
|
script:
|
|
- cmd /C .gitlab-ci\meson-build.bat
|
|
|
|
scons-swr:
|
|
extends: .scons-build
|
|
variables:
|
|
SCONS_TARGET: "swr=1"
|
|
SCONS_CHECK_COMMAND: "true"
|
|
LLVM_VERSION: "6.0"
|
|
|
|
scons-win64:
|
|
extends: .scons-build
|
|
variables:
|
|
SCONS_TARGET: platform=windows machine=x86_64
|
|
SCONS_CHECK_COMMAND: "true"
|
|
|
|
meson-clover:
|
|
extends: .meson-build
|
|
variables:
|
|
UNWIND: "true"
|
|
DRI_LOADERS: >
|
|
-D glx=disabled
|
|
-D egl=false
|
|
-D gbm=false
|
|
GALLIUM_ST: >
|
|
-D dri3=false
|
|
-D gallium-vdpau=false
|
|
-D gallium-xvmc=false
|
|
-D gallium-omx=disabled
|
|
-D gallium-va=false
|
|
-D gallium-xa=false
|
|
-D gallium-nine=false
|
|
-D gallium-opencl=icd
|
|
script:
|
|
- export GALLIUM_DRIVERS="r600,radeonsi"
|
|
- .gitlab-ci/meson-build.sh
|
|
- LLVM_VERSION=8 .gitlab-ci/meson-build.sh
|
|
- export GALLIUM_DRIVERS="i915,r600"
|
|
- LLVM_VERSION=6.0 .gitlab-ci/meson-build.sh
|
|
- LLVM_VERSION=7 .gitlab-ci/meson-build.sh
|
|
|
|
meson-clover-old-llvm:
|
|
extends:
|
|
- meson-clover
|
|
- .use-debian-9:amd64
|
|
variables:
|
|
UNWIND: "false"
|
|
DRI_LOADERS: >
|
|
-D glx=disabled
|
|
-D egl=false
|
|
-D gbm=false
|
|
-D platforms=drm,surfaceless
|
|
GALLIUM_DRIVERS: "i915,r600"
|
|
script:
|
|
- LLVM_VERSION=3.9 .gitlab-ci/meson-build.sh
|
|
- LLVM_VERSION=4.0 .gitlab-ci/meson-build.sh
|
|
- LLVM_VERSION=5.0 .gitlab-ci/meson-build.sh
|
|
|
|
meson-vulkan:
|
|
extends: .meson-build
|
|
variables:
|
|
UNWIND: "false"
|
|
DRI_LOADERS: >
|
|
-D glx=disabled
|
|
-D gbm=false
|
|
-D egl=false
|
|
-D platforms=x11,wayland,drm
|
|
-D osmesa=none
|
|
GALLIUM_ST: >
|
|
-D dri3=true
|
|
-D gallium-vdpau=false
|
|
-D gallium-xvmc=false
|
|
-D gallium-omx=disabled
|
|
-D gallium-va=false
|
|
-D gallium-xa=false
|
|
-D gallium-nine=false
|
|
-D gallium-opencl=disabled
|
|
-D b_sanitize=undefined
|
|
-D c_args=-fno-sanitize-recover=all
|
|
-D cpp_args=-fno-sanitize-recover=all
|
|
UBSAN_OPTIONS: "print_stacktrace=1"
|
|
VULKAN_DRIVERS: intel,amd,freedreno
|
|
LLVM_VERSION: "8"
|
|
EXTRA_OPTION: >
|
|
-D vulkan-overlay-layer=true
|
|
|
|
# While the main point of this build is testing the i386 cross build,
|
|
# we also use this one to test some other options that are exclusive
|
|
# with meson-main's choices (classic swrast and osmesa)
|
|
meson-i386:
|
|
extends: .meson-cross
|
|
variables:
|
|
CROSS: i386
|
|
VULKAN_DRIVERS: intel
|
|
DRI_DRIVERS: "swrast"
|
|
GALLIUM_DRIVERS: "iris"
|
|
EXTRA_OPTION: >
|
|
-D vulkan-overlay-layer=true
|
|
-D llvm=false
|
|
-D osmesa=classic
|
|
|
|
meson-mingw32-x86_64:
|
|
extends: .meson-build
|
|
variables:
|
|
UNWIND: "false"
|
|
DRI_DRIVERS: ""
|
|
GALLIUM_DRIVERS: "swrast"
|
|
EXTRA_OPTION: >
|
|
-Dllvm=false
|
|
-Dosmesa=gallium
|
|
--cross-file=.gitlab-ci/x86_64-w64-mingw32
|
|
|
|
scons:
|
|
extends: .scons-build
|
|
variables:
|
|
SCONS_TARGET: "llvm=1"
|
|
SCONS_CHECK_COMMAND: "scons llvm=1 force_scons=1 check"
|
|
script:
|
|
- SCONS_TARGET="" SCONS_CHECK_COMMAND="scons check force_scons=1" .gitlab-ci/scons-build.sh
|
|
- LLVM_VERSION=6.0 .gitlab-ci/scons-build.sh
|
|
- LLVM_VERSION=7 .gitlab-ci/scons-build.sh
|
|
- LLVM_VERSION=8 .gitlab-ci/scons-build.sh
|
|
|
|
scons-old-llvm:
|
|
extends:
|
|
- scons
|
|
- .use-debian-9:amd64
|
|
script:
|
|
- LLVM_VERSION=3.9 .gitlab-ci/scons-build.sh
|
|
- LLVM_VERSION=4.0 .gitlab-ci/scons-build.sh
|
|
- LLVM_VERSION=5.0 .gitlab-ci/scons-build.sh
|
|
|
|
.test:
|
|
extends: .ci-run-policy
|
|
stage: test
|
|
variables:
|
|
GIT_STRATEGY: none # testing doesn't build anything from source
|
|
|
|
.deqp-test:
|
|
extends:
|
|
- .test
|
|
- .use-debian-10:amd64
|
|
variables:
|
|
DEQP_SKIPS: deqp-default-skips.txt
|
|
script:
|
|
# Note: Build dir (and thus install) may be dirty due to GIT_STRATEGY
|
|
- rm -rf install
|
|
- tar -xf artifacts/install.tar
|
|
- ./artifacts/deqp-runner.sh
|
|
artifacts:
|
|
when: on_failure
|
|
name: "$CI_JOB_NAME-$CI_COMMIT_REF_NAME"
|
|
paths:
|
|
- results/
|
|
dependencies:
|
|
- meson-main
|
|
needs:
|
|
- meson-main
|
|
- debian-10:amd64
|
|
|
|
test-llvmpipe-gles2:
|
|
parallel: 4
|
|
variables:
|
|
DEQP_VER: gles2
|
|
DEQP_EXPECTED_FAILS: deqp-llvmpipe-fails.txt
|
|
LIBGL_ALWAYS_SOFTWARE: "true"
|
|
DEQP_RENDERER_MATCH: "llvmpipe"
|
|
extends: .deqp-test
|
|
|
|
test-softpipe-gles2:
|
|
extends: test-llvmpipe-gles2
|
|
variables:
|
|
DEQP_EXPECTED_FAILS: deqp-softpipe-fails.txt
|
|
DEQP_RENDERER_MATCH: "softpipe"
|
|
GALLIUM_DRIVER: "softpipe"
|
|
|
|
# The GLES2 CTS run takes about 8 minutes of CPU time, while GLES3 is
|
|
# 25 minutes. Until we can get its runtime down, just do a partial
|
|
# (every 10 tests) run.
|
|
test-softpipe-gles3-limited:
|
|
variables:
|
|
DEQP_VER: gles3
|
|
DEQP_EXPECTED_FAILS: deqp-softpipe-fails.txt
|
|
LIBGL_ALWAYS_SOFTWARE: "true"
|
|
DEQP_RENDERER_MATCH: "softpipe"
|
|
GALLIUM_DRIVER: "softpipe"
|
|
CI_NODE_INDEX: 1
|
|
CI_NODE_TOTAL: 10
|
|
extends: .deqp-test
|
|
|
|
arm64_a630_gles2:
|
|
extends: .deqp-test
|
|
image: $DEBIAN_ARM64_IMAGE
|
|
variables:
|
|
DEQP_VER: gles2
|
|
DEQP_RENDERER_MATCH: "FD630"
|
|
DEQP_EXPECTED_FAILS: deqp-freedreno-a630-fails.txt
|
|
DEQP_SKIPS: deqp-freedreno-a630-skips.txt
|
|
NIR_VALIDATE: 0
|
|
tags:
|
|
- mesa-cheza
|
|
dependencies:
|
|
- meson-arm64
|
|
needs:
|
|
- meson-arm64
|
|
- debian-10:arm64
|
|
|
|
arm64_a630_gles31:
|
|
extends: arm64_a630_gles2
|
|
parallel: 4
|
|
variables:
|
|
DEQP_VER: gles31
|
|
|
|
arm64_a630_gles3:
|
|
parallel: 6
|
|
extends: arm64_a630_gles2
|
|
variables:
|
|
DEQP_VER: gles3
|
|
|
|
arm64_a306_gles2:
|
|
parallel: 4
|
|
extends: arm64_a630_gles2
|
|
variables:
|
|
DEQP_EXPECTED_FAILS: deqp-freedreno-a307-fails.txt
|
|
DEQP_SKIPS: deqp-default-skips.txt
|
|
DEQP_RENDERER_MATCH: "FD307"
|
|
tags:
|
|
- db410c
|