lib: sync i915_pciids.h with kernel
[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-01-19.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.
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         -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 man-pages=true
202         -D nouveau=true
203         -D omap=true
204         -D radeon=true
205         -D tegra=true
206         -D udev=true
207         -D valgrind=auto
208         -D vc4=true
209         -D vmwgfx=true
210     - ninja -C build
211     - ninja -C build test
212     - DESTDIR=$PWD/install ninja -C build install
213   artifacts:
214     when: on_failure
215     paths:
216       - build/meson-logs/*
217
218 .do-build-qemu:
219   extends:
220     - .ci-rules
221   stage: "Build"
222   script:
223     # Start the VM and copy our workspace to the VM
224     - /app/vmctl start
225     - scp -r $PWD "vm:"
226     # The `set +e is needed to ensure that we always copy the meson logs back to
227     # the workspace to see details about the failed tests.
228     - |
229       set +e
230       /app/vmctl exec "pkg info; cd $CI_PROJECT_NAME ; meson build -D amdgpu=true -D cairo-tests=true -D intel=true -D man-pages=true -D nouveau=false -D radeon=true -D valgrind=auto && ninja -C build"
231       set -ex
232       scp -r vm:$CI_PROJECT_NAME/build/meson-logs .
233       /app/vmctl exec "ninja -C $CI_PROJECT_NAME/build install"
234       mkdir -p $PREFIX && scp -r vm:$PREFIX/ $PREFIX/
235     # Finally, shut down the VM.
236     - /app/vmctl stop
237   artifacts:
238     when: on_failure
239     paths:
240       - build/meson-logs/*
241
242 # Full build and test.
243 x86_64-debian-build:
244   extends:
245     - .build-env-debian-x86_64
246     - .do-build
247
248 aarch64-debian-build:
249   extends:
250     - .build-env-debian-aarch64
251     - .do-build
252
253 armv7-debian-build:
254   extends:
255     - .build-env-debian-armv7
256     - .do-build
257
258 # Daily build
259 meson-arch-daily:
260   rules:
261     - if: '$SCHEDULE == "arch-daily"'
262       when: on_success
263     - when: never
264   image: archlinux/archlinux:base-devel
265   before_script:
266     - pacman -Syu --noconfirm --needed
267         cairo
268         cunit
269         libatomic_ops
270         libpciaccess
271         meson
272         valgrind
273         python-docutils
274   extends: .do-build
275
276 x86_64-freebsd-build:
277   extends:
278     - .build-env-freebsd-x86_64
279     - .do-build-qemu