1.build-tmpl: &build
2  stage: build
3  image: ${XEN_REGISTRY}/${CONTAINER}
4  script:
5    - ./automation/scripts/build 2>&1 | tee build.log
6  artifacts:
7    paths:
8      - binaries/
9      - xen-config
10      - xen-cppcheck.txt
11      - '*.log'
12      - '*/*.log'
13    when: always
14  needs: []
15  rules:
16  - if: $SELECTED_JOBS_ONLY && $CI_JOB_NAME =~ $SELECTED_JOBS_ONLY
17    when: always
18  - if: $SELECTED_JOBS_ONLY
19    when: never
20  - when: on_success
21
22.gcc-tmpl:
23  variables: &gcc
24    CC: gcc
25    CXX: g++
26
27.clang-tmpl:
28  variables: &clang
29    CC: clang
30    CXX: clang++
31    clang: y
32
33.x86-64-build-tmpl:
34  <<: *build
35  variables:
36    XEN_TARGET_ARCH: x86_64
37  tags:
38    - x86_64
39
40.x86-64-build:
41  extends: .x86-64-build-tmpl
42  variables:
43    debug: n
44
45.x86-64-build-debug:
46  extends: .x86-64-build-tmpl
47  variables:
48    debug: y
49
50.x86-32-build-tmpl:
51  <<: *build
52  variables:
53    XEN_TARGET_ARCH: x86_32
54  tags:
55    - x86_32
56
57.x86-32-build:
58  extends: .x86-32-build-tmpl
59  variables:
60    debug: n
61
62.x86-32-build-debug:
63  extends: .x86-32-build-tmpl
64  variables:
65    debug: y
66
67.gcc-x86-64-build:
68  extends: .x86-64-build
69  variables:
70    <<: *gcc
71
72.gcc-x86-64-build-debug:
73  extends: .x86-64-build-debug
74  variables:
75    <<: *gcc
76
77.gcc-x86-32-build:
78  extends: .x86-32-build
79  variables:
80    <<: *gcc
81
82.gcc-x86-32-build-debug:
83  extends: .x86-32-build-debug
84  variables:
85    <<: *gcc
86
87.clang-x86-64-build:
88  extends: .x86-64-build
89  variables:
90    <<: *clang
91
92.clang-x86-64-build-debug:
93  extends: .x86-64-build-debug
94  variables:
95    <<: *clang
96
97.clang-x86-32-build:
98  extends: .x86-32-build
99  variables:
100    <<: *clang
101
102.clang-x86-32-build-debug:
103  extends: .x86-32-build-debug
104  variables:
105    <<: *clang
106
107.arm32-cross-build-tmpl:
108  <<: *build
109  variables:
110    XEN_TARGET_ARCH: arm32
111  tags:
112    - arm64
113
114.arm32-cross-build:
115  extends: .arm32-cross-build-tmpl
116  variables:
117    debug: n
118
119.arm32-cross-build-debug:
120  extends: .arm32-cross-build-tmpl
121  variables:
122    debug: y
123
124.gcc-arm32-cross-build:
125  extends: .arm32-cross-build
126  variables:
127    <<: *gcc
128
129.gcc-arm32-cross-build-debug:
130  extends: .arm32-cross-build-debug
131  variables:
132    <<: *gcc
133
134.arm64-build-tmpl:
135  <<: *build
136  variables:
137    XEN_TARGET_ARCH: arm64
138  tags:
139    - arm64
140
141.arm64-build:
142  extends: .arm64-build-tmpl
143  variables:
144    debug: n
145
146.arm64-build-debug:
147  extends: .arm64-build-tmpl
148  variables:
149    debug: y
150
151.gcc-arm64-build:
152  extends: .arm64-build
153  variables:
154    <<: *gcc
155
156.gcc-arm64-build-debug:
157  extends: .arm64-build-debug
158  variables:
159    <<: *gcc
160
161.riscv64-cross-build-tmpl:
162  <<: *build
163  variables:
164    XEN_TARGET_ARCH: riscv64
165  tags:
166    - x86_64
167
168.riscv64-cross-build:
169  extends: .riscv64-cross-build-tmpl
170  variables:
171    debug: n
172
173.riscv64-cross-build-debug:
174  extends: .riscv64-cross-build-tmpl
175  variables:
176    debug: y
177
178.gcc-riscv64-cross-build:
179  extends: .riscv64-cross-build
180  variables:
181    <<: *gcc
182
183.gcc-riscv64-cross-build-debug:
184  extends: .riscv64-cross-build-debug
185  variables:
186    <<: *gcc
187
188.ppc64le-cross-build-tmpl:
189  <<: *build
190  variables:
191    XEN_TARGET_ARCH: ppc64
192  tags:
193    - x86_64
194
195.ppc64le-cross-build:
196  extends: .ppc64le-cross-build-tmpl
197  variables:
198    debug: n
199
200.ppc64le-cross-build-debug:
201  extends: .ppc64le-cross-build-tmpl
202  variables:
203    debug: y
204
205.gcc-ppc64le-cross-build:
206  extends: .ppc64le-cross-build
207  variables:
208    <<: *gcc
209
210.gcc-ppc64le-cross-build-debug:
211  extends: .ppc64le-cross-build-debug
212  variables:
213    <<: *gcc
214
215.yocto-test:
216  stage: build
217  image: ${XEN_REGISTRY}/${CONTAINER}
218  script:
219    - ./automation/build/yocto/build-yocto.sh -v --log-dir=./logs --xen-dir=`pwd` ${YOCTO_BOARD} ${YOCTO_OUTPUT}
220  variables:
221    YOCTO_VERSION: scarthgap
222    CONTAINER: yocto:${YOCTO_VERSION}-${YOCTO_BOARD}${YOCTO_HOST}
223  artifacts:
224    paths:
225      - 'logs/*'
226      - binaries/
227    when: always
228  needs: []
229
230.yocto-test-arm64:
231  extends: .yocto-test
232  variables:
233    YOCTO_HOST: -arm64v8
234  tags:
235    - arm64
236
237.yocto-test-x86-64:
238  extends: .yocto-test
239  tags:
240    - x86_64
241
242.x86-64-cross-build-tmpl:
243  <<: *build
244  variables:
245    XEN_TARGET_ARCH: x86_64
246  tags:
247    - arm64
248
249.x86-64-cross-build:
250  extends: .x86-64-cross-build-tmpl
251  variables:
252    debug: n
253
254.gcc-x86-64-cross-build:
255  extends: .x86-64-cross-build
256  variables:
257    <<: *gcc
258
259## Test artifacts common
260
261.test-jobs-artifact-common:
262  stage: build
263  needs: []
264
265# Arm test artifacts
266
267qemu-system-aarch64-6.0.0-arm64-export:
268  extends: .test-jobs-artifact-common
269  image: registry.gitlab.com/xen-project/xen/tests-artifacts/qemu-system-aarch64:6.0.0-arm64v8
270  script:
271    - mkdir binaries && cp /qemu-system-aarch64 binaries/qemu-system-aarch64
272  artifacts:
273    paths:
274      - binaries/qemu-system-aarch64
275  tags:
276    - arm64
277
278qemu-system-aarch64-6.0.0-arm32-export:
279  extends: .test-jobs-artifact-common
280  image: registry.gitlab.com/xen-project/xen/tests-artifacts/qemu-system-aarch64:6.0.0-arm64v8
281  script:
282    - mkdir binaries && cp /qemu-system-arm binaries/qemu-system-arm
283  artifacts:
284    paths:
285      - binaries/qemu-system-arm
286  tags:
287    - arm64
288
289# Jobs below this line
290
291# Build jobs needed for tests
292
293alpine-3.18-gcc:
294  extends: .gcc-x86-64-build
295  variables:
296    CONTAINER: alpine:3.18
297
298alpine-3.18-gcc-debug:
299  extends: .gcc-x86-64-build-debug
300  variables:
301    CONTAINER: alpine:3.18
302    BUILD_QEMU_XEN: y
303    EXTRA_XEN_CONFIG: |
304      CONFIG_EXPERT=y
305      CONFIG_UNSUPPORTED=y
306      CONFIG_ARGO=y
307      CONFIG_UBSAN=y
308      CONFIG_UBSAN_FATAL=y
309      CONFIG_UCODE_SCAN_DEFAULT=y
310      CONFIG_XHCI=y
311
312debian-12-x86_64-gcc-debug:
313  extends: .gcc-x86-64-build-debug
314  variables:
315    CONTAINER: debian:12-x86_64
316
317debian-12-x86_64-clang-debug:
318  extends: .clang-x86-64-build-debug
319  variables:
320    CONTAINER: debian:12-x86_64
321
322debian-12-ppc64le-gcc-debug:
323  extends: .gcc-ppc64le-cross-build-debug
324  variables:
325    CONTAINER: debian:12-ppc64le
326    KBUILD_DEFCONFIG: ppc64_defconfig
327    HYPERVISOR_ONLY: y
328    EXTRA_XEN_CONFIG: |
329      CONFIG_UBSAN=y
330      CONFIG_UBSAN_FATAL=y
331
332debian-12-riscv64-gcc-debug:
333  extends: .gcc-riscv64-cross-build-debug
334  variables:
335    CONTAINER: debian:12-riscv64
336    KBUILD_DEFCONFIG: tiny64_defconfig
337    HYPERVISOR_ONLY: y
338    EXTRA_XEN_CONFIG: |
339      CONFIG_UBSAN=y
340      CONFIG_UBSAN_FATAL=y
341
342# Arm32 cross-build
343
344debian-bookworm-gcc-arm32:
345  extends: .gcc-arm32-cross-build
346  variables:
347    CONTAINER: debian:bookworm-arm64v8-arm32-gcc
348    HYPERVISOR_ONLY: y
349
350debian-bookworm-gcc-arm32-debug:
351  extends: .gcc-arm32-cross-build-debug
352  variables:
353    CONTAINER: debian:bookworm-arm64v8-arm32-gcc
354    HYPERVISOR_ONLY: y
355
356debian-bookworm-gcc-arm32-randconfig:
357  extends: .gcc-arm32-cross-build
358  variables:
359    CONTAINER: debian:bookworm-arm64v8-arm32-gcc
360    HYPERVISOR_ONLY: y
361    RANDCONFIG: y
362
363debian-bookworm-gcc-arm32-debug-staticmem:
364  extends: .gcc-arm32-cross-build-debug
365  variables:
366    CONTAINER: debian:bookworm-arm64v8-arm32-gcc
367    HYPERVISOR_ONLY: y
368    EXTRA_XEN_CONFIG: |
369      CONFIG_EXPERT=y
370      CONFIG_UNSUPPORTED=y
371      CONFIG_STATIC_MEMORY=y
372
373debian-bookworm-gcc-arm32-debug-earlyprintk:
374  extends: .gcc-arm32-cross-build-debug
375  variables:
376    CONTAINER: debian:bookworm-arm64v8-arm32-gcc
377    HYPERVISOR_ONLY: y
378    EXTRA_XEN_CONFIG: |
379      CONFIG_EARLY_UART_CHOICE_PL011=y
380      CONFIG_EARLY_UART_BASE_ADDRESS=0x9000000
381
382debian-bookworm-gcc-arm32-debug-mpu:
383  extends: .gcc-arm32-cross-build-debug
384  variables:
385    CONTAINER: debian:bookworm-arm64v8-arm32-gcc
386    HYPERVISOR_ONLY: y
387    EXTRA_XEN_CONFIG: |
388      CONFIG_XEN_START_ADDRESS=0x0
389      CONFIG_MPU=y
390      CONFIG_UNSUPPORTED=y
391
392# Arm builds
393
394debian-bookworm-gcc-arm64:
395  extends: .gcc-arm64-build
396  variables:
397    CONTAINER: debian:bookworm-arm64v8
398
399debian-bookworm-gcc-debug-arm64:
400  extends: .gcc-arm64-build-debug
401  variables:
402    CONTAINER: debian:bookworm-arm64v8
403
404alpine-3.18-gcc-arm64:
405  extends: .gcc-arm64-build
406  variables:
407    CONTAINER: alpine:3.18-arm64v8
408
409alpine-3.18-gcc-debug-arm64:
410  extends: .gcc-arm64-build-debug
411  variables:
412    CONTAINER: alpine:3.18-arm64v8
413    EXTRA_XEN_CONFIG: |
414      CONFIG_UBSAN=y
415      CONFIG_UBSAN_FATAL=y
416
417alpine-3.18-gcc-arm64-randconfig:
418  extends: .gcc-arm64-build
419  variables:
420    CONTAINER: alpine:3.18-arm64v8
421    RANDCONFIG: y
422
423alpine-3.18-gcc-debug-arm64-staticmem:
424  extends: .gcc-arm64-build-debug
425  variables:
426    CONTAINER: alpine:3.18-arm64v8
427    EXTRA_XEN_CONFIG: |
428      CONFIG_EXPERT=y
429      CONFIG_UNSUPPORTED=y
430      CONFIG_STATIC_MEMORY=y
431
432alpine-3.18-gcc-debug-arm64-static-shared-mem:
433  extends: .gcc-arm64-build-debug
434  variables:
435    CONTAINER: alpine:3.18-arm64v8
436    EXTRA_XEN_CONFIG: |
437      CONFIG_UNSUPPORTED=y
438      CONFIG_STATIC_MEMORY=y
439      CONFIG_STATIC_SHM=y
440
441alpine-3.18-gcc-debug-arm64-boot-cpupools:
442  extends: .gcc-arm64-build-debug
443  variables:
444    CONTAINER: alpine:3.18-arm64v8
445    EXTRA_XEN_CONFIG: |
446      CONFIG_BOOT_TIME_CPUPOOLS=y
447
448alpine-3.18-gcc-debug-arm64-earlyprintk:
449  extends: .gcc-arm64-build-debug
450  variables:
451    CONTAINER: alpine:3.18-arm64v8
452    EXTRA_XEN_CONFIG: |
453      CONFIG_EARLY_UART_CHOICE_PL011=y
454      CONFIG_EARLY_UART_BASE_ADDRESS=0x9000000
455
456alpine-3.18-gcc-debug-arm64-mpu:
457  extends: .gcc-arm64-build-debug
458  variables:
459    CONTAINER: alpine:3.18-arm64v8
460    HYPERVISOR_ONLY: y
461    EXTRA_XEN_CONFIG: |
462      CONFIG_XEN_START_ADDRESS=0x0
463      CONFIG_MPU=y
464      CONFIG_UNSUPPORTED=y
465
466# Yocto test jobs
467yocto-qemuarm64:
468  extends: .yocto-test-arm64
469  variables:
470    YOCTO_BOARD: qemuarm64
471  when: manual
472
473yocto-qemuarm:
474  extends: .yocto-test-arm64
475  variables:
476    YOCTO_BOARD: qemuarm
477    YOCTO_OUTPUT: --copy-output
478  when: manual
479
480yocto-qemux86-64:
481  extends: .yocto-test-x86-64
482  variables:
483    YOCTO_BOARD: qemux86-64
484  when: manual
485
486# Cppcheck analysis jobs
487
488debian-bookworm-gcc-cppcheck:
489  extends: .gcc-x86-64-cross-build
490  variables:
491    CONTAINER: debian:bookworm-cppcheck
492    CROSS_COMPILE: /usr/bin/x86_64-linux-gnu-
493    CPPCHECK: y
494    HYPERVISOR_ONLY: y
495
496debian-bookworm-gcc-arm32-cppcheck:
497  extends: .gcc-arm32-cross-build
498  variables:
499    CONTAINER: debian:bookworm-cppcheck
500    CROSS_COMPILE: /usr/bin/arm-linux-gnueabihf-
501    CPPCHECK: y
502    HYPERVISOR_ONLY: y
503
504debian-bookworm-gcc-arm64-cppcheck:
505  extends: .gcc-arm64-build
506  variables:
507    CONTAINER: debian:bookworm-cppcheck
508    CPPCHECK: y
509    HYPERVISOR_ONLY: y
510
511# Build jobs not needed for tests
512
513alpine-3.18-clang:
514  extends: .clang-x86-64-build
515  variables:
516    CONTAINER: alpine:3.18
517
518alpine-3.18-clang-debug:
519  extends: .clang-x86-64-build-debug
520  variables:
521    CONTAINER: alpine:3.18
522
523archlinux-gcc:
524  extends: .gcc-x86-64-build
525  variables:
526    CONTAINER: archlinux:current
527  allow_failure: true
528
529archlinux-gcc-debug:
530  extends: .gcc-x86-64-build-debug
531  variables:
532    CONTAINER: archlinux:current
533  allow_failure: true
534
535debian-12-x86_64-gcc-ibt:
536  extends: .gcc-x86-64-build
537  variables:
538    CONTAINER: debian:12-x86_64-gcc-ibt
539    RANDCONFIG: y
540    EXTRA_FIXED_RANDCONFIG: |
541      CONFIG_XEN_IBT=y
542
543debian-12-x86_64-clang:
544  extends: .clang-x86-64-build
545  variables:
546    CONTAINER: debian:12-x86_64
547
548debian-12-x86_64-clang-randconfig:
549  extends: .clang-x86-64-build
550  variables:
551    CONTAINER: debian:12-x86_64
552    RANDCONFIG: y
553    EXTRA_FIXED_RANDCONFIG: |
554      CONFIG_COVERAGE=n # Disable coverage otherwise build times out.
555
556debian-12-x86_64-gcc:
557  extends: .gcc-x86-64-build
558  variables:
559    CONTAINER: debian:12-x86_64
560
561debian-12-x86_64-gcc-randconfig:
562  extends: .gcc-x86-64-build
563  variables:
564    CONTAINER: debian:12-x86_64
565    RANDCONFIG: y
566
567debian-12-x86_32-clang-debug:
568  extends: .clang-x86-32-build-debug
569  variables:
570    CONTAINER: debian:12-x86_32
571
572debian-12-x86_32-gcc-debug:
573  extends: .gcc-x86-32-build-debug
574  variables:
575    CONTAINER: debian:12-x86_32
576
577fedora-41-x86_64-gcc:
578  extends: .gcc-x86-64-build
579  variables:
580    CONTAINER: fedora:41-x86_64
581
582fedora-41-x86_64-gcc-debug:
583  extends: .gcc-x86-64-build-debug
584  variables:
585    CONTAINER: fedora:41-x86_64
586
587ubuntu-16.04-x86_64-gcc:
588  extends: .gcc-x86-64-build
589  variables:
590    CONTAINER: ubuntu:16.04-x86_64
591
592ubuntu-16.04-x86_64-gcc-debug:
593  extends: .gcc-x86-64-build-debug
594  variables:
595    CONTAINER: ubuntu:16.04-x86_64
596
597ubuntu-18.04-x86_64-gcc:
598  extends: .gcc-x86-64-build
599  variables:
600    CONTAINER: ubuntu:18.04-x86_64
601
602ubuntu-20.04-x86_64-gcc:
603  extends: .gcc-x86-64-build
604  variables:
605    CONTAINER: ubuntu:20.04-x86_64
606
607ubuntu-22.04-x86_64-clang:
608  extends: .clang-x86-64-build
609  variables:
610    CONTAINER: ubuntu:22.04-x86_64
611
612ubuntu-22.04-x86_64-clang-debug:
613  extends: .clang-x86-64-build-debug
614  variables:
615    CONTAINER: ubuntu:22.04-x86_64
616
617ubuntu-22.04-x86_64-gcc:
618  extends: .gcc-x86-64-build
619  variables:
620    CONTAINER: ubuntu:22.04-x86_64
621
622ubuntu-24.04-x86_64-clang:
623  extends: .clang-x86-64-build
624  variables:
625    CONTAINER: ubuntu:24.04-x86_64
626
627ubuntu-24.04-x86_64-clang-debug:
628  extends: .clang-x86-64-build-debug
629  variables:
630    CONTAINER: ubuntu:24.04-x86_64
631
632ubuntu-24.04-x86_64-gcc:
633  extends: .gcc-x86-64-build
634  variables:
635    CONTAINER: ubuntu:24.04-x86_64
636
637ubuntu-24.04-x86_64-gcc-debug:
638  extends: .gcc-x86-64-build-debug
639  variables:
640    CONTAINER: ubuntu:24.04-x86_64
641
642opensuse-leap-15.6-clang:
643  extends: .clang-x86-64-build
644  variables:
645    CONTAINER: opensuse:leap-15.6-x86_64
646
647opensuse-leap-15.6-clang-debug:
648  extends: .clang-x86-64-build-debug
649  variables:
650    CONTAINER: opensuse:leap-15.6-x86_64
651
652opensuse-leap-15.6-gcc:
653  extends: .gcc-x86-64-build
654  variables:
655    CONTAINER: opensuse:leap-15.6-x86_64
656
657opensuse-leap-15.6-gcc-debug:
658  extends: .gcc-x86-64-build-debug
659  variables:
660    CONTAINER: opensuse:leap-15.6-x86_64
661
662opensuse-tumbleweed-clang:
663  extends: .clang-x86-64-build
664  variables:
665    CONTAINER: opensuse:tumbleweed-x86_64
666  allow_failure: true
667
668opensuse-tumbleweed-clang-debug:
669  extends: .clang-x86-64-build-debug
670  variables:
671    CONTAINER: opensuse:tumbleweed-x86_64
672  allow_failure: true
673
674opensuse-tumbleweed-gcc:
675  extends: .gcc-x86-64-build
676  variables:
677    CONTAINER: opensuse:tumbleweed-x86_64
678  allow_failure: true
679
680opensuse-tumbleweed-gcc-debug:
681  extends: .gcc-x86-64-build-debug
682  variables:
683    CONTAINER: opensuse:tumbleweed-x86_64
684  allow_failure: true
685
686# PowerPC builds (x86 cross)
687debian-11-ppc64le-gcc:
688  extends: .gcc-ppc64le-cross-build
689  variables:
690    CONTAINER: debian:11-ppc64le
691    KBUILD_DEFCONFIG: ppc64_defconfig
692    HYPERVISOR_ONLY: y
693
694debian-11-ppc64le-gcc-debug:
695  extends: .gcc-ppc64le-cross-build-debug
696  variables:
697    CONTAINER: debian:11-ppc64le
698    KBUILD_DEFCONFIG: ppc64_defconfig
699    HYPERVISOR_ONLY: y
700
701debian-12-ppc64le-gcc:
702  extends: .gcc-ppc64le-cross-build
703  variables:
704    CONTAINER: debian:12-ppc64le
705    KBUILD_DEFCONFIG: ppc64_defconfig
706    HYPERVISOR_ONLY: y
707
708# RISC-V 64 cross-build
709debian-12-riscv64-gcc:
710  extends: .gcc-riscv64-cross-build
711  variables:
712    CONTAINER: debian:12-riscv64
713    KBUILD_DEFCONFIG: tiny64_defconfig
714    HYPERVISOR_ONLY: y
715
716.riscv-fixed-randconfig:
717  variables: &riscv-fixed-randconfig
718    EXTRA_FIXED_RANDCONFIG: |
719      CONFIG_BOOT_TIME_CPUPOOLS=n
720      CONFIG_COVERAGE=n
721      CONFIG_EXPERT=y
722      CONFIG_GRANT_TABLE=n
723      CONFIG_LIVEPATCH=n
724      CONFIG_QEMU_PLATFORM=y
725      CONFIG_VM_EVENT=n
726      CONFIG_XSM=n
727
728debian-12-riscv64-gcc-randconfig:
729  extends: .gcc-riscv64-cross-build
730  variables:
731    CONTAINER: debian:12-riscv64
732    KBUILD_DEFCONFIG: tiny64_defconfig
733    RANDCONFIG: y
734    <<: *riscv-fixed-randconfig
735