Misc build and test fixes:

- force NOUSER for base docker images
   - don't run TCG VM tests by default
   - remove useless meson test
   - add Centos 8 custom runner
   - split up custom-runners to individual files
   - skip cirrus checks on master/stable branches
 -----BEGIN PGP SIGNATURE-----
 
 iQEzBAABCgAdFiEEZoWumedRZ7yvyN81+9DbCVqeKkQFAmGT2rEACgkQ+9DbCVqe
 KkTVxQf/UtEEoDMawycd37Z4cOE2SlS4FZYhvysToYcP8ltPQo6pWmA8bfqIlkFw
 6+d5b5u2n7jQslnsEEavm6sxKoYWqWM0WF/hy69ye6osv494v9RyTHRF9AKu3CFE
 Hg0OhsgTD2/eDIQat8hSSZOJp+axOvG7RA1fIrDTXfMKklwwQquyyCQcNNBnIcL4
 RRVpQ72YHcJiMNY9mmIFjsBlTZeBGuaAoOgUxXohwC9YGjxm0xc8ZMmAvr3jiqTY
 Wji/ij8AiXP6JLPzlqIkJU+wPAsZNSGxGxeek5FSFTvsODMMlMKQsWvPLQb5vsMp
 EhNber7jqB0T5LN4nuo0PvyjPG3vUQ==
 =z26X
 -----END PGP SIGNATURE-----

Merge tag 'pull-for-6.2-161121-1' of https://github.com/stsquad/qemu into staging

Misc build and test fixes:

  - force NOUSER for base docker images
  - don't run TCG VM tests by default
  - remove useless meson test
  - add Centos 8 custom runner
  - split up custom-runners to individual files
  - skip cirrus checks on master/stable branches

# gpg: Signature made Tue 16 Nov 2021 05:22:09 PM CET
# gpg:                using RSA key 6685AE99E75167BCAFC8DF35FBD0DB095A9E2A44
# gpg: Good signature from "Alex Bennée (Master Work Key) <alex.bennee@linaro.org>" [full]

* tag 'pull-for-6.2-161121-1' of https://github.com/stsquad/qemu:
  gitlab: skip cirrus jobs on master and stable branches
  gitlab-ci: Split custom-runners.yml in one file per runner
  Jobs based on custom runners: add CentOS Stream 8
  meson: remove useless libdl test
  tests/vm: don't build using TCG by default
  tests/vm: sort the special variable list
  tests/docker: force NOUSER=1 for base images

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
Richard Henderson 2021-11-16 17:26:43 +01:00
commit 9104bd89da
15 changed files with 686 additions and 253 deletions

View File

@ -40,6 +40,9 @@
- cat .gitlab-ci.d/cirrus/$NAME.yml - cat .gitlab-ci.d/cirrus/$NAME.yml
- cirrus-run -v --show-build-log always .gitlab-ci.d/cirrus/$NAME.yml - cirrus-run -v --show-build-log always .gitlab-ci.d/cirrus/$NAME.yml
rules: rules:
# Allow on 'staging' branch and 'stable-X.Y-staging' branches only
- if: '$CI_PROJECT_NAMESPACE == "qemu-project" && $CI_COMMIT_BRANCH !~ /staging/'
when: never
- if: "$CIRRUS_GITHUB_REPO && $CIRRUS_API_TOKEN" - if: "$CIRRUS_GITHUB_REPO && $CIRRUS_API_TOKEN"
x64-freebsd-12-build: x64-freebsd-12-build:

View File

@ -13,238 +13,7 @@
variables: variables:
GIT_STRATEGY: clone GIT_STRATEGY: clone
# All ubuntu-18.04 jobs should run successfully in an environment include:
# setup by the scripts/ci/setup/build-environment.yml task - local: '/.gitlab-ci.d/custom-runners/ubuntu-18.04-s390x.yml'
# "Install basic packages to build QEMU on Ubuntu 18.04/20.04" - local: '/.gitlab-ci.d/custom-runners/ubuntu-20.04-aarch64.yml'
ubuntu-18.04-s390x-all-linux-static: - local: '/.gitlab-ci.d/custom-runners/centos-stream-8-x86_64.yml'
needs: []
stage: build
tags:
- ubuntu_18.04
- s390x
rules:
- if: '$CI_PROJECT_NAMESPACE == "qemu-project" && $CI_COMMIT_BRANCH =~ /^staging/'
- if: "$S390X_RUNNER_AVAILABLE"
script:
# --disable-libssh is needed because of https://bugs.launchpad.net/qemu/+bug/1838763
# --disable-glusterfs is needed because there's no static version of those libs in distro supplied packages
- mkdir build
- cd build
- ../configure --enable-debug --static --disable-system --disable-glusterfs --disable-libssh
- make --output-sync -j`nproc`
- make --output-sync -j`nproc` check V=1
- make --output-sync -j`nproc` check-tcg V=1
ubuntu-18.04-s390x-all:
needs: []
stage: build
tags:
- ubuntu_18.04
- s390x
rules:
- if: '$CI_PROJECT_NAMESPACE == "qemu-project" && $CI_COMMIT_BRANCH =~ /^staging/'
- if: "$S390X_RUNNER_AVAILABLE"
script:
- mkdir build
- cd build
- ../configure --disable-libssh
- make --output-sync -j`nproc`
- make --output-sync -j`nproc` check V=1
ubuntu-18.04-s390x-alldbg:
needs: []
stage: build
tags:
- ubuntu_18.04
- s390x
rules:
- if: '$CI_PROJECT_NAMESPACE == "qemu-project" && $CI_COMMIT_BRANCH =~ /^staging/'
when: manual
allow_failure: true
- if: "$S390X_RUNNER_AVAILABLE"
when: manual
allow_failure: true
script:
- mkdir build
- cd build
- ../configure --enable-debug --disable-libssh
- make clean
- make --output-sync -j`nproc`
- make --output-sync -j`nproc` check V=1
ubuntu-18.04-s390x-clang:
needs: []
stage: build
tags:
- ubuntu_18.04
- s390x
rules:
- if: '$CI_PROJECT_NAMESPACE == "qemu-project" && $CI_COMMIT_BRANCH =~ /^staging/'
when: manual
allow_failure: true
- if: "$S390X_RUNNER_AVAILABLE"
when: manual
allow_failure: true
script:
- mkdir build
- cd build
- ../configure --disable-libssh --cc=clang --cxx=clang++ --enable-sanitizers
- make --output-sync -j`nproc`
- make --output-sync -j`nproc` check V=1
ubuntu-18.04-s390x-tci:
needs: []
stage: build
tags:
- ubuntu_18.04
- s390x
rules:
- if: '$CI_PROJECT_NAMESPACE == "qemu-project" && $CI_COMMIT_BRANCH =~ /^staging/'
when: manual
allow_failure: true
- if: "$S390X_RUNNER_AVAILABLE"
when: manual
allow_failure: true
script:
- mkdir build
- cd build
- ../configure --disable-libssh --enable-tcg-interpreter
- make --output-sync -j`nproc`
ubuntu-18.04-s390x-notcg:
needs: []
stage: build
tags:
- ubuntu_18.04
- s390x
rules:
- if: '$CI_PROJECT_NAMESPACE == "qemu-project" && $CI_COMMIT_BRANCH =~ /^staging/'
when: manual
allow_failure: true
- if: "$S390X_RUNNER_AVAILABLE"
when: manual
allow_failure: true
script:
- mkdir build
- cd build
- ../configure --disable-libssh --disable-tcg
- make --output-sync -j`nproc`
- make --output-sync -j`nproc` check V=1
# All ubuntu-20.04 jobs should run successfully in an environment
# setup by the scripts/ci/setup/qemu/build-environment.yml task
# "Install basic packages to build QEMU on Ubuntu 18.04/20.04"
ubuntu-20.04-aarch64-all-linux-static:
needs: []
stage: build
tags:
- ubuntu_20.04
- aarch64
rules:
- if: '$CI_PROJECT_NAMESPACE == "qemu-project" && $CI_COMMIT_BRANCH =~ /^staging/'
- if: "$AARCH64_RUNNER_AVAILABLE"
script:
# --disable-libssh is needed because of https://bugs.launchpad.net/qemu/+bug/1838763
# --disable-glusterfs is needed because there's no static version of those libs in distro supplied packages
- mkdir build
- cd build
- ../configure --enable-debug --static --disable-system --disable-glusterfs --disable-libssh
- make --output-sync -j`nproc`
- make --output-sync -j`nproc` check V=1
- make --output-sync -j`nproc` check-tcg V=1
ubuntu-20.04-aarch64-all:
needs: []
stage: build
tags:
- ubuntu_20.04
- aarch64
rules:
- if: '$CI_PROJECT_NAMESPACE == "qemu-project" && $CI_COMMIT_BRANCH =~ /^staging/'
when: manual
allow_failure: true
- if: "$AARCH64_RUNNER_AVAILABLE"
when: manual
allow_failure: true
script:
- mkdir build
- cd build
- ../configure --disable-libssh
- make --output-sync -j`nproc`
- make --output-sync -j`nproc` check V=1
ubuntu-20.04-aarch64-alldbg:
needs: []
stage: build
tags:
- ubuntu_20.04
- aarch64
rules:
- if: '$CI_PROJECT_NAMESPACE == "qemu-project" && $CI_COMMIT_BRANCH =~ /^staging/'
- if: "$AARCH64_RUNNER_AVAILABLE"
script:
- mkdir build
- cd build
- ../configure --enable-debug --disable-libssh
- make clean
- make --output-sync -j`nproc`
- make --output-sync -j`nproc` check V=1
ubuntu-20.04-aarch64-clang:
needs: []
stage: build
tags:
- ubuntu_20.04
- aarch64
rules:
- if: '$CI_PROJECT_NAMESPACE == "qemu-project" && $CI_COMMIT_BRANCH =~ /^staging/'
when: manual
allow_failure: true
- if: "$AARCH64_RUNNER_AVAILABLE"
when: manual
allow_failure: true
script:
- mkdir build
- cd build
- ../configure --disable-libssh --cc=clang-10 --cxx=clang++-10 --enable-sanitizers
- make --output-sync -j`nproc`
- make --output-sync -j`nproc` check V=1
ubuntu-20.04-aarch64-tci:
needs: []
stage: build
tags:
- ubuntu_20.04
- aarch64
rules:
- if: '$CI_PROJECT_NAMESPACE == "qemu-project" && $CI_COMMIT_BRANCH =~ /^staging/'
when: manual
allow_failure: true
- if: "$AARCH64_RUNNER_AVAILABLE"
when: manual
allow_failure: true
script:
- mkdir build
- cd build
- ../configure --disable-libssh --enable-tcg-interpreter
- make --output-sync -j`nproc`
ubuntu-20.04-aarch64-notcg:
needs: []
stage: build
tags:
- ubuntu_20.04
- aarch64
rules:
- if: '$CI_PROJECT_NAMESPACE == "qemu-project" && $CI_COMMIT_BRANCH =~ /^staging/'
when: manual
allow_failure: true
- if: "$AARCH64_RUNNER_AVAILABLE"
when: manual
allow_failure: true
script:
- mkdir build
- cd build
- ../configure --disable-libssh --disable-tcg
- make --output-sync -j`nproc`
- make --output-sync -j`nproc` check V=1

View File

@ -0,0 +1,28 @@
centos-stream-8-x86_64:
allow_failure: true
needs: []
stage: build
tags:
- centos_stream_8
- x86_64
rules:
- if: '$CI_PROJECT_NAMESPACE == "qemu-project" && $CI_COMMIT_BRANCH =~ /^staging/'
- if: "$CENTOS_STREAM_8_x86_64_RUNNER_AVAILABLE"
artifacts:
name: "$CI_JOB_NAME-$CI_COMMIT_REF_SLUG"
when: on_failure
expire_in: 7 days
paths:
- build/tests/results/latest/results.xml
- build/tests/results/latest/test-results
reports:
junit: build/tests/results/latest/results.xml
before_script:
- JOBS=$(expr $(nproc) + 1)
script:
- mkdir build
- cd build
- ../scripts/ci/org.centos/stream/8/x86_64/configure
- make -j"$JOBS"
- make NINJA=":" check
- ../scripts/ci/org.centos/stream/8/x86_64/test-avocado

View File

@ -0,0 +1,118 @@
# All ubuntu-18.04 jobs should run successfully in an environment
# setup by the scripts/ci/setup/build-environment.yml task
# "Install basic packages to build QEMU on Ubuntu 18.04/20.04"
ubuntu-18.04-s390x-all-linux-static:
needs: []
stage: build
tags:
- ubuntu_18.04
- s390x
rules:
- if: '$CI_PROJECT_NAMESPACE == "qemu-project" && $CI_COMMIT_BRANCH =~ /^staging/'
- if: "$S390X_RUNNER_AVAILABLE"
script:
# --disable-libssh is needed because of https://bugs.launchpad.net/qemu/+bug/1838763
# --disable-glusterfs is needed because there's no static version of those libs in distro supplied packages
- mkdir build
- cd build
- ../configure --enable-debug --static --disable-system --disable-glusterfs --disable-libssh
- make --output-sync -j`nproc`
- make --output-sync -j`nproc` check V=1
- make --output-sync -j`nproc` check-tcg V=1
ubuntu-18.04-s390x-all:
needs: []
stage: build
tags:
- ubuntu_18.04
- s390x
rules:
- if: '$CI_PROJECT_NAMESPACE == "qemu-project" && $CI_COMMIT_BRANCH =~ /^staging/'
- if: "$S390X_RUNNER_AVAILABLE"
script:
- mkdir build
- cd build
- ../configure --disable-libssh
- make --output-sync -j`nproc`
- make --output-sync -j`nproc` check V=1
ubuntu-18.04-s390x-alldbg:
needs: []
stage: build
tags:
- ubuntu_18.04
- s390x
rules:
- if: '$CI_PROJECT_NAMESPACE == "qemu-project" && $CI_COMMIT_BRANCH =~ /^staging/'
when: manual
allow_failure: true
- if: "$S390X_RUNNER_AVAILABLE"
when: manual
allow_failure: true
script:
- mkdir build
- cd build
- ../configure --enable-debug --disable-libssh
- make clean
- make --output-sync -j`nproc`
- make --output-sync -j`nproc` check V=1
ubuntu-18.04-s390x-clang:
needs: []
stage: build
tags:
- ubuntu_18.04
- s390x
rules:
- if: '$CI_PROJECT_NAMESPACE == "qemu-project" && $CI_COMMIT_BRANCH =~ /^staging/'
when: manual
allow_failure: true
- if: "$S390X_RUNNER_AVAILABLE"
when: manual
allow_failure: true
script:
- mkdir build
- cd build
- ../configure --disable-libssh --cc=clang --cxx=clang++ --enable-sanitizers
- make --output-sync -j`nproc`
- make --output-sync -j`nproc` check V=1
ubuntu-18.04-s390x-tci:
needs: []
stage: build
tags:
- ubuntu_18.04
- s390x
rules:
- if: '$CI_PROJECT_NAMESPACE == "qemu-project" && $CI_COMMIT_BRANCH =~ /^staging/'
when: manual
allow_failure: true
- if: "$S390X_RUNNER_AVAILABLE"
when: manual
allow_failure: true
script:
- mkdir build
- cd build
- ../configure --disable-libssh --enable-tcg-interpreter
- make --output-sync -j`nproc`
ubuntu-18.04-s390x-notcg:
needs: []
stage: build
tags:
- ubuntu_18.04
- s390x
rules:
- if: '$CI_PROJECT_NAMESPACE == "qemu-project" && $CI_COMMIT_BRANCH =~ /^staging/'
when: manual
allow_failure: true
- if: "$S390X_RUNNER_AVAILABLE"
when: manual
allow_failure: true
script:
- mkdir build
- cd build
- ../configure --disable-libssh --disable-tcg
- make --output-sync -j`nproc`
- make --output-sync -j`nproc` check V=1

View File

@ -0,0 +1,118 @@
# All ubuntu-20.04 jobs should run successfully in an environment
# setup by the scripts/ci/setup/qemu/build-environment.yml task
# "Install basic packages to build QEMU on Ubuntu 18.04/20.04"
ubuntu-20.04-aarch64-all-linux-static:
needs: []
stage: build
tags:
- ubuntu_20.04
- aarch64
rules:
- if: '$CI_PROJECT_NAMESPACE == "qemu-project" && $CI_COMMIT_BRANCH =~ /^staging/'
- if: "$AARCH64_RUNNER_AVAILABLE"
script:
# --disable-libssh is needed because of https://bugs.launchpad.net/qemu/+bug/1838763
# --disable-glusterfs is needed because there's no static version of those libs in distro supplied packages
- mkdir build
- cd build
- ../configure --enable-debug --static --disable-system --disable-glusterfs --disable-libssh
- make --output-sync -j`nproc`
- make --output-sync -j`nproc` check V=1
- make --output-sync -j`nproc` check-tcg V=1
ubuntu-20.04-aarch64-all:
needs: []
stage: build
tags:
- ubuntu_20.04
- aarch64
rules:
- if: '$CI_PROJECT_NAMESPACE == "qemu-project" && $CI_COMMIT_BRANCH =~ /^staging/'
when: manual
allow_failure: true
- if: "$AARCH64_RUNNER_AVAILABLE"
when: manual
allow_failure: true
script:
- mkdir build
- cd build
- ../configure --disable-libssh
- make --output-sync -j`nproc`
- make --output-sync -j`nproc` check V=1
ubuntu-20.04-aarch64-alldbg:
needs: []
stage: build
tags:
- ubuntu_20.04
- aarch64
rules:
- if: '$CI_PROJECT_NAMESPACE == "qemu-project" && $CI_COMMIT_BRANCH =~ /^staging/'
- if: "$AARCH64_RUNNER_AVAILABLE"
script:
- mkdir build
- cd build
- ../configure --enable-debug --disable-libssh
- make clean
- make --output-sync -j`nproc`
- make --output-sync -j`nproc` check V=1
ubuntu-20.04-aarch64-clang:
needs: []
stage: build
tags:
- ubuntu_20.04
- aarch64
rules:
- if: '$CI_PROJECT_NAMESPACE == "qemu-project" && $CI_COMMIT_BRANCH =~ /^staging/'
when: manual
allow_failure: true
- if: "$AARCH64_RUNNER_AVAILABLE"
when: manual
allow_failure: true
script:
- mkdir build
- cd build
- ../configure --disable-libssh --cc=clang-10 --cxx=clang++-10 --enable-sanitizers
- make --output-sync -j`nproc`
- make --output-sync -j`nproc` check V=1
ubuntu-20.04-aarch64-tci:
needs: []
stage: build
tags:
- ubuntu_20.04
- aarch64
rules:
- if: '$CI_PROJECT_NAMESPACE == "qemu-project" && $CI_COMMIT_BRANCH =~ /^staging/'
when: manual
allow_failure: true
- if: "$AARCH64_RUNNER_AVAILABLE"
when: manual
allow_failure: true
script:
- mkdir build
- cd build
- ../configure --disable-libssh --enable-tcg-interpreter
- make --output-sync -j`nproc`
ubuntu-20.04-aarch64-notcg:
needs: []
stage: build
tags:
- ubuntu_20.04
- aarch64
rules:
- if: '$CI_PROJECT_NAMESPACE == "qemu-project" && $CI_COMMIT_BRANCH =~ /^staging/'
when: manual
allow_failure: true
- if: "$AARCH64_RUNNER_AVAILABLE"
when: manual
allow_failure: true
script:
- mkdir build
- cd build
- ../configure --disable-libssh --disable-tcg
- make --output-sync -j`nproc`
- make --output-sync -j`nproc` check V=1

View File

@ -10,7 +10,7 @@ tcg_ss.add(files(
)) ))
tcg_ss.add(when: 'CONFIG_USER_ONLY', if_true: files('user-exec.c')) tcg_ss.add(when: 'CONFIG_USER_ONLY', if_true: files('user-exec.c'))
tcg_ss.add(when: 'CONFIG_SOFTMMU', if_false: files('user-exec-stub.c')) tcg_ss.add(when: 'CONFIG_SOFTMMU', if_false: files('user-exec-stub.c'))
tcg_ss.add(when: 'CONFIG_PLUGIN', if_true: [files('plugin-gen.c'), libdl]) tcg_ss.add(when: 'CONFIG_PLUGIN', if_true: [files('plugin-gen.c')])
specific_ss.add_all(when: 'CONFIG_TCG', if_true: tcg_ss) specific_ss.add_all(when: 'CONFIG_TCG', if_true: tcg_ss)
specific_ss.add(when: ['CONFIG_SOFTMMU', 'CONFIG_TCG'], if_true: files( specific_ss.add(when: ['CONFIG_SOFTMMU', 'CONFIG_TCG'], if_true: files(

View File

@ -49,3 +49,10 @@ S390X_RUNNER_AVAILABLE
If you've got access to an IBM Z host that can be used as a gitlab-CI If you've got access to an IBM Z host that can be used as a gitlab-CI
runner, you can set this variable to enable the tests that require this runner, you can set this variable to enable the tests that require this
kind of host. The runner should be tagged with "s390x". kind of host. The runner should be tagged with "s390x".
CENTOS_STREAM_8_x86_64_RUNNER_AVAILABLE
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
If you've got access to a CentOS Stream 8 x86_64 host that can be
used as a gitlab-CI runner, you can set this variable to enable the
tests that require this kind of host. The runner should be tagged with
both "centos_stream_8" and "x86_64".

View File

@ -566,13 +566,7 @@ endif
spice_headers = spice.partial_dependency(compile_args: true, includes: true) spice_headers = spice.partial_dependency(compile_args: true, includes: true)
rt = cc.find_library('rt', required: false) rt = cc.find_library('rt', required: false)
libdl = not_found
if 'CONFIG_PLUGIN' in config_host
libdl = cc.find_library('dl', required: false)
if not cc.has_function('dlopen', dependencies: libdl)
error('dlopen not found')
endif
endif
libiscsi = not_found libiscsi = not_found
if not get_option('libiscsi').auto() or have_block if not get_option('libiscsi').auto() or have_block
libiscsi = dependency('libiscsi', version: '>=1.9.0', libiscsi = dependency('libiscsi', version: '>=1.9.0',

View File

@ -0,0 +1,51 @@
---
- name: Installation of extra packages to build QEMU
hosts: all
tasks:
- name: Extra check for CentOS Stream 8
lineinfile:
path: /etc/redhat-release
line: CentOS Stream release 8
state: present
check_mode: yes
register: centos_stream_8
- name: Enable PowerTools repo on CentOS Stream 8
ini_file:
path: /etc/yum.repos.d/CentOS-Stream-PowerTools.repo
section: powertools
option: enabled
value: "1"
when:
- ansible_facts['distribution'] == 'CentOS'
- ansible_facts['distribution_major_version'] == '8'
- centos_stream_8
- name: Install basic packages to build QEMU on CentOS Stream 8
dnf:
name:
- device-mapper-multipath-devel
- glusterfs-api-devel
- gnutls-devel
- libcap-ng-devel
- libcurl-devel
- libfdt-devel
- libiscsi-devel
- libpmem-devel
- librados-devel
- librbd-devel
- libseccomp-devel
- libssh-devel
- libxkbcommon-devel
- ninja-build
- numactl-devel
- python3-sphinx
- redhat-rpm-config
- snappy-devel
- spice-server-devel
- systemd-devel
state: present
when:
- ansible_facts['distribution'] == 'CentOS'
- ansible_facts['distribution_major_version'] == '8'
- centos_stream_8

View File

@ -0,0 +1,208 @@
#!/bin/sh -e
#
# Configuration for QEMU based on CentOS Stream 8 x86_64 builds
#
# The "configure" command line is based on:
#
# https://git.centos.org/rpms/qemu-kvm/blob/c8s-stream-rhel/f/SPECS/qemu-kvm.spec
#
# But, because the SPEC file contains a number of conditionals and
# variable and expansions only available at RPM build time, this version
# was initially generated from an actual RPM build on an x86_64 platform.
#
# From that initial version, options that are required or are a
# consequence of non-upstream patches have been adapted. One example
# is "--without-default-devices" which is *not* present here, given
# that patches adding downstream specific devices are not available.
#
../configure \
--prefix="/usr" \
--libdir="/usr/lib64" \
--datadir="/usr/share" \
--sysconfdir="/etc" \
--interp-prefix=/usr/qemu-%M \
--localstatedir="/var" \
--docdir="/usr/share/doc" \
--libexecdir="/usr/libexec" \
--extra-ldflags="-Wl,--build-id -Wl,-z,relro -Wl,-z,now" \
--extra-cflags="-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection" \
--with-suffix="qemu-kvm" \
--firmwarepath=/usr/share/qemu-firmware \
--with-git=meson \
--with-git-submodules=update \
--target-list="x86_64-softmmu" \
--block-drv-rw-whitelist="qcow2,raw,file,host_device,nbd,iscsi,rbd,blkdebug,luks,null-co,nvme,copy-on-read,throttle,gluster" \
--audio-drv-list="" \
--block-drv-ro-whitelist="vmdk,vhdx,vpc,https,ssh" \
--with-coroutine=ucontext \
--with-git=git \
--tls-priority=@QEMU,SYSTEM \
--disable-attr \
--disable-auth-pam \
--disable-avx2 \
--disable-avx512f \
--disable-bochs \
--disable-bpf \
--disable-brlapi \
--disable-bsd-user \
--disable-bzip2 \
--disable-cap-ng \
--disable-capstone \
--disable-cfi \
--disable-cfi-debug \
--disable-cloop \
--disable-cocoa \
--disable-coroutine-pool \
--disable-crypto-afalg \
--disable-curl \
--disable-curses \
--disable-debug-info \
--disable-debug-mutex \
--disable-debug-tcg \
--disable-dmg \
--disable-docs \
--disable-fuse \
--disable-fuse-lseek \
--disable-gcrypt \
--disable-gio \
--disable-glusterfs \
--disable-gnutls \
--disable-gtk \
--disable-guest-agent \
--disable-guest-agent-msi \
--disable-hax \
--disable-hvf \
--disable-iconv \
--disable-kvm \
--disable-libdaxctl \
--disable-libiscsi \
--disable-libnfs \
--disable-libpmem \
--disable-libssh \
--disable-libudev \
--disable-libusb \
--disable-libxml2 \
--disable-linux-aio \
--disable-linux-io-uring \
--disable-linux-user \
--disable-live-block-migration \
--disable-lto \
--disable-lzfse \
--disable-lzo \
--disable-malloc-trim \
--disable-membarrier \
--disable-modules \
--disable-module-upgrades \
--disable-mpath \
--disable-multiprocess \
--disable-netmap \
--disable-nettle \
--disable-numa \
--disable-nvmm \
--disable-opengl \
--disable-parallels \
--disable-pie \
--disable-pvrdma \
--disable-qcow1 \
--disable-qed \
--disable-qom-cast-debug \
--disable-rbd \
--disable-rdma \
--disable-replication \
--disable-rng-none \
--disable-safe-stack \
--disable-sanitizers \
--disable-sdl \
--disable-sdl-image \
--disable-seccomp \
--disable-slirp-smbd \
--disable-smartcard \
--disable-snappy \
--disable-sparse \
--disable-spice \
--disable-strip \
--disable-system \
--disable-tcg \
--disable-tools \
--disable-tpm \
--disable-u2f \
--disable-usb-redir \
--disable-user \
--disable-vde \
--disable-vdi \
--disable-vhost-crypto \
--disable-vhost-kernel \
--disable-vhost-net \
--disable-vhost-scsi \
--disable-vhost-user \
--disable-vhost-user-blk-server \
--disable-vhost-vdpa \
--disable-vhost-vsock \
--disable-virglrenderer \
--disable-virtfs \
--disable-virtiofsd \
--disable-vnc \
--disable-vnc-jpeg \
--disable-vnc-png \
--disable-vnc-sasl \
--disable-vte \
--disable-vvfat \
--disable-werror \
--disable-whpx \
--disable-xen \
--disable-xen-pci-passthrough \
--disable-xfsctl \
--disable-xkbcommon \
--disable-zstd \
--enable-attr \
--enable-avx2 \
--enable-cap-ng \
--enable-capstone \
--enable-coroutine-pool \
--enable-curl \
--enable-debug-info \
--enable-docs \
--enable-fdt \
--enable-gcrypt \
--enable-glusterfs \
--enable-gnutls \
--enable-guest-agent \
--enable-iconv \
--enable-kvm \
--enable-libiscsi \
--enable-libpmem \
--enable-libssh \
--enable-libusb \
--enable-libudev \
--enable-linux-aio \
--enable-lzo \
--enable-malloc-trim \
--enable-modules \
--enable-mpath \
--enable-numa \
--enable-opengl \
--enable-pie \
--enable-rbd \
--enable-rdma \
--enable-seccomp \
--enable-snappy \
--enable-smartcard \
--enable-spice \
--enable-system \
--enable-tcg \
--enable-tools \
--enable-tpm \
--enable-trace-backend=dtrace \
--enable-usb-redir \
--enable-virtiofsd \
--enable-vhost-kernel \
--enable-vhost-net \
--enable-vhost-user \
--enable-vhost-user-blk-server \
--enable-vhost-vdpa \
--enable-vhost-vsock \
--enable-vnc \
--enable-vnc-png \
--enable-vnc-sasl \
--enable-werror \
--enable-xkbcommon

View File

@ -0,0 +1,70 @@
#!/bin/sh -e
#
# Runs a previously vetted list of tests, either marked explicitly for
# KVM and x86_64, or tests that are generic enough to be valid for all
# targets. Such a test list can be generated with:
#
# ./tests/venv/bin/avocado list --filter-by-tags-include-empty \
# --filter-by-tags-include-empty-key -t accel:kvm,arch:x86_64 \
# tests/avocado/
#
# This is almost the complete list of avocado based tests available at
# the time this was compile, with the following exceptions:
#
# * Require machine type "x-remote":
# - tests/avocado/multiprocess.py:Multiprocess.test_multiprocess_x86_64
#
# * Needs superuser privileges:
# - tests/avocado/virtiofs_submounts.py:VirtiofsSubmountsTest.test_pre_virtiofsd_set_up
# - tests/avocado/virtiofs_submounts.py:VirtiofsSubmountsTest.test_pre_launch_set_up
# - tests/avocado/virtiofs_submounts.py:VirtiofsSubmountsTest.test_post_launch_set_up
# - tests/avocado/virtiofs_submounts.py:VirtiofsSubmountsTest.test_post_mount_set_up
# - tests/avocado/virtiofs_submounts.py:VirtiofsSubmountsTest.test_two_runs
#
# * Requires display type "egl-headless":
# - tests/avocado/virtio-gpu.py:VirtioGPUx86.test_virtio_vga_virgl
# - tests/avocado/virtio-gpu.py:VirtioGPUx86.test_vhost_user_vga_virgl
#
# * Test is marked (unconditionally) to be skipped:
# - tests/avocado/virtio_check_params.py:VirtioMaxSegSettingsCheck.test_machine_types
#
make get-vm-images
./tests/venv/bin/avocado run \
--job-results-dir=tests/results/ \
tests/avocado/boot_linux.py:BootLinuxX8664.test_pc_i440fx_kvm \
tests/avocado/boot_linux.py:BootLinuxX8664.test_pc_q35_kvm \
tests/avocado/boot_linux_console.py:BootLinuxConsole.test_x86_64_pc \
tests/avocado/cpu_queries.py:QueryCPUModelExpansion.test \
tests/avocado/empty_cpu_model.py:EmptyCPUModel.test \
tests/avocado/hotplug_cpu.py:HotPlugCPU.test \
tests/avocado/info_usernet.py:InfoUsernet.test_hostfwd \
tests/avocado/intel_iommu.py:IntelIOMMU.test_intel_iommu \
tests/avocado/intel_iommu.py:IntelIOMMU.test_intel_iommu_pt \
tests/avocado/intel_iommu.py:IntelIOMMU.test_intel_iommu_strict \
tests/avocado/intel_iommu.py:IntelIOMMU.test_intel_iommu_strict_cm \
tests/avocado/linux_initrd.py:LinuxInitrd.test_with_2gib_file_should_exit_error_msg_with_linux_v3_6 \
tests/avocado/linux_initrd.py:LinuxInitrd.test_with_2gib_file_should_work_with_linux_v4_16 \
tests/avocado/migration.py:Migration.test_migration_with_exec \
tests/avocado/migration.py:Migration.test_migration_with_tcp_localhost \
tests/avocado/migration.py:Migration.test_migration_with_unix \
tests/avocado/pc_cpu_hotplug_props.py:OmittedCPUProps.test_no_die_id \
tests/avocado/replay_kernel.py:ReplayKernelNormal.test_x86_64_pc \
tests/avocado/reverse_debugging.py:ReverseDebugging_X86_64.test_x86_64_pc \
tests/avocado/version.py:Version.test_qmp_human_info_version \
tests/avocado/virtio_version.py:VirtioVersionCheck.test_conventional_devs \
tests/avocado/virtio_version.py:VirtioVersionCheck.test_modern_only_devs \
tests/avocado/vnc.py:Vnc.test_change_password \
tests/avocado/vnc.py:Vnc.test_change_password_requires_a_password \
tests/avocado/vnc.py:Vnc.test_no_vnc \
tests/avocado/vnc.py:Vnc.test_no_vnc_change_password \
tests/avocado/x86_cpu_model_versions.py:CascadelakeArchCapabilities.test_4_0 \
tests/avocado/x86_cpu_model_versions.py:CascadelakeArchCapabilities.test_4_1 \
tests/avocado/x86_cpu_model_versions.py:CascadelakeArchCapabilities.test_set_4_0 \
tests/avocado/x86_cpu_model_versions.py:CascadelakeArchCapabilities.test_unset_4_1 \
tests/avocado/x86_cpu_model_versions.py:CascadelakeArchCapabilities.test_v1_4_0 \
tests/avocado/x86_cpu_model_versions.py:CascadelakeArchCapabilities.test_v1_set_4_0 \
tests/avocado/x86_cpu_model_versions.py:CascadelakeArchCapabilities.test_v2_4_0 \
tests/avocado/x86_cpu_model_versions.py:CascadelakeArchCapabilities.test_v2_unset_4_1 \
tests/avocado/x86_cpu_model_versions.py:X86CPUModelAliases.test_4_0_alias_compatibility \
tests/avocado/x86_cpu_model_versions.py:X86CPUModelAliases.test_4_1_alias \
tests/avocado/x86_cpu_model_versions.py:X86CPUModelAliases.test_none_alias

View File

@ -0,0 +1,17 @@
This directory contains scripts for generating a build of QEMU that
closely matches the CentOS Stream[1] builds of the qemu-kvm package.
To have the environment ready to configure, build QEMU and run tests,
please start with a CentOS Stream machine and:
* apply the generic "build-environment.yml" playbook located at
scripts/ci/setup
* apply the "build-environment.yml" in the directory following the
CentOS Stream version (such as "8").
This currently only covers CentOS Stream 8 environments and
packages[2].
[1] https://www.centos.org/centos-stream/
[2] https://git.centos.org/rpms/qemu-kvm/commits/c8s-stream-rhel

View File

@ -114,3 +114,41 @@
when: when:
- ansible_facts['distribution'] == 'Ubuntu' - ansible_facts['distribution'] == 'Ubuntu'
- ansible_facts['distribution_version'] == '20.04' - ansible_facts['distribution_version'] == '20.04'
- name: Install basic packages to build QEMU on EL8
dnf:
# This list of packages start with tests/docker/dockerfiles/centos8.docker
# but only include files that are common to all distro variants and present
# in the standard repos (no add-ons)
name:
- bzip2
- bzip2-devel
- dbus-daemon
- diffutils
- gcc
- gcc-c++
- genisoimage
- gettext
- git
- glib2-devel
- libaio-devel
- libepoxy-devel
- libgcrypt-devel
- lzo-devel
- make
- mesa-libEGL-devel
- nettle-devel
- nmap-ncat
- perl-Test-Harness
- pixman-devel
- python36
- rdma-core-devel
- spice-glib-devel
- spice-server
- systemtap-sdt-devel
- tar
- zlib-devel
state: present
when:
- ansible_facts['distribution_file_variety'] == 'RedHat'
- ansible_facts['distribution_version'] == '8'

View File

@ -150,6 +150,9 @@ docker-image-debian-sparc64-cross: docker-image-debian10
# The native build should never use the registry # The native build should never use the registry
docker-image-debian-native: DOCKER_REGISTRY= docker-image-debian-native: DOCKER_REGISTRY=
# base images should not add a local user
docker-image-debian10: NOUSER=1
docker-image-debian11: NOUSER=1
# #
# The build rule for hexagon-cross is special in so far for most of # The build rule for hexagon-cross is special in so far for most of

View File

@ -2,16 +2,24 @@
.PHONY: vm-build-all vm-clean-all .PHONY: vm-build-all vm-clean-all
HOST_ARCH = $(if $(ARCH),$(ARCH),$(shell uname -m))
EFI_AARCH64 = $(wildcard $(BUILD_DIR)/pc-bios/edk2-aarch64-code.fd) EFI_AARCH64 = $(wildcard $(BUILD_DIR)/pc-bios/edk2-aarch64-code.fd)
IMAGES := freebsd netbsd openbsd centos fedora haiku.x86_64 X86_IMAGES := freebsd netbsd openbsd centos fedora haiku.x86_64
ifneq ($(GENISOIMAGE),) ifneq ($(GENISOIMAGE),)
IMAGES += ubuntu.i386 centos X86_IMAGES += ubuntu.i386 centos
ifneq ($(EFI_AARCH64),) ifneq ($(EFI_AARCH64),)
IMAGES += ubuntu.aarch64 centos.aarch64 ARM64_IMAGES += ubuntu.aarch64 centos.aarch64
endif endif
endif endif
ifeq ($(HOST_ARCH),x86_64)
IMAGES=$(X86_IMAGES) $(if $(USE_TCG),$(ARM64_IMAGES))
else ifeq ($(HOST_ARCH),aarch64)
IMAGES=$(ARM64_IMAGES) $(if $(USE_TCG),$(X86_IMAGES))
endif
IMAGES_DIR := $(HOME)/.cache/qemu-vm/images IMAGES_DIR := $(HOME)/.cache/qemu-vm/images
IMAGE_FILES := $(patsubst %, $(IMAGES_DIR)/%.img, $(IMAGES)) IMAGE_FILES := $(patsubst %, $(IMAGES_DIR)/%.img, $(IMAGES))
@ -43,7 +51,7 @@ else
endif endif
@echo " vm-build-haiku.x86_64 - Build QEMU in Haiku VM" @echo " vm-build-haiku.x86_64 - Build QEMU in Haiku VM"
@echo "" @echo ""
@echo " vm-build-all - Build QEMU in all VMs" @echo " vm-build-all - Build QEMU in: $(IMAGES)"
@echo " vm-clean-all - Clean up VM images" @echo " vm-clean-all - Clean up VM images"
@echo @echo
@echo "For trouble-shooting:" @echo "For trouble-shooting:"
@ -52,21 +60,22 @@ endif
@echo @echo
@echo "Special variables:" @echo "Special variables:"
@echo " BUILD_TARGET=foo - Override the build target" @echo " BUILD_TARGET=foo - Override the build target"
@echo " TARGET_LIST=a,b,c - Override target list in builds"
@echo ' EXTRA_CONFIGURE_OPTS="..."'
@echo " J=[0..9]* - Override the -jN parameter for make commands"
@echo " DEBUG=1 - Enable verbose output on host and interactive debugging" @echo " DEBUG=1 - Enable verbose output on host and interactive debugging"
@echo ' EXTRA_CONFIGURE_OPTS="..." - Pass to configure step'
@echo " J=[0..9]* - Override the -jN parameter for make commands"
@echo " LOG_CONSOLE=1 - Log console to file in: ~/.cache/qemu-vm " @echo " LOG_CONSOLE=1 - Log console to file in: ~/.cache/qemu-vm "
@echo " V=1 - Enable verbose ouput on host and guest commands" @echo " USE_TCG=1 - Use TCG for cross-arch images"
@echo " QEMU_LOCAL=1 - Use QEMU binary local to this build."
@echo " QEMU=/path/to/qemu - Change path to QEMU binary" @echo " QEMU=/path/to/qemu - Change path to QEMU binary"
@echo " QEMU_IMG=/path/to/qemu-img - Change path to qemu-img tool"
ifeq ($(HAVE_PYTHON_YAML),yes) ifeq ($(HAVE_PYTHON_YAML),yes)
@echo " QEMU_CONFIG=/path/conf.yml - Change path to VM configuration .yml file." @echo " QEMU_CONFIG=/path/conf.yml - Change path to VM configuration .yml file."
else else
@echo " (install python3-yaml to enable support for yaml file to configure a VM.)" @echo " (install python3-yaml to enable support for yaml file to configure a VM.)"
endif endif
@echo " See conf_example_*.yml for file format details." @echo " See conf_example_*.yml for file format details."
@echo " QEMU_IMG=/path/to/qemu-img - Change path to qemu-img tool"
@echo " QEMU_LOCAL=1 - Use QEMU binary local to this build."
@echo " TARGET_LIST=a,b,c - Override target list in builds"
@echo " V=1 - Enable verbose ouput on host and guest commands"
vm-build-all: $(addprefix vm-build-, $(IMAGES)) vm-build-all: $(addprefix vm-build-, $(IMAGES))