# 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. .templates_sha: &template_sha 567700e483aabed992d0a4fea84994a0472deff6 # see https://docs.gitlab.com/ee/ci/yaml/#includefile include: - project: 'freedesktop/ci-templates' ref: *template_sha file: - '/templates/debian.yml' - '/templates/freebsd.yml' - '/templates/ci-fairy.yml' variables: FDO_UPSTREAM_REPO: mesa/drm FDO_REPO_SUFFIX: "$BUILD_OS/$BUILD_ARCH" stages: - "Base container" - "Build" .ci-rules: rules: - when: on_success # CONTAINERS .os-debian: variables: BUILD_OS: debian FDO_DISTRIBUTION_VERSION: buster 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' FDO_DISTRIBUTION_EXEC: 'pip3 install meson==0.53.0' # bump this tag every time you change something which requires rebuilding the # base image FDO_DISTRIBUTION_TAG: "2022-01-19.0" .debian-x86_64: extends: - .os-debian variables: BUILD_ARCH: "x86-64" .debian-aarch64: extends: - .os-debian variables: BUILD_ARCH: "aarch64" .debian-armv7: extends: - .os-debian variables: BUILD_ARCH: "armv7" .os-freebsd: variables: BUILD_OS: freebsd FDO_DISTRIBUTION_VERSION: "13.0" FDO_DISTRIBUTION_PACKAGES: 'meson ninja pkgconf libpciaccess libpthread-stubs py38-docutils cairo' # bump this tag every time you change something which requires rebuilding the # base image FDO_DISTRIBUTION_TAG: "2021-11-10.1" .freebsd-x86_64: extends: - .os-freebsd variables: BUILD_ARCH: "x86_64" # Build our base container image, which contains the core distribution, the # toolchain, and all our build dependencies. This will be reused in the build # stage. x86_64-debian-container_prep: extends: - .ci-rules - .debian-x86_64 - .fdo.container-build@debian stage: "Base container" variables: GIT_STRATEGY: none aarch64-debian-container_prep: extends: - .ci-rules - .debian-aarch64 - .fdo.container-build@debian tags: - aarch64 stage: "Base container" variables: GIT_STRATEGY: none armv7-debian-container_prep: extends: - .ci-rules - .debian-armv7 - .fdo.container-build@debian tags: - aarch64 stage: "Base container" variables: GIT_STRATEGY: none FDO_BASE_IMAGE: "arm32v7/debian:$FDO_DISTRIBUTION_VERSION" x86_64-freebsd-container_prep: extends: - .ci-rules - .freebsd-x86_64 - .fdo.qemu-build@freebsd@x86_64 stage: "Base container" variables: GIT_STRATEGY: none # Core build environment. .build-env: variables: MESON_BUILD_TYPE: "-Dbuildtype=debug -Doptimization=0 -Db_sanitize=address,undefined" # OS/architecture-specific variants .build-env-debian-x86_64: extends: - .fdo.suffixed-image@debian - .debian-x86_64 - .build-env needs: - job: x86_64-debian-container_prep artifacts: false .build-env-debian-aarch64: extends: - .fdo.suffixed-image@debian - .debian-aarch64 - .build-env variables: # At least with the versions we have, the LSan runtime makes fork unusably # slow on AArch64, which is bad news since the test suite decides to fork # for every single subtest. For now, in order to get AArch64 builds and # tests into CI, just assume that we're not going to leak any more on # AArch64 than we would on ARMv7 or x86-64. ASAN_OPTIONS: "detect_leaks=0" tags: - aarch64 needs: - job: aarch64-debian-container_prep artifacts: false .build-env-debian-armv7: extends: - .fdo.suffixed-image@debian - .debian-armv7 - .build-env tags: - aarch64 needs: - job: armv7-debian-container_prep artifacts: false .build-env-freebsd-x86_64: variables: # Compiling with ASan+UBSan appears to trigger an infinite loop in the # compiler shipped with FreeBSD 13.0, so we only use UBSan here. # Additionally, sanitizers can't be used with b_lundef on FreeBSD. MESON_BUILD_TYPE: "-Dbuildtype=debug -Db_sanitize=undefined -Db_lundef=false" extends: - .fdo.suffixed-image@freebsd - .freebsd-x86_64 - .build-env needs: - job: x86_64-freebsd-container_prep artifacts: false # BUILD .do-build: extends: - .ci-rules stage: "Build" variables: GIT_DEPTH: 10 script: - meson build -D amdgpu=true -D cairo-tests=true -D etnaviv=true -D exynos=true -D freedreno=true -D freedreno-kgsl=true -D intel=true -D libkms=true -D man-pages=true -D nouveau=true -D omap=true -D radeon=true -D tegra=true -D udev=true -D valgrind=auto -D vc4=true -D vmwgfx=true - ninja -C build - ninja -C build test - DESTDIR=$PWD/install ninja -C build install artifacts: when: on_failure paths: - build/meson-logs/* .do-build-qemu: extends: - .ci-rules stage: "Build" script: # Start the VM and copy our workspace to the VM - /app/vmctl start - scp -r $PWD "vm:" # The `set +e is needed to ensure that we always copy the meson logs back to # the workspace to see details about the failed tests. - | set +e /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" set -ex scp -r vm:$CI_PROJECT_NAME/build/meson-logs . /app/vmctl exec "ninja -C $CI_PROJECT_NAME/build install" mkdir -p $PREFIX && scp -r vm:$PREFIX/ $PREFIX/ # Finally, shut down the VM. - /app/vmctl stop artifacts: when: on_failure paths: - build/meson-logs/* # Full build and test. x86_64-debian-build: extends: - .build-env-debian-x86_64 - .do-build aarch64-debian-build: extends: - .build-env-debian-aarch64 - .do-build armv7-debian-build: extends: - .build-env-debian-armv7 - .do-build # Daily build meson-arch-daily: rules: - if: '$SCHEDULE == "arch-daily"' when: on_success - when: never image: archlinux/archlinux:base-devel before_script: - pacman -Syu --noconfirm --needed cairo cunit libatomic_ops libpciaccess meson valgrind python-docutils extends: .do-build x86_64-freebsd-build: extends: - .build-env-freebsd-x86_64 - .do-build-qemu