From 419868beaf0cb5d8125e89a879028b02809446a7 Mon Sep 17 00:00:00 2001 From: Cole Robinson Date: Jun 24 2019 23:49:43 +0000 Subject: spec: Some cleanups + improvements * Add run_configure_disable_everything * Use it for static builds * Add some comments * Misc style cleanups --- diff --git a/qemu.spec b/qemu.spec index ca9a5d7..39d6e0b 100644 --- a/qemu.spec +++ b/qemu.spec @@ -899,6 +899,7 @@ This package provides the QEMU system emulator for Xtensa boards. + %prep %setup -q -n qemu-%{version}%{?rcstr} %autopatch -p1 @@ -912,6 +913,8 @@ This package provides the QEMU system emulator for Xtensa boards. pathfix.py -pni "%{__python3} %{py3_shbang_opts}" scripts/qemu-trace-stap + + %build # drop -g flag to prevent memory exhaustion by linker @@ -925,7 +928,6 @@ sed -i.debug 's/"-g $CFLAGS"/"$CFLAGS"/g' configure %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" @@ -940,7 +942,9 @@ tracebackends="dtrace" %global spiceflag --disable-spice %endif + run_configure() { + # Base configure call with standard shared options ../configure \ --prefix=%{_prefix} \ --libdir=%{_libdir} \ @@ -949,34 +953,141 @@ run_configure() { --libexecdir=%{_libexecdir} \ --interp-prefix=%{_prefix}/qemu-%%M \ --with-pkgversion=%{name}-%{version}-%{release} \ + --extra-ldflags="$extraldflags -Wl,-z,relro -Wl,-z,now" \ + --extra-cflags="%{optflags}" \ + --python=%{__python3} \ --disable-strip \ --disable-werror \ - --enable-kvm \ - --python=%{__python3} \ -%ifarch s390 %{mips64} - --enable-tcg-interpreter \ -%endif + --tls-priority=@QEMU,SYSTEM \ --enable-trace-backend=$tracebackends \ - --extra-ldflags="$extraldflags -Wl,-z,relro -Wl,-z,now" \ - --extra-cflags="%{optflags}" \ -%if 0%{?fedora} > 30 - --enable-slirp=system \ -%endif "$@" || cat config.log } +run_configure_disable_everything() { + # Disable every qemu feature. Callers can --enable-X the bits they need + run_configure \ + --audio-drv-list= \ + --disable-attr \ + --disable-auth-pam \ + --disable-avx2 \ + --disable-blobs \ + --disable-bluez \ + --disable-bochs \ + --disable-brlapi \ + --disable-bsd-user \ + --disable-bzip2 \ + --disable-cap-ng \ + --disable-capstone \ + --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-gcrypt \ + --disable-glusterfs \ + --disable-gnutls \ + --disable-gtk \ + --disable-guest-agent \ + --disable-guest-agent-msi \ + --disable-hax \ + --disable-hvf \ + --disable-iconv \ + --disable-jemalloc \ + --disable-kvm \ + --disable-libiscsi \ + --disable-libnfs \ + --disable-libpmem \ + --disable-libssh2 \ + --disable-libusb \ + --disable-libxml2 \ + --disable-linux-aio \ + --disable-linux-user \ + --disable-live-block-migration \ + --disable-lzfse \ + --disable-lzo \ + --disable-membarrier \ + --disable-modules \ + --disable-mpath \ + --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-sdl \ + --disable-sdl-image \ + --disable-seccomp \ + --disable-sheepdog \ + --disable-slirp \ + --disable-smartcard \ + --disable-snappy \ + --disable-sparse \ + --disable-spice \ + --disable-system \ + --disable-tcmalloc \ + --disable-tools \ + --disable-tpm \ + --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-vsock \ + --disable-virglrenderer \ + --disable-virtfs \ + --disable-vnc \ + --disable-vnc-jpeg \ + --disable-vnc-png \ + --disable-vnc-sasl \ + --disable-vte \ + --disable-vvfat \ + --disable-vxhs \ + --disable-whpx \ + --disable-xen \ + --disable-xen-pci-passthrough \ + --disable-xfsctl \ + --without-default-devices \ + "$@" +} + + +# Build for non-static qemu-* mkdir build-dynamic pushd build-dynamic run_configure \ + --audio-drv-list=pa,sdl,alsa,oss \ + --enable-kvm \ --enable-system \ --enable-linux-user \ --enable-pie \ --enable-modules \ - --audio-drv-list=pa,sdl,alsa,oss \ - --tls-priority=@QEMU,SYSTEM \ --enable-mpath \ - %{spiceflag} + %{spiceflag} \ +%ifarch s390 %{mips64} + --enable-tcg-interpreter \ +%endif +%if 0%{?fedora} > 30 + --enable-slirp=system \ +%endif echo "config-host.mak contents:" echo "===" @@ -987,38 +1098,23 @@ make V=1 %{?_smp_mflags} $buildldflags popd + +# Build for qemu-user-static %if %{user_static} mkdir build-static pushd build-static -run_configure \ - --disable-system \ - --enable-linux-user \ - --static \ +run_configure_disable_everything \ --disable-pie \ - --disable-sdl \ - --disable-gtk \ - --disable-spice \ - --disable-tools \ - --disable-guest-agent \ - --disable-guest-agent-msi \ - --disable-curses \ - --disable-curl \ - --disable-gnutls \ - --disable-gcrypt \ - --disable-nettle \ - --disable-cap-ng \ - --disable-brlapi \ - --disable-mpath \ - --disable-libnfs \ - --disable-capstone \ - --disable-xen \ - --disable-rdma + --enable-linux-user \ + --static make V=1 %{?_smp_mflags} $buildldflags popd -%endif +%endif # user_static + + %install @@ -1026,48 +1122,50 @@ popd %global _udevdir /lib/udev/rules.d %global qemudocdir %{_docdir}/%{name} -mkdir -p %{buildroot}%{_udevdir} -mkdir -p %{buildroot}%{_unitdir} -mkdir -p %{buildroot}%{_sysconfdir}/qemu + +# Install rules to use the bridge helper with libvirt's virbr0 +install -D -m 0644 %{_sourcedir}/bridge.conf %{buildroot}%{_sysconfdir}/qemu/bridge.conf + # Install qemu-guest-agent service and udev rules -install -p -m 0644 %{_sourcedir}/qemu-guest-agent.service %{buildroot}%{_unitdir} +install -D -p -m 0644 %{_sourcedir}/qemu-guest-agent.service %{buildroot}%{_unitdir}/qemu-guest-agent.service install -D -p -m 0644 %{_sourcedir}/qemu-ga.sysconfig %{buildroot}%{_sysconfdir}/sysconfig/qemu-ga -install -m 0644 %{_sourcedir}/99-qemu-guest-agent.rules %{buildroot}%{_udevdir} +install -D -m 0644 %{_sourcedir}/99-qemu-guest-agent.rules %{buildroot}%{_udevdir}/99-qemu-guest-agent.rules + +# Install qemu-ga fsfreeze bits mkdir -p %{buildroot}%{_sysconfdir}/qemu-ga/fsfreeze-hook.d install -p -m 0755 scripts/qemu-guest-agent/fsfreeze-hook %{buildroot}%{_sysconfdir}/qemu-ga install -p -m 0644 scripts/qemu-guest-agent/fsfreeze-hook.d/*.sample %{buildroot}%{_sysconfdir}/qemu-ga/fsfreeze-hook.d/ mkdir -p %{buildroot}%{_localstatedir}/log touch %{buildroot}%{_localstatedir}/log/qga-fsfreeze-hook.log + # Install qemu-pr-helper service install -m 0644 %{_sourcedir}/qemu-pr-helper.service %{buildroot}%{_unitdir} install -m 0644 %{_sourcedir}/qemu-pr-helper.socket %{buildroot}%{_unitdir} + +# Install ppc64 memlock %ifarch %{power64} install -d %{buildroot}%{_sysconfdir}/security/limits.d install -m 0644 %{_sourcedir}/95-kvm-ppc64-memlock.conf %{buildroot}%{_sysconfdir}/security/limits.d %endif -# Install kvm specific bits -%if %{have_kvm} -mkdir -p %{buildroot}%{_bindir}/ -%endif - +# Install qemu-user-static tree +mkdir -p %{buildroot}%{_bindir} %if %{user_static} pushd build-static make DESTDIR=%{buildroot} install -# Give all QEMU user emulators a -static suffix +# Rename all QEMU user emulators to have a -static suffix for src in %{buildroot}%{_bindir}/qemu-* do mv $src $src-static done -# Update trace files to match - +# Rename trace files to match -static suffix for src in %{buildroot}%{_datadir}/systemtap/tapset/qemu-*.stp do dst=`echo $src | sed -e 's/.stp/-static.stp/'` @@ -1075,29 +1173,53 @@ do perl -i -p -e 's/(qemu-\w+)/$1-static/g; s/(qemu\.user\.\w+)/$1.static/g' $dst done - popd -%endif +%endif # user_static + +# Install main qemu-system-* tree pushd build-dynamic make DESTDIR=%{buildroot} install popd - %find_lang %{name} -chmod -x %{buildroot}%{_mandir}/man1/* + +# Copy some static data into place install -D -p -m 0644 -t %{buildroot}%{qemudocdir} Changelog README COPYING COPYING.LIB LICENSE +install -D -p -m 0644 qemu.sasl %{buildroot}%{_sysconfdir}/sasl2/qemu.conf + + +# Generate qemu-system-* man pages +chmod -x %{buildroot}%{_mandir}/man1/* for emu in %{buildroot}%{_bindir}/qemu-system-*; do ln -sf qemu.1.gz %{buildroot}%{_mandir}/man1/$(basename $emu).1.gz done + +# Install kvm specific source bits, and qemu-kvm manpage %if 0%{?need_qemu_kvm} -install -m 0755 %{_sourcedir}/qemu-kvm.sh %{buildroot}%{_bindir}/qemu-kvm ln -sf qemu.1.gz %{buildroot}%{_mandir}/man1/qemu-kvm.1.gz +install -m 0755 %{_sourcedir}/qemu-kvm.sh %{buildroot}%{_bindir}/qemu-kvm install -D -p -m 0644 %{_sourcedir}/kvm-x86.modprobe.conf %{buildroot}%{_sysconfdir}/modprobe.d/kvm.conf %endif -install -D -p -m 0644 qemu.sasl %{buildroot}%{_sysconfdir}/sasl2/qemu.conf + +# Install binfmt +%global binfmt_dir %{buildroot}%{_exec_prefix}/lib/binfmt.d +mkdir -p %{binfmt_dir} + +./scripts/qemu-binfmt-conf.sh --systemd ALL --exportdir %{binfmt_dir} --qemu-path %{_bindir} +for i in %{binfmt_dir}/*; do + mv $i $(echo $i | sed 's/.conf/-dynamic.conf/') +done + +%if %{user_static} +for regularfmt in %{binfmt_dir}/*; do + staticfmt="$(echo $regularfmt | sed 's/-dynamic/-static/g')" + cat $regularfmt | tr -d '\n' | sed "s/:$/-static:F/" > $staticfmt +done +%endif + # XXX With qemu 2.11 we can probably drop this symlinking with use of # configure --firmwarepath, see qemu git 3d5eecab4 @@ -1149,25 +1271,6 @@ rom_link ../seabios/bios.bin bios.bin rom_link ../seabios/bios-256k.bin bios-256k.bin rom_link ../sgabios/sgabios.bin sgabios.bin -# Install binfmt -%global binfmt_dir %{buildroot}%{_exec_prefix}/lib/binfmt.d -mkdir -p %{binfmt_dir} - -./scripts/qemu-binfmt-conf.sh --systemd ALL --exportdir %{binfmt_dir} --qemu-path %{_bindir} -for i in %{binfmt_dir}/*; do - mv $i $(echo $i | sed 's/.conf/-dynamic.conf/') -done - -%if %{user_static} -for regularfmt in %{binfmt_dir}/*; do - staticfmt="$(echo $regularfmt | sed 's/-dynamic/-static/g')" - cat $regularfmt | tr -d '\n' | sed "s/:$/-static:F/" > $staticfmt -done -%endif - - -# Install rules to use the bridge helper with libvirt's virbr0 -install -m 0644 %{_sourcedir}/bridge.conf %{buildroot}%{_sysconfdir}/qemu # When building using 'rpmbuild' or 'fedpkg local', RPATHs can be left in # the binaries and libraries (although this doesn't occur when @@ -1182,13 +1285,14 @@ for f in %{buildroot}%{_bindir}/* %{buildroot}%{_libdir}/* \ if file $f | grep -q ELF | grep -q -i shared; then chrpath --delete $f; fi done + # We need to make the modules executable else # RPM won't pick up their dependencies. chmod +x %{buildroot}%{_libdir}/qemu/*.so -%check +%check # Tests are hanging on s390 as of 2.3.0 # https://bugzilla.redhat.com/show_bug.cgi?id=1206057 # Tests seem to be a recurring problem on s390, so I'd suggest just leaving