X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=.gitlab-ci.yml;h=6e8655faaacaaddacf94ef084039ef497ea3668a;hb=6d9645bb3b7b6fa206aaa6e7bf4c8fe86efccb83;hp=fe9b47ddd5a4b81ccfa3018905fd5e9f5090580a;hpb=946fa21966698c456d19de8a21afacce4d2ddf87;p=platform%2Fupstream%2Flibdrm.git diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index fe9b47d..6e8655f 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,159 +1,265 @@ -.artifacts-meson: &artifacts-meson - when: always - paths: - - _build/meson-logs - -.artifacts-autotools: &artifacts-autotools - when: always - paths: - - _build/*.log - - _build/*/*.log - - _build/*/*/*.log - -.meson-build: &meson-build - - 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=true - -D vc4=true - -D vmwgfx=true - - ninja -C _build - - ninja -C _build test - -.autotools-build: &autotools-build - - mkdir _build - - cd _build - - ../autogen.sh - --enable-udev - --enable-libkms - --enable-intel - --enable-radeon - --enable-admgpu - --enable-nouveau - --enable-vmwfgx - --enable-omap-experimental-api - --enable-exynos-experimental-api - --enable-freedreno - --enable-freedreno-kgsl - --enable-tegra-experimental-api - --enable-vc4 - --enable-etnaviv-experimental-api - - make - - make check - -latest-meson: - stage: build - image: base/archlinux:latest - before_script: - - pacman -Syu --noconfirm --needed - base-devel - meson - libpciaccess - libxslt docbook-xsl - valgrind - libatomic_ops - cairo cunit - script: *meson-build +# 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.59.0' + # bump this tag every time you change something which requires rebuilding the + # base image + FDO_DISTRIBUTION_TAG: "2023-09-01.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.2" + FDO_DISTRIBUTION_PACKAGES: 'meson ninja pkgconf libpciaccess py39-docutils cairo' + # bump this tag every time you change something which requires rebuilding the + # base image + FDO_DISTRIBUTION_TAG: "2023-07-20.0" + +.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" -latest-autotools: - stage: build - image: base/archlinux:latest - artifacts: *artifacts-autotools +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 + --auto-features=enabled + -D udev=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 --auto-features=enabled -D etnaviv=disabled -D nouveau=disabled -D valgrind=disabled && 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 - base-devel - libpciaccess - libxslt docbook-xsl - valgrind + cairo + cunit libatomic_ops - cairo cunit - xorg-util-macros - git # autogen.sh depends on git - script: *autotools-build - -oldest-meson: - stage: build - image: debian:stable - artifacts: *artifacts-meson - before_script: - - printf > /etc/dpkg/dpkg.cfg.d/99-exclude-cruft "%s\n" - 'path-exclude=/usr/share/doc/*' - 'path-exclude=/usr/share/man/*' - - printf > /usr/sbin/policy-rc.d "%s\n" - '#!/bin/sh' - 'exit 101' - - chmod +x /usr/sbin/policy-rc.d - - apt-get update - - apt-get -y --no-install-recommends install - build-essential - pkg-config - xsltproc - libxslt1-dev docbook-xsl - valgrind - libatomic-ops-dev - libcairo2-dev libcunit1-dev - ninja-build - python3 python3-pip - wget - # We need `--no-check-certificate` here because Debian's CA list is - # too old to know about LetsEncrypt's CA, so it refuses to connect - # to FreeDesktop.org - - LIBPCIACCESS_VERSION=libpciaccess-0.10 && - wget --no-check-certificate https://xorg.freedesktop.org/releases/individual/lib/$LIBPCIACCESS_VERSION.tar.bz2 && - tar -jxvf $LIBPCIACCESS_VERSION.tar.bz2 && - (cd $LIBPCIACCESS_VERSION && ./configure --prefix=$HOME/prefix && make install) - - pip3 install wheel setuptools - - pip3 install meson==0.43 - - export PKG_CONFIG_PATH=$HOME/prefix/lib/pkgconfig:$HOME/prefix/share/pkgconfig - - export LD_LIBRARY_PATH="$HOME/prefix/lib:$LD_LIBRARY_PATH" - script: *meson-build - -oldest-autotools: - stage: build - image: debian:stable - artifacts: *artifacts-autotools - before_script: - - printf > /etc/dpkg/dpkg.cfg.d/99-exclude-cruft "%s\n" - 'path-exclude=/usr/share/doc/*' - 'path-exclude=/usr/share/man/*' - - printf > /usr/sbin/policy-rc.d "%s\n" - '#!/bin/sh' - 'exit 101' - - chmod +x /usr/sbin/policy-rc.d - - apt-get update - - apt-get -y --no-install-recommends install - build-essential - automake - autoconf - libtool - pkg-config - xsltproc - libxslt1-dev docbook-xsl + libpciaccess + meson valgrind - libatomic-ops-dev - libcairo2-dev libcunit1-dev - wget - xutils-dev - git # autogen.sh depends on git - # We need `--no-check-certificate` here because Debian's CA list is - # too old to know about LetsEncrypt's CA, so it refuses to connect - # to FreeDesktop.org - - LIBPCIACCESS_VERSION=libpciaccess-0.10 && - wget --no-check-certificate https://xorg.freedesktop.org/releases/individual/lib/$LIBPCIACCESS_VERSION.tar.bz2 && - tar -jxvf $LIBPCIACCESS_VERSION.tar.bz2 && - (cd $LIBPCIACCESS_VERSION && ./configure --prefix=$HOME/prefix && make install) - - export PKG_CONFIG_PATH=$HOME/prefix/lib/pkgconfig:$HOME/prefix/share/pkgconfig - - export LD_LIBRARY_PATH="$HOME/prefix/lib:$LD_LIBRARY_PATH" - script: *autotools-build + python-docutils + extends: .do-build + +x86_64-freebsd-build: + extends: + - .build-env-freebsd-x86_64 + - .do-build-qemu