xf86drm: mark DRM_MAX_MINOR as deprecated
[platform/upstream/libdrm.git] / .gitlab-ci.yml
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
17 include:
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
25 variables:
26   FDO_UPSTREAM_REPO: mesa/drm
27   FDO_REPO_SUFFIX: "$BUILD_OS/$BUILD_ARCH"
28
29 stages:
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.53.0'
45     # bump this tag every time you change something which requires rebuilding the
46     # base image
47     FDO_DISTRIBUTION_TAG: "2022-08-22.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 py39-docutils cairo'
72     # bump this tag every time you change something which requires rebuilding the
73     # base image
74     FDO_DISTRIBUTION_TAG: "2022-08-22.0"
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.
85 x86_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
94 aarch64-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
105 armv7-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
117 x86_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         --auto-features=enabled
195         -D udev=true
196     - ninja -C build
197     - ninja -C build test
198     - DESTDIR=$PWD/install ninja -C build install
199   artifacts:
200     when: on_failure
201     paths:
202       - build/meson-logs/*
203
204 .do-build-qemu:
205   extends:
206     - .ci-rules
207   stage: "Build"
208   script:
209     # Start the VM and copy our workspace to the VM
210     - /app/vmctl start
211     - scp -r $PWD "vm:"
212     # The `set +e is needed to ensure that we always copy the meson logs back to
213     # the workspace to see details about the failed tests.
214     - |
215       set +e
216       /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"
217       set -ex
218       scp -r vm:$CI_PROJECT_NAME/build/meson-logs .
219       /app/vmctl exec "ninja -C $CI_PROJECT_NAME/build install"
220       mkdir -p $PREFIX && scp -r vm:$PREFIX/ $PREFIX/
221     # Finally, shut down the VM.
222     - /app/vmctl stop
223   artifacts:
224     when: on_failure
225     paths:
226       - build/meson-logs/*
227
228 # Full build and test.
229 x86_64-debian-build:
230   extends:
231     - .build-env-debian-x86_64
232     - .do-build
233
234 aarch64-debian-build:
235   extends:
236     - .build-env-debian-aarch64
237     - .do-build
238
239 armv7-debian-build:
240   extends:
241     - .build-env-debian-armv7
242     - .do-build
243
244 # Daily build
245 meson-arch-daily:
246   rules:
247     - if: '$SCHEDULE == "arch-daily"'
248       when: on_success
249     - when: never
250   image: archlinux/archlinux:base-devel
251   before_script:
252     - pacman -Syu --noconfirm --needed
253         cairo
254         cunit
255         libatomic_ops
256         libpciaccess
257         meson
258         valgrind
259         python-docutils
260   extends: .do-build
261
262 x86_64-freebsd-build:
263   extends:
264     - .build-env-freebsd-x86_64
265     - .do-build-qemu