149ef06a4Smrg# This is the tag of the docker image used for the build jobs. If the 249ef06a4Smrg# image doesn't exist yet, the containers stage generates it. 349ef06a4Smrg# 449ef06a4Smrg# In order to generate a new image, one should generally change the tag. 549ef06a4Smrg# While removing the image from the registry would also work, that's not 649ef06a4Smrg# recommended except for ephemeral images during development: Replacing 749ef06a4Smrg# an image after a significant amount of time might pull in newer 849ef06a4Smrg# versions of gcc/clang or other packages, which might break the build 949ef06a4Smrg# with older commits using the same tag. 1049ef06a4Smrg# 1149ef06a4Smrg# After merging a change resulting in generating a new image to the 1249ef06a4Smrg# main repository, it's recommended to remove the image from the source 1349ef06a4Smrg# repository's container registry, so that the image from the main 1449ef06a4Smrg# repository's registry will be used there as well. 15bbff01ceSmrg.templates_sha: &template_sha b61a03cabbf308e81289f7aaaf0b5a80a34ffb99 # see https://docs.gitlab.com/ee/ci/yaml/#includefile 1649ef06a4Smrg 1749ef06a4Smrginclude: 1849ef06a4Smrg - project: 'freedesktop/ci-templates' 1949ef06a4Smrg ref: *template_sha 2049ef06a4Smrg file: 2149ef06a4Smrg - '/templates/debian.yml' 2249ef06a4Smrg - '/templates/freebsd.yml' 2349ef06a4Smrg - '/templates/ci-fairy.yml' 2449ef06a4Smrg 2549ef06a4Smrgvariables: 2649ef06a4Smrg FDO_UPSTREAM_REPO: mesa/drm 2749ef06a4Smrg FDO_REPO_SUFFIX: "$BUILD_OS/$BUILD_ARCH" 2849ef06a4Smrg 2949ef06a4Smrgstages: 3049ef06a4Smrg - "Base container" 3149ef06a4Smrg - "Build" 3249ef06a4Smrg 3349ef06a4Smrg.ci-rules: 3449ef06a4Smrg rules: 3549ef06a4Smrg - when: on_success 3649ef06a4Smrg 3749ef06a4Smrg# CONTAINERS 3849ef06a4Smrg 3949ef06a4Smrg.os-debian: 4049ef06a4Smrg variables: 4149ef06a4Smrg BUILD_OS: debian 42bbff01ceSmrg FDO_DISTRIBUTION_VERSION: bookworm 4349ef06a4Smrg 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' 4449ef06a4Smrg # bump this tag every time you change something which requires rebuilding the 4549ef06a4Smrg # base image 46bbff01ceSmrg FDO_DISTRIBUTION_TAG: "2024-06-25.0" 4749ef06a4Smrg 4849ef06a4Smrg.debian-x86_64: 4949ef06a4Smrg extends: 5049ef06a4Smrg - .os-debian 5149ef06a4Smrg variables: 5249ef06a4Smrg BUILD_ARCH: "x86-64" 5349ef06a4Smrg 5449ef06a4Smrg.debian-aarch64: 5549ef06a4Smrg extends: 5649ef06a4Smrg - .os-debian 5749ef06a4Smrg variables: 5849ef06a4Smrg BUILD_ARCH: "aarch64" 5949ef06a4Smrg 6049ef06a4Smrg.debian-armv7: 6149ef06a4Smrg extends: 6249ef06a4Smrg - .os-debian 6349ef06a4Smrg variables: 6449ef06a4Smrg BUILD_ARCH: "armv7" 6549ef06a4Smrg 6649ef06a4Smrg.os-freebsd: 6749ef06a4Smrg variables: 6849ef06a4Smrg BUILD_OS: freebsd 69bbff01ceSmrg FDO_DISTRIBUTION_VERSION: "14.1" 70bbff01ceSmrg FDO_DISTRIBUTION_PACKAGES: 'meson ninja pkgconf libpciaccess py39-docutils cairo' 7149ef06a4Smrg # bump this tag every time you change something which requires rebuilding the 7249ef06a4Smrg # base image 73bbff01ceSmrg FDO_DISTRIBUTION_TAG: "2026-26-25.0" 7449ef06a4Smrg 7549ef06a4Smrg.freebsd-x86_64: 7649ef06a4Smrg extends: 7749ef06a4Smrg - .os-freebsd 7849ef06a4Smrg variables: 7949ef06a4Smrg BUILD_ARCH: "x86_64" 8049ef06a4Smrg 8149ef06a4Smrg# Build our base container image, which contains the core distribution, the 8249ef06a4Smrg# toolchain, and all our build dependencies. This will be reused in the build 8349ef06a4Smrg# stage. 8449ef06a4Smrgx86_64-debian-container_prep: 8549ef06a4Smrg extends: 8649ef06a4Smrg - .ci-rules 8749ef06a4Smrg - .debian-x86_64 8849ef06a4Smrg - .fdo.container-build@debian 8949ef06a4Smrg stage: "Base container" 9049ef06a4Smrg variables: 9149ef06a4Smrg GIT_STRATEGY: none 9249ef06a4Smrg 9349ef06a4Smrgaarch64-debian-container_prep: 9449ef06a4Smrg extends: 9549ef06a4Smrg - .ci-rules 9649ef06a4Smrg - .debian-aarch64 9749ef06a4Smrg - .fdo.container-build@debian 9849ef06a4Smrg tags: 9949ef06a4Smrg - aarch64 10049ef06a4Smrg stage: "Base container" 10149ef06a4Smrg variables: 10249ef06a4Smrg GIT_STRATEGY: none 10349ef06a4Smrg 10449ef06a4Smrgarmv7-debian-container_prep: 10549ef06a4Smrg extends: 10649ef06a4Smrg - .ci-rules 10749ef06a4Smrg - .debian-armv7 10849ef06a4Smrg - .fdo.container-build@debian 10949ef06a4Smrg tags: 11049ef06a4Smrg - aarch64 11149ef06a4Smrg stage: "Base container" 11249ef06a4Smrg variables: 11349ef06a4Smrg GIT_STRATEGY: none 11449ef06a4Smrg FDO_BASE_IMAGE: "arm32v7/debian:$FDO_DISTRIBUTION_VERSION" 11549ef06a4Smrg 11649ef06a4Smrgx86_64-freebsd-container_prep: 11749ef06a4Smrg extends: 11849ef06a4Smrg - .ci-rules 11949ef06a4Smrg - .freebsd-x86_64 12049ef06a4Smrg - .fdo.qemu-build@freebsd@x86_64 12149ef06a4Smrg stage: "Base container" 12249ef06a4Smrg variables: 12349ef06a4Smrg GIT_STRATEGY: none 12449ef06a4Smrg 12549ef06a4Smrg# Core build environment. 12649ef06a4Smrg.build-env: 12749ef06a4Smrg variables: 12849ef06a4Smrg MESON_BUILD_TYPE: "-Dbuildtype=debug -Doptimization=0 -Db_sanitize=address,undefined" 12949ef06a4Smrg 13049ef06a4Smrg# OS/architecture-specific variants 13149ef06a4Smrg.build-env-debian-x86_64: 13249ef06a4Smrg extends: 13349ef06a4Smrg - .fdo.suffixed-image@debian 13449ef06a4Smrg - .debian-x86_64 13549ef06a4Smrg - .build-env 13649ef06a4Smrg needs: 13749ef06a4Smrg - job: x86_64-debian-container_prep 13849ef06a4Smrg artifacts: false 13949ef06a4Smrg 14049ef06a4Smrg.build-env-debian-aarch64: 14149ef06a4Smrg extends: 14249ef06a4Smrg - .fdo.suffixed-image@debian 14349ef06a4Smrg - .debian-aarch64 14449ef06a4Smrg - .build-env 14549ef06a4Smrg variables: 14649ef06a4Smrg # At least with the versions we have, the LSan runtime makes fork unusably 14749ef06a4Smrg # slow on AArch64, which is bad news since the test suite decides to fork 14849ef06a4Smrg # for every single subtest. For now, in order to get AArch64 builds and 14949ef06a4Smrg # tests into CI, just assume that we're not going to leak any more on 15049ef06a4Smrg # AArch64 than we would on ARMv7 or x86-64. 15149ef06a4Smrg ASAN_OPTIONS: "detect_leaks=0" 15249ef06a4Smrg tags: 15349ef06a4Smrg - aarch64 15449ef06a4Smrg needs: 15549ef06a4Smrg - job: aarch64-debian-container_prep 15649ef06a4Smrg artifacts: false 15749ef06a4Smrg 15849ef06a4Smrg.build-env-debian-armv7: 15949ef06a4Smrg extends: 16049ef06a4Smrg - .fdo.suffixed-image@debian 16149ef06a4Smrg - .debian-armv7 16249ef06a4Smrg - .build-env 16349ef06a4Smrg tags: 16449ef06a4Smrg - aarch64 16549ef06a4Smrg needs: 16649ef06a4Smrg - job: armv7-debian-container_prep 16749ef06a4Smrg artifacts: false 16849ef06a4Smrg 16949ef06a4Smrg.build-env-freebsd-x86_64: 17049ef06a4Smrg variables: 17149ef06a4Smrg # Compiling with ASan+UBSan appears to trigger an infinite loop in the 17249ef06a4Smrg # compiler shipped with FreeBSD 13.0, so we only use UBSan here. 17349ef06a4Smrg # Additionally, sanitizers can't be used with b_lundef on FreeBSD. 17449ef06a4Smrg MESON_BUILD_TYPE: "-Dbuildtype=debug -Db_sanitize=undefined -Db_lundef=false" 17549ef06a4Smrg extends: 17649ef06a4Smrg - .fdo.suffixed-image@freebsd 17749ef06a4Smrg - .freebsd-x86_64 17849ef06a4Smrg - .build-env 17949ef06a4Smrg needs: 18049ef06a4Smrg - job: x86_64-freebsd-container_prep 18149ef06a4Smrg artifacts: false 18249ef06a4Smrg 18349ef06a4Smrg# BUILD 18449ef06a4Smrg 18549ef06a4Smrg.do-build: 18649ef06a4Smrg extends: 18749ef06a4Smrg - .ci-rules 18849ef06a4Smrg stage: "Build" 18949ef06a4Smrg variables: 19049ef06a4Smrg GIT_DEPTH: 10 19149ef06a4Smrg script: 192bbff01ceSmrg - meson setup build 193bbff01ceSmrg --fatal-meson-warnings --auto-features=enabled 19449ef06a4Smrg -D udev=true 19549ef06a4Smrg - ninja -C build 19649ef06a4Smrg - ninja -C build test 19749ef06a4Smrg - DESTDIR=$PWD/install ninja -C build install 19849ef06a4Smrg artifacts: 19949ef06a4Smrg when: on_failure 20049ef06a4Smrg paths: 20149ef06a4Smrg - build/meson-logs/* 20249ef06a4Smrg 20349ef06a4Smrg.do-build-qemu: 20449ef06a4Smrg extends: 20549ef06a4Smrg - .ci-rules 20649ef06a4Smrg stage: "Build" 20749ef06a4Smrg script: 20849ef06a4Smrg # Start the VM and copy our workspace to the VM 20949ef06a4Smrg - /app/vmctl start 21049ef06a4Smrg - scp -r $PWD "vm:" 21149ef06a4Smrg # The `set +e is needed to ensure that we always copy the meson logs back to 21249ef06a4Smrg # the workspace to see details about the failed tests. 21349ef06a4Smrg - | 21449ef06a4Smrg set +e 215bbff01ceSmrg /app/vmctl exec "pkg info; cd $CI_PROJECT_NAME ; meson setup build --fatal-meson-warnings --auto-features=enabled -D etnaviv=disabled -D nouveau=disabled -D valgrind=disabled && ninja -C build" 21649ef06a4Smrg set -ex 21749ef06a4Smrg scp -r vm:$CI_PROJECT_NAME/build/meson-logs . 21849ef06a4Smrg /app/vmctl exec "ninja -C $CI_PROJECT_NAME/build install" 21949ef06a4Smrg mkdir -p $PREFIX && scp -r vm:$PREFIX/ $PREFIX/ 22049ef06a4Smrg # Finally, shut down the VM. 22149ef06a4Smrg - /app/vmctl stop 22249ef06a4Smrg artifacts: 22349ef06a4Smrg when: on_failure 22449ef06a4Smrg paths: 22549ef06a4Smrg - build/meson-logs/* 22649ef06a4Smrg 22749ef06a4Smrg# Full build and test. 22849ef06a4Smrgx86_64-debian-build: 22949ef06a4Smrg extends: 23049ef06a4Smrg - .build-env-debian-x86_64 23149ef06a4Smrg - .do-build 23249ef06a4Smrg 23349ef06a4Smrgaarch64-debian-build: 23449ef06a4Smrg extends: 23549ef06a4Smrg - .build-env-debian-aarch64 23649ef06a4Smrg - .do-build 23749ef06a4Smrg 23849ef06a4Smrgarmv7-debian-build: 23949ef06a4Smrg extends: 24049ef06a4Smrg - .build-env-debian-armv7 24149ef06a4Smrg - .do-build 24249ef06a4Smrg 24349ef06a4Smrg# Daily build 24449ef06a4Smrgmeson-arch-daily: 24549ef06a4Smrg rules: 24649ef06a4Smrg - if: '$SCHEDULE == "arch-daily"' 24749ef06a4Smrg when: on_success 24849ef06a4Smrg - when: never 24949ef06a4Smrg image: archlinux/archlinux:base-devel 25049ef06a4Smrg before_script: 25149ef06a4Smrg - pacman -Syu --noconfirm --needed 25249ef06a4Smrg cairo 25349ef06a4Smrg cunit 25449ef06a4Smrg libatomic_ops 25549ef06a4Smrg libpciaccess 25649ef06a4Smrg meson 25749ef06a4Smrg valgrind 25849ef06a4Smrg python-docutils 25949ef06a4Smrg extends: .do-build 26049ef06a4Smrg 26149ef06a4Smrgx86_64-freebsd-build: 26249ef06a4Smrg extends: 26349ef06a4Smrg - .build-env-freebsd-x86_64 26449ef06a4Smrg - .do-build-qemu 265