1# This is the tag of the docker image used for the build jobs. If the 2# image doesn't exist yet, the containers stage generates it. 3# 4# In order to generate a new image, one should generally change the tag. 5# While removing the image from the registry would also work, that's not 6# recommended except for ephemeral images during development: Replacing 7# an image after a significant amount of time might pull in newer 8# versions of gcc/clang or other packages, which might break the build 9# with older commits using the same tag. 10# 11# After merging a change resulting in generating a new image to the 12# main repository, it's recommended to remove the image from the source 13# repository's container registry, so that the image from the main 14# repository's registry will be used there as well. 15.templates_sha: &template_sha 567700e483aabed992d0a4fea84994a0472deff6 # see https://docs.gitlab.com/ee/ci/yaml/#includefile 16 17include: 18 - project: 'freedesktop/ci-templates' 19 ref: *template_sha 20 file: 21 - '/templates/debian.yml' 22 - '/templates/freebsd.yml' 23 - '/templates/ci-fairy.yml' 24 25variables: 26 FDO_UPSTREAM_REPO: mesa/drm 27 FDO_REPO_SUFFIX: "$BUILD_OS/$BUILD_ARCH" 28 29stages: 30 - "Base container" 31 - "Build" 32 33.ci-rules: 34 rules: 35 - when: on_success 36 37# CONTAINERS 38 39.os-debian: 40 variables: 41 BUILD_OS: debian 42 FDO_DISTRIBUTION_VERSION: buster 43 FDO_DISTRIBUTION_PACKAGES: 'build-essential docbook-xsl libatomic-ops-dev libcairo2-dev libcunit1-dev libpciaccess-dev meson ninja-build pkg-config python3 python3-pip python3-wheel python3-setuptools python3-docutils valgrind' 44 FDO_DISTRIBUTION_EXEC: 'pip3 install meson==0.52.1' 45 # bump this tag every time you change something which requires rebuilding the 46 # base image 47 FDO_DISTRIBUTION_TAG: "2021-08-03.0" 48 49.debian-x86_64: 50 extends: 51 - .os-debian 52 variables: 53 BUILD_ARCH: "x86-64" 54 55.debian-aarch64: 56 extends: 57 - .os-debian 58 variables: 59 BUILD_ARCH: "aarch64" 60 61.debian-armv7: 62 extends: 63 - .os-debian 64 variables: 65 BUILD_ARCH: "armv7" 66 67.os-freebsd: 68 variables: 69 BUILD_OS: freebsd 70 FDO_DISTRIBUTION_VERSION: "13.0" 71 FDO_DISTRIBUTION_PACKAGES: 'meson ninja pkgconf libpciaccess libpthread-stubs py38-docutils cairo' 72 # bump this tag every time you change something which requires rebuilding the 73 # base image 74 FDO_DISTRIBUTION_TAG: "2021-11-10.1" 75 76.freebsd-x86_64: 77 extends: 78 - .os-freebsd 79 variables: 80 BUILD_ARCH: "x86_64" 81 82# Build our base container image, which contains the core distribution, the 83# toolchain, and all our build dependencies. This will be reused in the build 84# stage. 85x86_64-debian-container_prep: 86 extends: 87 - .ci-rules 88 - .debian-x86_64 89 - .fdo.container-build@debian 90 stage: "Base container" 91 variables: 92 GIT_STRATEGY: none 93 94aarch64-debian-container_prep: 95 extends: 96 - .ci-rules 97 - .debian-aarch64 98 - .fdo.container-build@debian 99 tags: 100 - aarch64 101 stage: "Base container" 102 variables: 103 GIT_STRATEGY: none 104 105armv7-debian-container_prep: 106 extends: 107 - .ci-rules 108 - .debian-armv7 109 - .fdo.container-build@debian 110 tags: 111 - aarch64 112 stage: "Base container" 113 variables: 114 GIT_STRATEGY: none 115 FDO_BASE_IMAGE: "arm32v7/debian:$FDO_DISTRIBUTION_VERSION" 116 117x86_64-freebsd-container_prep: 118 extends: 119 - .ci-rules 120 - .freebsd-x86_64 121 - .fdo.qemu-build@freebsd@x86_64 122 stage: "Base container" 123 variables: 124 GIT_STRATEGY: none 125 126# Core build environment. 127.build-env: 128 variables: 129 MESON_BUILD_TYPE: "-Dbuildtype=debug -Doptimization=0 -Db_sanitize=address,undefined" 130 131# OS/architecture-specific variants 132.build-env-debian-x86_64: 133 extends: 134 - .fdo.suffixed-image@debian 135 - .debian-x86_64 136 - .build-env 137 needs: 138 - job: x86_64-debian-container_prep 139 artifacts: false 140 141.build-env-debian-aarch64: 142 extends: 143 - .fdo.suffixed-image@debian 144 - .debian-aarch64 145 - .build-env 146 variables: 147 # At least with the versions we have, the LSan runtime makes fork unusably 148 # slow on AArch64, which is bad news since the test suite decides to fork 149 # for every single subtest. For now, in order to get AArch64 builds and 150 # tests into CI, just assume that we're not going to leak any more on 151 # AArch64 than we would on ARMv7 or x86-64. 152 ASAN_OPTIONS: "detect_leaks=0" 153 tags: 154 - aarch64 155 needs: 156 - job: aarch64-debian-container_prep 157 artifacts: false 158 159.build-env-debian-armv7: 160 extends: 161 - .fdo.suffixed-image@debian 162 - .debian-armv7 163 - .build-env 164 tags: 165 - aarch64 166 needs: 167 - job: armv7-debian-container_prep 168 artifacts: false 169 170.build-env-freebsd-x86_64: 171 variables: 172 # Compiling with ASan+UBSan appears to trigger an infinite loop in the 173 # compiler shipped with FreeBSD 13.0, so we only use UBSan here. 174 # Additionally, sanitizers can't be used with b_lundef on FreeBSD. 175 MESON_BUILD_TYPE: "-Dbuildtype=debug -Db_sanitize=undefined -Db_lundef=false" 176 extends: 177 - .fdo.suffixed-image@freebsd 178 - .freebsd-x86_64 179 - .build-env 180 needs: 181 - job: x86_64-freebsd-container_prep 182 artifacts: false 183 184# BUILD 185 186.do-build: 187 extends: 188 - .ci-rules 189 stage: "Build" 190 variables: 191 GIT_DEPTH: 10 192 script: 193 - meson build 194 -D amdgpu=true 195 -D cairo-tests=true 196 -D etnaviv=true 197 -D exynos=true 198 -D freedreno=true 199 -D freedreno-kgsl=true 200 -D intel=true 201 -D libkms=true 202 -D man-pages=true 203 -D nouveau=true 204 -D omap=true 205 -D radeon=true 206 -D tegra=true 207 -D udev=true 208 -D valgrind=auto 209 -D vc4=true 210 -D vmwgfx=true 211 - ninja -C build 212 - ninja -C build test 213 - DESTDIR=$PWD/install ninja -C build install 214 artifacts: 215 when: on_failure 216 paths: 217 - build/meson-logs/* 218 219.do-build-qemu: 220 extends: 221 - .ci-rules 222 stage: "Build" 223 script: 224 # Start the VM and copy our workspace to the VM 225 - /app/vmctl start 226 - scp -r $PWD "vm:" 227 # The `set +e is needed to ensure that we always copy the meson logs back to 228 # the workspace to see details about the failed tests. 229 - | 230 set +e 231 /app/vmctl exec "pkg info; cd $CI_PROJECT_NAME ; meson build -D amdgpu=true -D cairo-tests=true -D intel=true -D libkms=true -D man-pages=true -D nouveau=false -D radeon=true -D valgrind=auto && ninja -C build" 232 set -ex 233 scp -r vm:$CI_PROJECT_NAME/build/meson-logs . 234 /app/vmctl exec "ninja -C $CI_PROJECT_NAME/build install" 235 mkdir -p $PREFIX && scp -r vm:$PREFIX/ $PREFIX/ 236 # Finally, shut down the VM. 237 - /app/vmctl stop 238 artifacts: 239 when: on_failure 240 paths: 241 - build/meson-logs/* 242 243# Full build and test. 244x86_64-debian-build: 245 extends: 246 - .build-env-debian-x86_64 247 - .do-build 248 249aarch64-debian-build: 250 extends: 251 - .build-env-debian-aarch64 252 - .do-build 253 254armv7-debian-build: 255 extends: 256 - .build-env-debian-armv7 257 - .do-build 258 259# Daily build 260meson-arch-daily: 261 rules: 262 - if: '$SCHEDULE == "arch-daily"' 263 when: on_success 264 - when: never 265 image: archlinux/archlinux:base-devel 266 before_script: 267 - pacman -Syu --noconfirm --needed 268 cairo 269 cunit 270 libatomic_ops 271 libpciaccess 272 meson 273 valgrind 274 python-docutils 275 extends: .do-build 276 277x86_64-freebsd-build: 278 extends: 279 - .build-env-freebsd-x86_64 280 - .do-build-qemu 281