From 7e8e4ff4c0407f9f6cf9c6eea1ae603320e038d0 Mon Sep 17 00:00:00 2001 From: Cole Robinson Date: Jun 16 2021 23:30:28 +0000 Subject: spec: Manually specify every --enable-XXX flag we use This moves the %build section to be closer to RHEL qemu-kvm content. It's a bit tedious but it ensures we enable every feature we actually think we are enabling :) Add some macros to facilitate sharing this layout with the RHEL spec The only functional change is now we use gcrypt instead of nettle. I'm not sure if that was intentional before, but gcrypt is requested on RHEL so I'm guessing that's what we want for Fedora too Signed-off-by: Cole Robinson --- diff --git a/qemu.spec b/qemu.spec index 75b8c35..1d65ba5 100644 --- a/qemu.spec +++ b/qemu.spec @@ -88,6 +88,7 @@ %global have_fdt 1 %global have_opengl 1 %global have_usbredir 1 +%global enable_werror 0 # Matches edk2.spec ExclusiveArch @@ -139,11 +140,24 @@ %define have_block_nfs 1 %endif +%define have_capstone 0 +%if 0%{?fedora} +%define have_capstone 1 +%endif + %define have_librdma 1 %ifarch %{arm} %define have_librdma 0 %endif +# Disable LTO since it caused lots of strange assert failures. +%global _lto_cflags %{nil} + +# OOM killer breaks builds with parallel make on s390(x) +%ifarch s390x +%global _smp_mflags %{nil} +%endif + %define evr %{epoch}:%{version}-%{release} @@ -366,7 +380,7 @@ BuildRequires: SDL2-devel BuildRequires: pulseaudio-libs-devel # alsa audio output BuildRequires: alsa-lib-devel -%if 0%{?fedora} +%if %{have_block_nfs} # NFS drive support BuildRequires: libnfs-devel %endif @@ -404,7 +418,7 @@ BuildRequires: libcacard-devel # virgl 3d support BuildRequires: virglrenderer-devel %endif -%if 0%{?fedora} +%if %{have_capstone} # preferred disassembler for TCG BuildRequires: capstone-devel %endif @@ -1106,6 +1120,11 @@ This package provides the QEMU system emulator for Xtensa boards. %setup -q -n qemu-%{version}%{?rcstr} %autopatch -p1 +%global qemu_kvm_build qemu_kvm_build +mkdir -p %{qemu_kvm_build} +%global static_builddir static_builddir +mkdir -p %{static_builddir} + # https://fedoraproject.org/wiki/Changes/Make_ambiguous_python_shebangs_error # Fix all Python shebangs recursively in . # -p preserves timestamps @@ -1118,115 +1137,322 @@ pathfix.py -pni "%{__python3} %{py3_shbang_opts}" scripts/qemu-trace-stap %build -# Disable LTO since it caused lots of strange assert failures. -%define _lto_cflags %{nil} - -# OOM killer breaks builds with parallel make on s390(x) -%ifarch s390x -%global _smp_mflags %{nil} -%endif - # --build-id option is used for giving info to the debug packages. -extraldflags="-Wl,--build-id"; buildldflags="VL_LDFLAGS=-Wl,--build-id" -# As of qemu 2.1, --enable-trace-backends supports multiple backends, -# but there's a performance impact for non-dtrace so we don't use them -tracebackends="dtrace" - -%if %{have_spice} - %global spiceflag --enable-spice -%else - %global spiceflag --disable-spice -%endif +%define disable_everything \\\ + --audio-drv-list= \\\ + --disable-attr \\\ + --disable-auth-pam \\\ + --disable-avx2 \\\ + --disable-avx512f \\\ + --disable-bochs \\\ + --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-fdt \\\ + --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-jemalloc \\\ + --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-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-sheepdog \\\ + --disable-slirp \\\ + --disable-smartcard \\\ + --disable-snappy \\\ + --disable-sparse \\\ + --disable-spice \\\ + --disable-strip \\\ + --disable-system \\\ + --disable-tcg \\\ + --disable-tcmalloc \\\ + --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 \\\ + --with-git-submodules=ignore \\\ + --without-default-devices run_configure() { - # Base configure call with standard shared options - CC=%{__cc} CXX=%{__cxx} ../configure \ - --prefix=%{_prefix} \ - --libdir=%{_libdir} \ - --sysconfdir=%{_sysconfdir} \ - --localstatedir=%{_localstatedir} \ - --libexecdir=%{_libexecdir} \ - --interp-prefix=%{_prefix}/qemu-%%M \ - --with-pkgversion=%{name}-%{version}-%{release} \ - --extra-ldflags="$extraldflags -Wl,-z,relro -Wl,-z,now" \ + CC=%{__cc} CXX=%{__cxx} ../configure \ + --prefix="%{_prefix}" \ + --libdir="%{_libdir}" \ + --datadir="%{_datadir}" \ + --sysconfdir="%{_sysconfdir}" \ + --interp-prefix=%{_prefix}/qemu-%M \ + --localstatedir="%{_localstatedir}" \ + --docdir="%{_docdir}" \ + --libexecdir="%{_libexecdir}" \ + --extra-ldflags="-Wl,--build-id -Wl,-z,relro -Wl,-z,now" \ --extra-cflags="%{optflags}" \ - --disable-strip \ - --disable-werror \ + --with-pkgversion="%{name}-%{version}-%{release}" \ + --with-suffix="%{name}" \ + --firmwarepath=%{_prefix}/share/qemu-firmware \ + --meson="%{__meson}" \ + --enable-trace-backend=dtrace \ + --with-coroutine=ucontext \ + --with-git=git \ --tls-priority=@QEMU,SYSTEM \ - --enable-trace-backend=$tracebackends \ - "$@" || cat config.log -} - -run_configure_disable_everything() { - # Disable every qemu feature. Callers can --enable-X the bits they need - run_configure \ - --audio-drv-list= \ - --without-default-features \ - --without-default-devices \ - --disable-system \ - --disable-tcg \ - --disable-user \ - --disable-blobs \ - --disable-capstone \ - --disable-fdt \ - --disable-vnc \ - --disable-vnc-jpeg \ - --disable-vnc-png \ - --disable-vhost-kernel \ - --disable-vhost-vdpa \ + %{disable_everything} \ "$@" -} - + echo "config-host.mak contents:" + echo "===" + cat config-host.mak + echo "===" +} -# Build for qemu-user-static -%if %{user_static} -mkdir build-static -pushd build-static -run_configure_disable_everything \ - --disable-pie \ - --enable-attr \ - --enable-linux-user \ - --enable-tcg \ - --static +pushd %{qemu_kvm_build} +run_configure \ +%if %{defined target_list} + --target-list="%{target_list}" \ +%endif +%if %{defined block_drivers_rw_list} + --block-drv-rw-whitelist=%{block_drivers_rw_list} \ +%endif +%if %{defined block_drivers_ro_list} + --block-drv-ro-whitelist=%{block_drivers_ro_list} \ +%endif + --enable-attr \ +%ifarch %{ix86} x86_64 + --enable-avx2 \ +%endif + --enable-cap-ng \ +%if %{have_capstone} + --enable-capstone \ +%endif + --enable-coroutine-pool \ + --enable-curl \ + --enable-debug-info \ + --enable-docs \ +%if %{have_fdt} + --enable-fdt \ +%endif + --enable-gcrypt \ + --enable-gnutls \ + --enable-guest-agent \ + --enable-iconv \ + --enable-kvm \ + --enable-libiscsi \ +%if %{have_pmem} + --enable-libpmem \ +%endif + --enable-libssh \ + --enable-libusb \ + --enable-libudev \ + --enable-linux-aio \ + --enable-lzo \ + --enable-malloc-trim \ + --enable-modules \ + --enable-mpath \ +%if %{have_numactl} + --enable-numa \ +%endif +%if %{have_opengl} + --enable-opengl \ +%endif + --enable-pie \ +%if %{have_block_rbd} + --enable-rbd \ +%endif +%if %{have_librdma} + --enable-rdma \ +%endif + --enable-seccomp \ + --enable-slirp=system \ + --enable-snappy \ + --enable-system \ + --enable-tcg \ + --enable-tools \ + --enable-tpm \ +%if %{have_usbredir} + --enable-usb-redir \ +%endif + --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 \ +%if %{enable_werror} + --enable-werror \ +%endif + --enable-xkbcommon \ + %dnl Fedora specific flags + --audio-drv-list=pa,sdl,alsa,try-jack,oss \ + --target-list-exclude=moxie-softmmu \ + --with-default-devices \ + --enable-auth-pam \ + --enable-bochs \ + --enable-brlapi \ + --enable-bzip2 \ + --enable-cloop \ + --enable-curses \ + --enable-dmg \ + --enable-gio \ + --enable-glusterfs \ + --enable-gtk \ + --enable-libdaxctl \ +%if %{have_block_nfs} + --enable-libnfs \ +%endif + --enable-libudev \ + --enable-libxml2 \ +%if %{have_liburing} + --enable-linux-io-uring \ +%endif + --enable-linux-user \ + --enable-live-block-migration \ + --enable-multiprocess \ + --enable-vnc-jpeg \ + --enable-parallels \ +%if %{have_librdma} + --enable-pvrdma \ +%endif + --enable-qcow1 \ + --enable-qed \ + --enable-qom-cast-debug \ + --enable-replication \ + --enable-sdl \ + --enable-smartcard \ +%if %{have_spice} + --enable-spice \ +%endif + --enable-usb-redir \ + --enable-vdi \ + --enable-vhost-crypto \ + --enable-vhost-scsi \ +%if %{have_virgl} + --enable-virglrenderer \ +%endif + --enable-virtfs \ + --enable-vnc-jpeg \ + --enable-vte \ + --enable-vvfat \ +%if %{have_xen} + --enable-xen \ + --enable-xen-pci-passthrough \ +%endif + --enable-zstd \ make V=1 %{?_smp_mflags} $buildldflags popd -%endif -# Build for non-static qemu-* -mkdir build-dynamic -pushd build-dynamic + +# Fedora build for qemu-user-static +%if %{user_static} +pushd %{static_builddir} run_configure \ - --audio-drv-list=pa,sdl,alsa,try-jack,oss \ - --enable-kvm \ - --enable-system \ - --target-list-exclude=moxie-softmmu \ - --enable-tcg \ - --enable-linux-user \ - --enable-pie \ - --enable-modules \ - --enable-mpath \ - %{spiceflag} \ - --enable-slirp=system - -echo "config-host.mak contents:" -echo "===" -cat config-host.mak -echo "===" + --enable-attr \ + --enable-linux-user \ + --enable-tcg \ + --static make V=1 %{?_smp_mflags} $buildldflags popd - +%endif @@ -1269,7 +1495,7 @@ install -m 0644 %{_sourcedir}/95-kvm-ppc64-memlock.conf %{buildroot}%{_sysconfdi # Install qemu-user-static tree mkdir -p %{buildroot}%{_bindir} %if %{user_static} -pushd build-static +pushd %{static_builddir} make DESTDIR=%{buildroot} install # Rename all QEMU user emulators to have a -static suffix @@ -1291,7 +1517,7 @@ popd # Install main qemu-system-* tree -pushd build-dynamic +pushd %{qemu_kvm_build} make DESTDIR=%{buildroot} install popd %find_lang %{name} @@ -1417,7 +1643,7 @@ chmod +x %{buildroot}%{_libdir}/qemu/*.so perl -i -p -e 's/^(127|267)/# $1/' tests/qemu-iotests/group %endif -pushd build-dynamic +pushd %{qemu_kvm_build} # 2021-06: s390x tests randomly failing with 'Broken pipe' errors # dhorak couldn't reproduce locally on an s390x machine so guessed