summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'app-emulation/qemu/qemu-9999.ebuild')
-rw-r--r--app-emulation/qemu/qemu-9999.ebuild511
1 files changed, 326 insertions, 185 deletions
diff --git a/app-emulation/qemu/qemu-9999.ebuild b/app-emulation/qemu/qemu-9999.ebuild
index df162166cbf8..381a891e0191 100644
--- a/app-emulation/qemu/qemu-9999.ebuild
+++ b/app-emulation/qemu/qemu-9999.ebuild
@@ -1,67 +1,131 @@
-# Copyright 1999-2020 Gentoo Authors
+# Copyright 1999-2024 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
-EAPI="7"
+EAPI=8
-PYTHON_COMPAT=( python{3_6,3_7,3_8} )
+# Generate using https://github.com/thesamesam/sam-gentoo-scripts/blob/main/niche/generate-qemu-docs
+# Set to 1 if prebuilt, 0 if not
+# (the construct below is to allow overriding from env for script)
+QEMU_DOCS_PREBUILT=${QEMU_DOCS_PREBUILT:-0}
+QEMU_DOCS_PREBUILT_DEV=sam
+QEMU_DOCS_VERSION=$(ver_cut 1-3)
+# Default to generating docs (inc. man pages) if no prebuilt; overridden later
+# bug #830088
+QEMU_DOC_USEFLAG="+doc"
+
+PYTHON_COMPAT=( python3_{10..12} )
PYTHON_REQ_USE="ncurses,readline"
-PLOCALES="bg de_DE fr_FR hu it sv tr zh_CN"
+FIRMWARE_ABI_VERSION="7.2.0"
-FIRMWARE_ABI_VERSION="4.0.0-r50"
+inherit linux-info toolchain-funcs python-r1 udev fcaps readme.gentoo-r1 \
+ pax-utils xdg-utils
-inherit eutils linux-info toolchain-funcs multilib python-r1 \
- udev fcaps readme.gentoo-r1 pax-utils l10n xdg-utils
+if [[ ${PV} == *9999* ]]; then
+ QEMU_DOCS_PREBUILT=0
-if [[ ${PV} = *9999* ]]; then
- EGIT_REPO_URI="https://git.qemu.org/git/qemu.git"
- EGIT_SUBMODULES=(
- meson
- tests/fp/berkeley-softfloat-3
- tests/fp/berkeley-testfloat-3
- ui/keycodemapdb
- )
+ EGIT_REPO_URI="https://gitlab.com/qemu-project/qemu.git/"
+ EGIT_SUBMODULES=()
inherit git-r3
SRC_URI=""
+ declare -A SUBPROJECTS=(
+ [keycodemapdb]="f5772a62ec52591ff6870b7e8ef32482371f22c6"
+ [berkeley-softfloat-3]="b64af41c3276f97f0e181920400ee056b9c88037"
+ [berkeley-testfloat-3]="40619cbb3bf32872df8c53cc457039229428a263"
+ )
+
+ for proj in "${!SUBPROJECTS[@]}"; do
+ c=${SUBPROJECTS[${proj}]}
+ SRC_URI+=" https://gitlab.com/qemu-project/${proj}/-/archive/${c}/${proj}-${c}.tar.bz2"
+ done
else
- SRC_URI="https://download.qemu.org/${P}.tar.xz"
- KEYWORDS="~amd64 ~arm64 ~ppc ~ppc64 ~x86"
+ MY_P="${PN}-${PV/_rc/-rc}"
+ SRC_URI="https://download.qemu.org/${MY_P}.tar.xz"
+
+ if [[ ${QEMU_DOCS_PREBUILT} == 1 ]] ; then
+ SRC_URI+=" !doc? ( https://dev.gentoo.org/~${QEMU_DOCS_PREBUILT_DEV}/distfiles/${CATEGORY}/${PN}/${PN}-${QEMU_DOCS_VERSION}-docs.tar.xz )"
+ fi
+
+ S="${WORKDIR}/${MY_P}"
+ [[ "${PV}" != *_rc* ]] && KEYWORDS="~amd64 ~arm ~arm64 ~loong ~ppc ~ppc64 ~riscv ~x86"
fi
DESCRIPTION="QEMU + Kernel-based Virtual Machine userland tools"
-HOMEPAGE="http://www.qemu.org http://www.linux-kvm.org"
+HOMEPAGE="https://www.qemu.org https://www.linux-kvm.org"
LICENSE="GPL-2 LGPL-2 BSD-2"
SLOT="0"
-IUSE="accessibility +aio alsa bzip2 capstone +caps +curl debug doc
- +fdt glusterfs gnutls gtk infiniband iscsi io-uring
- jack jemalloc +jpeg kernel_linux
- kernel_FreeBSD lzo multipath
- ncurses nfs nls numa opengl +oss +pin-upstream-blobs
+[[ ${QEMU_DOCS_PREBUILT} == 1 ]] && QEMU_DOC_USEFLAG="doc"
+
+IUSE="accessibility +aio alsa bpf bzip2 capstone +curl debug ${QEMU_DOC_USEFLAG}
+ +fdt fuse glusterfs +gnutls gtk infiniband iscsi io-uring
+ jack jemalloc +jpeg keyutils
+ lzo multipath
+ ncurses nfs nls numa opengl +oss pam +pin-upstream-blobs pipewire
plugins +png pulseaudio python rbd sasl +seccomp sdl sdl-image selinux
+slirp
- smartcard snappy spice ssh static static-user systemtap tci test usb
- usbredir vde +vhost-net vhost-user-fs virgl virtfs +vnc vte xattr xen
- xfs +xkb zstd"
-
-COMMON_TARGETS="aarch64 alpha arm cris hppa i386 m68k microblaze microblazeel
- mips mips64 mips64el mipsel nios2 or1k ppc ppc64 riscv32 riscv64 s390x
- sh4 sh4eb sparc sparc64 x86_64 xtensa xtensaeb"
-IUSE_SOFTMMU_TARGETS="${COMMON_TARGETS}
- avr lm32 moxie rx tricore unicore32"
-IUSE_USER_TARGETS="${COMMON_TARGETS}
- aarch64_be armeb mipsn32 mipsn32el ppc64abi32 ppc64le sparc32plus
- tilegx"
+ smartcard snappy spice ssh static-user systemtap test udev usb
+ usbredir vde +vhost-net virgl virtfs +vnc vte xattr xen
+ zstd"
+
+COMMON_TARGETS="
+ aarch64
+ alpha
+ arm
+ cris
+ hppa
+ i386
+ loongarch64
+ m68k
+ microblaze
+ microblazeel
+ mips
+ mips64
+ mips64el
+ mipsel
+ nios2
+ or1k
+ ppc
+ ppc64
+ riscv32
+ riscv64
+ s390x
+ sh4
+ sh4eb
+ sparc
+ sparc64
+ x86_64
+ xtensa
+ xtensaeb
+"
+IUSE_SOFTMMU_TARGETS="
+ ${COMMON_TARGETS}
+ avr
+ rx
+ tricore
+"
+IUSE_USER_TARGETS="
+ ${COMMON_TARGETS}
+ aarch64_be
+ armeb
+ hexagon
+ mipsn32
+ mipsn32el
+ ppc64le
+ sparc32plus
+"
use_softmmu_targets=$(printf ' qemu_softmmu_targets_%s' ${IUSE_SOFTMMU_TARGETS})
use_user_targets=$(printf ' qemu_user_targets_%s' ${IUSE_USER_TARGETS})
IUSE+=" ${use_softmmu_targets} ${use_user_targets}"
RESTRICT="!test? ( test )"
+
# Allow no targets to be built so that people can get a tools-only build.
# Block USE flag configurations known to not work.
-REQUIRED_USE="${PYTHON_REQUIRED_USE}
+REQUIRED_USE="
+ ${PYTHON_REQUIRED_USE}
qemu_softmmu_targets_arm? ( fdt )
qemu_softmmu_targets_microblaze? ( fdt )
qemu_softmmu_targets_mips64el? ( fdt )
@@ -69,12 +133,19 @@ REQUIRED_USE="${PYTHON_REQUIRED_USE}
qemu_softmmu_targets_ppc? ( fdt )
qemu_softmmu_targets_riscv32? ( fdt )
qemu_softmmu_targets_riscv64? ( fdt )
- static? ( static-user !alsa !gtk !jack !opengl !pulseaudio !plugins !rbd !snappy )
+ qemu_softmmu_targets_x86_64? ( fdt )
+ sdl-image? ( sdl )
static-user? ( !plugins )
- virtfs? ( caps xattr )
+ virgl? ( opengl )
+ virtfs? ( xattr )
+ vnc? ( gnutls )
vte? ( gtk )
- plugins? ( !static !static-user )
+ multipath? ( udev )
+ plugins? ( !static-user )
"
+for smname in ${IUSE_SOFTMMU_TARGETS} ; do
+ REQUIRED_USE+=" qemu_softmmu_targets_${smname}? ( kernel_linux? ( seccomp ) )"
+done
# Dependencies required for qemu tools (qemu-nbd, qemu-img, qemu-io, ...)
# and user/softmmu targets (qemu-*, qemu-system-*).
@@ -85,17 +156,16 @@ REQUIRED_USE="${PYTHON_REQUIRED_USE}
# respected). This is because qemu supports using the C library's API
# when available rather than always using the external library.
ALL_DEPEND="
- >=dev-libs/glib-2.0[static-libs(+)]
+ dev-libs/glib:2[static-libs(+)]
sys-libs/zlib[static-libs(+)]
python? ( ${PYTHON_DEPS} )
- systemtap? ( dev-util/systemtap )
- xattr? ( sys-apps/attr[static-libs(+)] )"
+ systemtap? ( dev-debug/systemtap )
+ xattr? ( sys-apps/attr[static-libs(+)] )
+"
# Dependencies required for qemu tools (qemu-nbd, qemu-img, qemu-io, ...)
# softmmu targets (qemu-system-*).
SOFTMMU_TOOLS_DEPEND="
- dev-libs/libxml2[static-libs(+)]
- xkb? ( x11-libs/libxkbcommon[static-libs(+)] )
>=x11-libs/pixman-0.28.0[static-libs(+)]
accessibility? (
app-accessibility/brltty[api]
@@ -103,35 +173,34 @@ SOFTMMU_TOOLS_DEPEND="
)
aio? ( dev-libs/libaio[static-libs(+)] )
alsa? ( >=media-libs/alsa-lib-1.0.13 )
+ bpf? ( dev-libs/libbpf:= )
bzip2? ( app-arch/bzip2[static-libs(+)] )
- capstone? ( dev-libs/capstone:= )
- caps? ( sys-libs/libcap-ng[static-libs(+)] )
+ capstone? ( dev-libs/capstone:=[static-libs(+)] )
curl? ( >=net-misc/curl-7.15.4[static-libs(+)] )
- fdt? ( >=sys-apps/dtc-1.5.0[static-libs(+)] )
+ fdt? ( >=sys-apps/dtc-1.5.1[static-libs(+)] )
+ fuse? ( >=sys-fs/fuse-3.1:3[static-libs(+)] )
glusterfs? ( >=sys-cluster/glusterfs-3.4.0[static-libs(+)] )
gnutls? (
- dev-libs/nettle:=[static-libs(+)]
>=net-libs/gnutls-3.0:=[static-libs(+)]
+ dev-libs/nettle:=[static-libs(+)]
)
gtk? (
x11-libs/gtk+:3
vte? ( x11-libs/vte:2.91 )
)
- infiniband? (
- sys-fabric/libibumad:=[static-libs(+)]
- sys-fabric/libibverbs:=[static-libs(+)]
- sys-fabric/librdmacm:=[static-libs(+)]
- )
+ infiniband? ( sys-cluster/rdma-core[static-libs(+)] )
iscsi? ( net-libs/libiscsi )
- io-uring? ( sys-libs/liburing[static-libs(+)] )
+ io-uring? ( sys-libs/liburing:=[static-libs(+)] )
jack? ( virtual/jack )
jemalloc? ( dev-libs/jemalloc )
- jpeg? ( virtual/jpeg:0=[static-libs(+)] )
+ jpeg? ( media-libs/libjpeg-turbo:=[static-libs(+)] )
+ kernel_linux? ( sys-libs/libcap-ng[static-libs(+)] )
+ keyutils? ( sys-apps/keyutils[static-libs(+)] )
lzo? ( dev-libs/lzo:2[static-libs(+)] )
multipath? ( sys-fs/multipath-tools )
ncurses? (
- sys-libs/ncurses:0=[unicode]
- sys-libs/ncurses:0=[static-libs(+)]
+ sys-libs/ncurses:=[unicode(+)]
+ sys-libs/ncurses:=[static-libs(+)]
)
nfs? ( >=net-fs/libnfs-1.9.3:=[static-libs(+)] )
numa? ( sys-process/numactl[static-libs(+)] )
@@ -139,10 +208,12 @@ SOFTMMU_TOOLS_DEPEND="
virtual/opengl
media-libs/libepoxy[static-libs(+)]
media-libs/mesa[static-libs(+)]
- media-libs/mesa[egl,gbm]
+ media-libs/mesa[egl(+),gbm(+)]
)
- png? ( media-libs/libpng:0=[static-libs(+)] )
- pulseaudio? ( media-sound/pulseaudio )
+ pam? ( sys-libs/pam )
+ pipewire? ( >=media-video/pipewire-0.3.60 )
+ png? ( >=media-libs/libpng-1.6.34:=[static-libs(+)] )
+ pulseaudio? ( media-libs/libpulse )
rbd? ( sys-cluster/ceph )
sasl? ( dev-libs/cyrus-sasl[static-libs(+)] )
sdl? (
@@ -155,78 +226,101 @@ SOFTMMU_TOOLS_DEPEND="
smartcard? ( >=app-emulation/libcacard-2.5.0[static-libs(+)] )
snappy? ( app-arch/snappy:= )
spice? (
- >=app-emulation/spice-protocol-0.12.3
- >=app-emulation/spice-0.12.0[static-libs(+)]
+ >=app-emulation/spice-protocol-0.14.0
+ >=app-emulation/spice-0.14.0[static-libs(+)]
)
ssh? ( >=net-libs/libssh-0.8.6[static-libs(+)] )
- usb? ( >=virtual/libusb-1-r2[static-libs(+)] )
+ udev? ( virtual/libudev:= )
+ usb? ( >=virtual/libusb-1-r2:1[static-libs(+)] )
usbredir? ( >=sys-apps/usbredir-0.6[static-libs(+)] )
vde? ( net-misc/vde[static-libs(+)] )
virgl? ( media-libs/virglrenderer[static-libs(+)] )
virtfs? ( sys-libs/libcap )
xen? ( app-emulation/xen-tools:= )
- xfs? ( sys-fs/xfsprogs[static-libs(+)] )
zstd? ( >=app-arch/zstd-1.4.0[static-libs(+)] )
"
+EDK2_OVMF_VERSION="202202"
+SEABIOS_VERSION="1.16.0"
+
X86_FIRMWARE_DEPEND="
pin-upstream-blobs? (
- ~sys-firmware/edk2-ovmf-201905[binary]
- ~sys-firmware/ipxe-1.0.0_p20190728[binary]
- ~sys-firmware/seabios-1.12.0[binary,seavgabios]
- ~sys-firmware/sgabios-0.1_pre8[binary]
+ ~sys-firmware/edk2-ovmf-bin-${EDK2_OVMF_VERSION}
+ ~sys-firmware/ipxe-1.21.1[binary,qemu]
+ ~sys-firmware/seabios-bin-${SEABIOS_VERSION}
+ ~sys-firmware/sgabios-0.1_pre10[binary]
)
!pin-upstream-blobs? (
- sys-firmware/edk2-ovmf
- sys-firmware/ipxe
- >=sys-firmware/seabios-1.10.2[seavgabios]
+ || (
+ >=sys-firmware/edk2-ovmf-${EDK2_OVMF_VERSION}
+ >=sys-firmware/edk2-ovmf-bin-${EDK2_OVMF_VERSION}
+ )
+ sys-firmware/ipxe[qemu]
+ || (
+ >=sys-firmware/seabios-${SEABIOS_VERSION}[seavgabios]
+ >=sys-firmware/seabios-bin-${SEABIOS_VERSION}
+ )
sys-firmware/sgabios
- )"
-PPC64_FIRMWARE_DEPEND="
+ )
+"
+PPC_FIRMWARE_DEPEND="
pin-upstream-blobs? (
- ~sys-firmware/seabios-1.12.0[binary,seavgabios]
+ ~sys-firmware/seabios-bin-${SEABIOS_VERSION}
)
!pin-upstream-blobs? (
- >=sys-firmware/seabios-1.10.2[seavgabios]
+ || (
+ >=sys-firmware/seabios-${SEABIOS_VERSION}[seavgabios]
+ >=sys-firmware/seabios-bin-${SEABIOS_VERSION}
+ )
)
"
+# See bug #913084 for pip dep
BDEPEND="
$(python_gen_impl_dep)
dev-lang/perl
- sys-apps/texinfo
+ >=dev-build/meson-0.63.0
+ app-alternatives/ninja
+ dev-python/pip[${PYTHON_USEDEP}]
virtual/pkgconfig
- doc? ( dev-python/sphinx )
+ doc? (
+ >=dev-python/sphinx-1.6.0[${PYTHON_USEDEP}]
+ dev-python/sphinx-rtd-theme[${PYTHON_USEDEP}]
+ )
gtk? ( nls? ( sys-devel/gettext ) )
test? (
dev-libs/glib[utils]
- sys-devel/bc
+ app-alternatives/bc
)
"
CDEPEND="
- !static? (
- ${ALL_DEPEND//\[static-libs(+)]}
- ${SOFTMMU_TOOLS_DEPEND//\[static-libs(+)]}
- )
+ ${ALL_DEPEND//\[static-libs(+)]}
+ ${SOFTMMU_TOOLS_DEPEND//\[static-libs(+)]}
qemu_softmmu_targets_i386? ( ${X86_FIRMWARE_DEPEND} )
qemu_softmmu_targets_x86_64? ( ${X86_FIRMWARE_DEPEND} )
- qemu_softmmu_targets_ppc64? ( ${PPC64_FIRMWARE_DEPEND} )
+ qemu_softmmu_targets_ppc? ( ${PPC_FIRMWARE_DEPEND} )
+ qemu_softmmu_targets_ppc64? ( ${PPC_FIRMWARE_DEPEND} )
"
-DEPEND="${CDEPEND}
+DEPEND="
+ ${CDEPEND}
kernel_linux? ( >=sys-kernel/linux-headers-2.6.35 )
- static? (
- ${ALL_DEPEND}
- ${SOFTMMU_TOOLS_DEPEND}
- )
- static-user? ( ${ALL_DEPEND} )"
-RDEPEND="${CDEPEND}
+ static-user? ( ${ALL_DEPEND} )
+"
+RDEPEND="
+ ${CDEPEND}
acct-group/kvm
- selinux? ( sec-policy/selinux-qemu )"
+ selinux? (
+ sec-policy/selinux-qemu
+ sys-libs/libselinux
+ )
+"
PATCHES=(
- "${FILESDIR}"/${PN}-2.11.1-capstone_include_path.patch
- "${FILESDIR}"/${PN}-9999-cflags.patch
- "${FILESDIR}"/${PN}-9999-format-error.patch
+ "${FILESDIR}"/${PN}-8.0.0-disable-keymap.patch
+ "${FILESDIR}"/${PN}-7.1.0-capstone-include-path.patch
+ "${FILESDIR}"/${PN}-8.1.0-also-build-virtfs-proxy-helper.patch
+ "${FILESDIR}"/${PN}-8.1.0-skip-tests.patch
+ "${FILESDIR}"/${PN}-8.1.0-find-sphinx.patch
)
QA_PREBUILT="
@@ -234,12 +328,16 @@ QA_PREBUILT="
usr/share/qemu/openbios-ppc
usr/share/qemu/openbios-sparc64
usr/share/qemu/openbios-sparc32
+ usr/share/qemu/opensbi-riscv64-generic-fw_dynamic.elf
+ usr/share/qemu/opensbi-riscv32-generic-fw_dynamic.elf
usr/share/qemu/palcode-clipper
usr/share/qemu/s390-ccw.img
usr/share/qemu/s390-netboot.img
- usr/share/qemu/u-boot.e500"
+ usr/share/qemu/u-boot.e500
+"
-QA_WX_LOAD="usr/bin/qemu-i386
+QA_WX_LOAD="
+ usr/bin/qemu-i386
usr/bin/qemu-x86_64
usr/bin/qemu-alpha
usr/bin/qemu-arm
@@ -252,7 +350,6 @@ QA_WX_LOAD="usr/bin/qemu-i386
usr/bin/qemu-or1k
usr/bin/qemu-ppc
usr/bin/qemu-ppc64
- usr/bin/qemu-ppc64abi32
usr/bin/qemu-sh4
usr/bin/qemu-sh4eb
usr/bin/qemu-sparc
@@ -260,7 +357,8 @@ QA_WX_LOAD="usr/bin/qemu-i386
usr/bin/qemu-armeb
usr/bin/qemu-sparc32plus
usr/bin/qemu-s390x
- usr/bin/qemu-unicore32"
+ usr/bin/qemu-unicore32
+"
DOC_CONTENTS="If you don't have kvm compiled into the kernel, make sure you have the
kernel module loaded before running kvm. The easiest way to ensure that the
@@ -304,6 +402,8 @@ pkg_pretend() {
use vhost-net && CONFIG_CHECK+=" ~VHOST_NET"
ERROR_VHOST_NET="You must enable VHOST_NET to have vhost-net"
ERROR_VHOST_NET+=" support"
+ use test && CONFIG_CHECK+=" IP_MULTICAST"
+ ERROR_IP_MULTICAST="Test suite requires IP_MULTICAST"
if use amd64 || use x86 || use amd64-linux || use x86-linux; then
if grep -q AuthenticAMD /proc/cpuinfo; then
@@ -335,7 +435,7 @@ check_targets() {
local var=$1 mak=$2
local detected sorted
- pushd "${S}"/default-configs >/dev/null || die
+ pushd "${S}"/configs/targets/ >/dev/null || die
# Force C locale until glibc is updated. #564936
detected=$(echo $(printf '%s\n' *-${mak}.mak | sed "s:-${mak}.mak::" | LC_COLLATE=C sort -u))
@@ -350,26 +450,20 @@ check_targets() {
popd >/dev/null
}
-handle_locales() {
- # Make sure locale list is kept up-to-date.
- local detected sorted
- detected=$(echo $(cd po && printf '%s\n' *.po | grep -v messages.po | sed 's:.po$::' | sort -u))
- sorted=$(echo $(printf '%s\n' ${PLOCALES} | sort -u))
- if [[ ${sorted} != "${detected}" ]] ; then
- eerror "The ebuild needs to be kept in sync."
- eerror "PLOCALES: ${sorted}"
- eerror " po/*.po: ${detected}"
- die "sync PLOCALES"
- fi
-
- # Deal with selective install of locales.
- if use nls ; then
- # Delete locales the user does not want. #577814
- rm_loc() { rm po/$1.po || die; }
- l10n_for_each_disabled_locale_do rm_loc
+src_unpack() {
+ if [[ ${PV} == 9999 ]] ; then
+ git-r3_src_unpack
+ for file in ${A}; do
+ unpack "${file}"
+ done
+ cd "${WORKDIR}" || die
+ for proj in "${!SUBPROJECTS[@]}"; do
+ mv "${proj}-${SUBPROJECTS[${proj}]}" "${S}/subprojects/${proj}" || die
+ done
+ cd "${S}" || die
+ meson subprojects packagefiles --apply || die
else
- # Cheap hack to disable gettext .mo generation.
- rm -f po/*.po
+ default
fi
}
@@ -380,17 +474,14 @@ src_prepare() {
default
# Use correct toolchain to fix cross-compiling
- tc-export AR AS LD NM OBJCOPY PKG_CONFIG RANLIB
+ tc-export AR AS LD NM OBJCOPY PKG_CONFIG RANLIB STRINGS
export WINDRES=${CHOST}-windres
# Verbose builds
MAKEOPTS+=" V=1"
- # Run after we've applied all patches.
- handle_locales
-
- # Remove bundled copy of libfdt
- rm -r dtc || die
+ # Remove bundled modules
+ rm -r roms/*/ || die
}
##
@@ -403,7 +494,7 @@ qemu_src_configure() {
local buildtype=$1
local builddir="${S}/${buildtype}-build"
- mkdir "${builddir}"
+ mkdir "${builddir}" || die
local conf_opts=(
--prefix=/usr
@@ -418,21 +509,38 @@ qemu_src_configure() {
--disable-containers # bug #732972
--disable-guest-agent
--disable-strip
+ --disable-download
+
+ # bug #746752: TCG interpreter has a few limitations:
+ # - it does not support FPU
+ # - it's generally slower on non-self-modifying code
+ # It's advantage is support for host architectures
+ # where native codegeneration is not implemented.
+ # Gentoo has qemu keyworded only on targets with
+ # native code generation available. Avoid the interpreter.
+ --disable-tcg-interpreter
+
--disable-werror
# We support gnutls/nettle for crypto operations. It is possible
# to use gcrypt when gnutls/nettle are disabled (but not when they
# are enabled), but it's not really worth the hassle. Disable it
# all the time to avoid automatically detecting it. #568856
--disable-gcrypt
- --python="${PYTHON}"
--cc="$(tc-getCC)"
--cxx="$(tc-getCXX)"
+ --objcc="$(tc-getCC)"
--host-cc="$(tc-getBUILD_CC)"
+
+ $(use_enable alsa)
$(use_enable debug debug-info)
$(use_enable debug debug-tcg)
- $(use_enable doc docs)
+ $(use_enable jack)
+ $(use_enable nls gettext)
+ $(use_enable oss)
+ $(use_enable pipewire)
$(use_enable plugins)
- $(use_enable tci tcg-interpreter)
+ $(use_enable pulseaudio pa)
+ $(use_enable selinux)
$(use_enable xattr attr)
)
@@ -445,7 +553,7 @@ qemu_src_configure() {
use_enable "$@"
fi
}
- # Ennable option only for softmmu build, but not 'user' or 'tools'
+ # Enable option only for softmmu build, but not 'user' or 'tools'
conf_softmmu() {
if [[ ${buildtype} == "softmmu" ]] ; then
use_enable "$@"
@@ -453,14 +561,31 @@ qemu_src_configure() {
echo "--disable-${2:-$1}"
fi
}
+ # Enable option only for tools build, but not 'user' or 'softmmu'
+ conf_tools() {
+ if [[ ${buildtype} == "tools" ]] ; then
+ use_enable "$@"
+ else
+ echo "--disable-${2:-$1}"
+ fi
+ }
+ # Special case for the malloc flag, because the --disable flag does
+ # not exist and trying like above will break configuring.
+ conf_malloc() {
+ if [[ ! ${buildtype} == "user" ]] ; then
+ usex "${1}" "--enable-malloc=${1}" ""
+ fi
+ }
conf_opts+=(
$(conf_notuser accessibility brlapi)
$(conf_notuser aio linux-aio)
+ $(conf_softmmu bpf)
$(conf_notuser bzip2)
$(conf_notuser capstone)
- $(conf_notuser caps cap-ng)
$(conf_notuser curl)
+ $(conf_tools doc docs)
$(conf_notuser fdt)
+ $(conf_notuser fuse)
$(conf_notuser glusterfs)
$(conf_notuser gnutls)
$(conf_notuser gnutls nettle)
@@ -468,61 +593,58 @@ qemu_src_configure() {
$(conf_notuser infiniband rdma)
$(conf_notuser iscsi libiscsi)
$(conf_notuser io-uring linux-io-uring)
- $(conf_notuser jemalloc jemalloc)
+ $(conf_malloc jemalloc)
$(conf_notuser jpeg vnc-jpeg)
$(conf_notuser kernel_linux kvm)
+ $(conf_notuser keyutils libkeyutils)
$(conf_notuser lzo)
$(conf_notuser multipath mpath)
$(conf_notuser ncurses curses)
$(conf_notuser nfs libnfs)
$(conf_notuser numa)
$(conf_notuser opengl)
- $(conf_notuser png vnc-png)
+ $(conf_notuser pam auth-pam)
+ $(conf_notuser png)
$(conf_notuser rbd)
$(conf_notuser sasl vnc-sasl)
$(conf_notuser sdl)
$(conf_softmmu sdl-image)
$(conf_notuser seccomp)
- $(conf_notuser slirp slirp system)
+ $(conf_notuser slirp)
$(conf_notuser smartcard)
$(conf_notuser snappy)
$(conf_notuser spice)
$(conf_notuser ssh libssh)
+ $(conf_notuser udev libudev)
$(conf_notuser usb libusb)
$(conf_notuser usbredir usb-redir)
$(conf_notuser vde)
$(conf_notuser vhost-net)
- $(conf_notuser vhost-user-fs)
$(conf_notuser virgl virglrenderer)
- $(conf_notuser virtfs)
+ $(conf_softmmu virtfs)
$(conf_notuser vnc)
$(conf_notuser vte)
$(conf_notuser xen)
$(conf_notuser xen xen-pci-passthrough)
- $(conf_notuser xfs xfsctl)
- $(conf_notuser xkb xkbcommon)
+ # use prebuilt keymaps, bug #759604
+ --disable-xkbcommon
$(conf_notuser zstd)
)
- if [[ ${buildtype} == "user" ]] ; then
- conf_opts+=( --disable-libxml2 )
- else
- conf_opts+=( --enable-libxml2 )
- fi
-
if [[ ! ${buildtype} == "user" ]] ; then
# audio options
local audio_opts=(
# Note: backend order matters here: #716202
# We iterate from higher-level to lower level.
$(usex pulseaudio pa "")
+ $(usev pipewire)
$(usev jack)
$(usev sdl)
$(usev alsa)
$(usev oss)
)
conf_opts+=(
- --audio-drv-list=$(printf "%s," "${audio_opts[@]}")
+ --audio-drv-list=$(IFS=,; echo "${audio_opts[*]}")
)
fi
@@ -531,8 +653,9 @@ qemu_src_configure() {
conf_opts+=(
--enable-linux-user
--disable-system
- --disable-blobs
--disable-tools
+ --disable-cap-ng
+ --disable-seccomp
)
local static_flag="static-user"
;;
@@ -541,17 +664,19 @@ qemu_src_configure() {
--disable-linux-user
--enable-system
--disable-tools
+ --enable-cap-ng
+ --enable-seccomp
)
- local static_flag="static"
+ local static_flag="none"
;;
tools)
conf_opts+=(
--disable-linux-user
--disable-system
- --disable-blobs
--enable-tools
+ --enable-cap-ng
)
- local static_flag="static"
+ local static_flag="none"
;;
esac
@@ -559,25 +684,27 @@ qemu_src_configure() {
[[ -n ${targets} ]] && conf_opts+=( --target-list="${!targets}" )
# Add support for SystemTAP
- use systemtap && conf_opts+=( --enable-trace-backend=dtrace )
+ use systemtap && conf_opts+=( --enable-trace-backends="dtrace" )
# We always want to attempt to build with PIE support as it results
# in a more secure binary. But it doesn't work with static or if
# the current GCC doesn't have PIE support.
- if use ${static_flag}; then
+ if [[ ${static_flag} != "none" ]] && use ${static_flag}; then
conf_opts+=( --static --disable-pie )
else
tc-enables-pie && conf_opts+=( --enable-pie )
fi
+ # Meson will not use a cross-file unless cross_prefix is set.
+ tc-is-cross-compiler && conf_opts+=( --cross-prefix="${CHOST}-" )
+
+ # Plumb through equivalent of EXTRA_ECONF to allow experiments
+ # like bug #747928.
+ conf_opts+=( ${EXTRA_CONF_QEMU} )
+
echo "../configure ${conf_opts[*]}"
cd "${builddir}"
../configure "${conf_opts[@]}" || die "configure failed"
-
- # FreeBSD's kernel does not support QEMU assigning/grabbing
- # host USB devices yet
- use kernel_FreeBSD && \
- sed -i -E -e "s|^(HOST_USB=)bsd|\1stub|" "${S}"/config-host.mak
}
src_configure() {
@@ -612,22 +739,22 @@ src_configure() {
src_compile() {
if [[ -n ${user_targets} ]]; then
- cd "${S}/user-build"
+ cd "${S}/user-build" || die
default
fi
if [[ -n ${softmmu_targets} ]]; then
- cd "${S}/softmmu-build"
+ cd "${S}/softmmu-build" || die
default
fi
- cd "${S}/tools-build"
+ cd "${S}/tools-build" || die
default
}
src_test() {
if [[ -n ${softmmu_targets} ]]; then
- cd "${S}/softmmu-build"
+ cd "${S}/softmmu-build" || die
pax-mark m */qemu-system-* #515550
emake check
fi
@@ -716,7 +843,7 @@ src_install() {
[[ -e check-report.html ]] && dodoc check-report.html
if use kernel_linux; then
- udev_newrules "${FILESDIR}"/65-kvm.rules-r1 65-kvm.rules
+ udev_newrules "${FILESDIR}"/65-kvm.rules-r2 65-kvm.rules
fi
if use python; then
@@ -724,20 +851,25 @@ src_install() {
fi
fi
- cd "${S}/tools-build"
+ cd "${S}/tools-build" || die
emake DESTDIR="${ED}" install
+ # If USE=doc, there'll be newly generated docs which we install instead.
+ if ! use doc && [[ ${QEMU_DOCS_PREBUILT} == 1 ]] ; then
+ doman "${WORKDIR}"/${PN}-${QEMU_DOCS_VERSION}-docs/docs/*.[0-8]
+ fi
+
# Disable mprotect on the qemu binaries as they use JITs to be fast #459348
- pushd "${ED}"/usr/bin >/dev/null
+ pushd "${ED}"/usr/bin >/dev/null || die
pax-mark mr "${softmmu_bins[@]}" "${user_bins[@]}" # bug 575594
- popd >/dev/null
+ popd >/dev/null || die
# Install config file example for qemu-bridge-helper
insinto "/etc/qemu"
doins "${FILESDIR}/bridge.conf"
- cd "${S}"
- dodoc Changelog MAINTAINERS docs/specs/pci-ids.txt
+ cd "${S}" || die
+ dodoc MAINTAINERS
newdoc pc-bios/README README.pc-bios
# Disallow stripping of prebuilt firmware files.
@@ -745,10 +877,7 @@ src_install() {
if [[ -n ${softmmu_targets} ]]; then
# Remove SeaBIOS since we're using the SeaBIOS packaged one
- rm "${ED}/usr/share/qemu/bios.bin"
- rm "${ED}/usr/share/qemu/bios-256k.bin"
if use qemu_softmmu_targets_x86_64 || use qemu_softmmu_targets_i386; then
- dosym ../seabios/bios.bin /usr/share/qemu/bios.bin
dosym ../seabios/bios-256k.bin /usr/share/qemu/bios-256k.bin
fi
@@ -759,8 +888,9 @@ src_install() {
rm "${ED}/usr/share/qemu/vgabios-stdvga.bin"
rm "${ED}/usr/share/qemu/vgabios-virtio.bin"
rm "${ED}/usr/share/qemu/vgabios-vmware.bin"
- # PPC64 loads vgabios-stdvga
- if use qemu_softmmu_targets_x86_64 || use qemu_softmmu_targets_i386 || use qemu_softmmu_targets_ppc64; then
+
+ # PPC/PPC64 loads vgabios-stdvga
+ if use qemu_softmmu_targets_x86_64 || use qemu_softmmu_targets_i386 || use qemu_softmmu_targets_ppc || use qemu_softmmu_targets_ppc64; then
dosym ../seavgabios/vgabios-isavga.bin /usr/share/qemu/vgabios.bin
dosym ../seavgabios/vgabios-cirrus.bin /usr/share/qemu/vgabios-cirrus.bin
dosym ../seavgabios/vgabios-qxl.bin /usr/share/qemu/vgabios-qxl.bin
@@ -770,13 +900,11 @@ src_install() {
fi
# Remove sgabios since we're using the sgabios packaged one
- rm "${ED}/usr/share/qemu/sgabios.bin"
if use qemu_softmmu_targets_x86_64 || use qemu_softmmu_targets_i386; then
dosym ../sgabios/sgabios.bin /usr/share/qemu/sgabios.bin
fi
# Remove iPXE since we're using the iPXE packaged one
- rm "${ED}"/usr/share/qemu/pxe-*.rom
if use qemu_softmmu_targets_x86_64 || use qemu_softmmu_targets_i386; then
dosym ../ipxe/8086100e.rom /usr/share/qemu/pxe-e1000.rom
dosym ../ipxe/80861209.rom /usr/share/qemu/pxe-eepro100.rom
@@ -794,7 +922,7 @@ src_install() {
firmware_abi_change() {
local pv
for pv in ${REPLACING_VERSIONS}; do
- if ver_test $pv -lt ${FIRMWARE_ABI_VERSION}; then
+ if ver_test ${pv} -lt ${FIRMWARE_ABI_VERSION}; then
return 0
fi
done
@@ -809,16 +937,27 @@ pkg_postinst() {
xdg_icon_cache_update
[[ -z ${EPREFIX} ]] && [[ -f ${EROOT}/usr/libexec/qemu-bridge-helper ]] && \
- fcaps cap_net_admin ${EROOT}/usr/libexec/qemu-bridge-helper
+ fcaps cap_net_admin "${EROOT}"/usr/libexec/qemu-bridge-helper
DISABLE_AUTOFORMATTING=true
readme.gentoo_print_elog
if use pin-upstream-blobs && firmware_abi_change; then
ewarn "This version of qemu pins new versions of firmware blobs:"
- ewarn " $(best_version sys-firmware/edk2-ovmf)"
+
+ if has_version 'sys-firmware/edk2-ovmf-bin'; then
+ ewarn " $(best_version sys-firmware/edk2-ovmf-bin)"
+ else
+ ewarn " $(best_version sys-firmware/edk2-ovmf)"
+ fi
+
+ if has_version 'sys-firmware/seabios-bin'; then
+ ewarn " $(best_version sys-firmware/seabios-bin)"
+ else
+ ewarn " $(best_version sys-firmware/seabios)"
+ fi
+
ewarn " $(best_version sys-firmware/ipxe)"
- ewarn " $(best_version sys-firmware/seabios)"
ewarn " $(best_version sys-firmware/sgabios)"
ewarn "This might break resume of hibernated guests (started with a different"
ewarn "firmware version) and live migration to/from qemu versions with different"
@@ -832,22 +971,24 @@ pkg_postinst() {
pkg_info() {
echo "Using:"
echo " $(best_version app-emulation/spice-protocol)"
- echo " $(best_version sys-firmware/edk2-ovmf)"
- if has_version 'sys-firmware/edk2-ovmf[binary]'; then
- echo " USE=binary"
+
+ if has_version 'sys-firmware/edk2-ovmf-bin'; then
+ echo " $(best_version sys-firmware/edk2-ovmf-bin)"
else
- echo " USE=''"
+ echo " $(best_version sys-firmware/edk2-ovmf)"
fi
- echo " $(best_version sys-firmware/ipxe)"
- echo " $(best_version sys-firmware/seabios)"
- if has_version 'sys-firmware/seabios[binary]'; then
- echo " USE=binary"
+
+ if has_version 'sys-firmware/seabios-bin'; then
+ echo " $(best_version sys-firmware/seabios-bin)"
else
- echo " USE=''"
+ echo " $(best_version sys-firmware/seabios)"
fi
+
+ echo " $(best_version sys-firmware/ipxe)"
echo " $(best_version sys-firmware/sgabios)"
}
pkg_postrm() {
xdg_icon_cache_update
+ udev_reload
}