app-emulation/qemu: Sync with Gentoo

It's from Gentoo commit f91f43c34d93c3d9ea4fb703e1bd29531b1fe563.
This commit is contained in:
Krzesimir Nowak 2022-10-20 16:33:38 +02:00
parent f25174395c
commit 12de753360
18 changed files with 911 additions and 1551 deletions

View File

@ -1,3 +1,4 @@
DIST qemu-6.2.0.tar.xz 115667324 BLAKE2B 3f2f02e5c36113df6231a9474c6d5db774e541312173813c28f578d669a51f391695d364dc806f5906d9e3c2796bb20b2606fcd46a247eb751ea517de9d7ce15 SHA512 e9f8231c9e1cfcc41cb47f10a55d63f6b8aee307af00cf6acf64acb7aa4f49fa7e9d6330703a2abea15d8b7bbaba7d3cb08c83edd98d82642367b527df730817 DIST qemu-7.1.0-docs.tar.xz 2016780 BLAKE2B 1b84361fe58d504ab740a0b805a25d02f497ca776e7251a99f0e98e3720d1a2029b7a171f9d79dd128ba17a82c72d497e09baa1a4b2f192ba390f0f3b1950792 SHA512 7a328303b8af0ab63aa1f0fe07a121d3ca459d00fca817412e645416af795930dbea0a3e60f4ca006a74d1672e84fa4e626e4d83918e0b685b601043d0d8159e
DIST qemu-7.0.0-rc4.tar.xz 125126604 BLAKE2B e1614daf71ff2625cdd8307812d6dfc4103c7c8a981b49fdda7409b8b4749e2d8354d3f8e903791100e966744485148c9b70ff046c0f8c2b1259a4997a245248 SHA512 ca0e8f5f1608b36f8ad8d9e6aeeb00e07af23e59ffecbda84c4c34bbe686a53c481e26bcedd13165363057cab063dcda7e5191dd5aff2798fde5be711c6dd2ff DIST qemu-7.1.0.tar.xz 121833004 BLAKE2B e05f91ce4993c7591a2df08b5fb017f8b8ec2141ab7bfd55d14730ea6b793ac1091de539992058392a5522d4e58beee92a87752707be58e3619b8213ef9f35bf SHA512 c60c5ff8ec99b7552e485768908920658fdd8035ff7a6fa370fb6881957dc8b7e5f18ff1a8f49bd6aa22909ede2a7c084986d8244f12074ccd33ebe40a0c411f
DIST qemu-7.0.0.tar.xz 125117636 BLAKE2B ceda6d9f1a585298bd49fed61e8bb35f0064ad8388a9f979c8bd68a38bfe1a47c5bb055e5f74f970c2c440957042b9de4a861524120040c56e4cd8b56c5cfb68 SHA512 44ecd10c018a3763e1bc87d1d35b98890d0d5636acd69fe9b5cadf5024d5af6a31684d60cbe1c3370e02986434c1fb0ad99224e0e6f6fe7eda169992508157b1 DIST qemu-7.2.0-docs.tar.xz 1984184 BLAKE2B 103900fb7903ed8d75f7f012bf61fa2d6fce345b657c851d0437c3384f5735bd1cfd3129320683ea7846ea0b0940e5af5b2663c9320f12fee74b058523a8ea06 SHA512 a7edd448982865e07533c300d3e44a8b50cefbdde1982b73c24d0b2aa74315439252c59b634c75de312860874c7b06c75aa72629da681b5105f28ee936794585
DIST qemu-7.2.0.tar.xz 122408576 BLAKE2B 415ff621356c59f88b29cfe3ef5db1e282b26bbafbee3d535477c6125ccb060ec9762d9e3ab9f70ce5478804dca0a46a59bcf12c112a2462029a93e578e61530 SHA512 f3cfa00da739ba819a218d7e6e95c77fb79a8e0f487b024ddd281602e785249b81144595e3f8c746c32a4f5c4d1a88c6aebae3c162603edfbb50ae3722d7ed13

View File

@ -1,11 +0,0 @@
--- qemu-2.11.1/include/disas/capstone.h 2018-02-14 22:53:22.000000000 +0100
+++ qemu-2.11.1/include/disas/capstone.h 2018-02-17 20:12:12.754703951 +0100
@@ -3,7 +3,7 @@
#ifdef CONFIG_CAPSTONE
-#include <capstone.h>
+#include <capstone/capstone.h>
#else

View File

@ -1,34 +0,0 @@
From 42e53a0aadb76dfa7c11cd3b14eb4a41efba9bbe Mon Sep 17 00:00:00 2001
From: Matthias Maier <tamiko@43-1.org>
Date: Tue, 11 Jan 2022 07:20:31 -0600
Subject: [PATCH] also build virtfs-proxy-helper
The Gentoo ebuild splits the qemu build into a softmmu, user and tool
phase in order to be able to build and link some of the qemu emulators
statically. This unfortunately has the consequence that we never
configure with "have_virtfs" and "have_tools" at the same time.
As a workaround, simply build the virtfs userland unconditionally. After
all, it is a tiny executable
---
meson.build | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/meson.build b/meson.build
index fbe856700..d6918b04c 100644
--- a/meson.build
+++ b/meson.build
@@ -1390,7 +1390,7 @@ have_virtfs = (targetos == 'linux' and
libattr.found() and
libcap_ng.found())
-have_virtfs_proxy_helper = have_virtfs and have_tools
+have_virtfs_proxy_helper = have_tools and libcap_ng.found()
if get_option('virtfs').enabled()
if not have_virtfs
--
2.34.1

View File

@ -1,61 +0,0 @@
https://gitlab.com/qemu/qemu/-/commit/7b223e38603de3a75602e14914d26f9d4baf52eb.patch
https://bugs.gentoo.org/836300
From 7b223e38603de3a75602e14914d26f9d4baf52eb Mon Sep 17 00:00:00 2001
From: Christian Ehrhardt <christian.ehrhardt@canonical.com>
Date: Wed, 9 Feb 2022 12:14:56 +0100
Subject: [PATCH] tools/virtiofsd: Add rseq syscall to the seccomp allowlist
The virtiofsd currently crashes when used with glibc 2.35.
That is due to the rseq system call being added to every thread
creation [1][2].
[1]: https://www.efficios.com/blog/2019/02/08/linux-restartable-sequences/
[2]: https://sourceware.org/pipermail/libc-alpha/2022-February/136040.html
This happens not at daemon start, but when a guest connects
/usr/lib/qemu/virtiofsd -f --socket-path=/tmp/testvfsd -o sandbox=chroot \
-o source=/var/guests/j-virtiofs --socket-group=kvm
virtio_session_mount: Waiting for vhost-user socket connection...
# start ok, now guest will connect
virtio_session_mount: Received vhost-user socket connection
virtio_loop: Entry
fv_queue_set_started: qidx=0 started=1
fv_queue_set_started: qidx=1 started=1
Bad system call (core dumped)
We have to put rseq on the seccomp allowlist to avoid that the daemon
is crashing in this case.
Reported-by: Michael Hudson-Doyle <michael.hudson@canonical.com>
Signed-off-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Message-id: 20220209111456.3328420-1-christian.ehrhardt@canonical.com
[Moved rseq to its alphabetically ordered position in the seccomp
allowlist.
--Stefan]
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
---
tools/virtiofsd/passthrough_seccomp.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/tools/virtiofsd/passthrough_seccomp.c b/tools/virtiofsd/passthrough_seccomp.c
index a3ce9f898d..2bc0127b69 100644
--- a/tools/virtiofsd/passthrough_seccomp.c
+++ b/tools/virtiofsd/passthrough_seccomp.c
@@ -91,6 +91,9 @@ static const int syscall_allowlist[] = {
SCMP_SYS(renameat2),
SCMP_SYS(removexattr),
SCMP_SYS(restart_syscall),
+#ifdef __NR_rseq
+ SCMP_SYS(rseq), /* required since glibc 2.35 */
+#endif
SCMP_SYS(rt_sigaction),
SCMP_SYS(rt_sigprocmask),
SCMP_SYS(rt_sigreturn),
--
GitLab

View File

@ -1,173 +0,0 @@
Gentoo bug: https://bugs.gentoo.org/830170
Upstream bug: https://gitlab.com/qemu-project/qemu/-/issues/786
Patches taken from
https://lore.kernel.org/qemu-devel/20211227193120.1084176-1-imammedo@redhat.com/
commit dce6c86f54eab61028e110497c222e73381379df
Author: Igor Mammedov <imammedo@redhat.com>
Date: Mon Dec 27 14:31:17 2021 -0500
acpi: fix QEMU crash when started with SLIC table
if QEMU is started with used provided SLIC table blob,
-acpitable sig=SLIC,oem_id='CRASH ',oem_table_id="ME",oem_rev=00002210,asl_compiler_id="",asl_compiler_rev=00000000,data=/dev/null
it will assert with:
hw/acpi/aml-build.c:61:build_append_padded_str: assertion failed: (len <= maxlen)
and following backtrace:
...
build_append_padded_str (array=0x555556afe320, str=0x555556afdb2e "CRASH ME", maxlen=0x6, pad=0x20) at hw/acpi/aml-build.c:61
acpi_table_begin (desc=0x7fffffffd1b0, array=0x555556afe320) at hw/acpi/aml-build.c:1727
build_fadt (tbl=0x555556afe320, linker=0x555557ca3830, f=0x7fffffffd318, oem_id=0x555556afdb2e "CRASH ME", oem_table_id=0x555556afdb34 "ME") at hw/acpi/aml-build.c:2064
...
which happens due to acpi_table_begin() expecting NULL terminated
oem_id and oem_table_id strings, which is normally the case, but
in case of user provided SLIC table, oem_id points to table's blob
directly and as result oem_id became longer than expected.
Fix issue by handling oem_id consistently and make acpi_get_slic_oem()
return NULL terminated strings.
PS:
After [1] refactoring, oem_id semantics became inconsistent, where
NULL terminated string was coming from machine and old way pointer
into byte array coming from -acpitable option. That used to work
since build_header() wasn't expecting NULL terminated string and
blindly copied the 1st 6 bytes only.
However commit [2] broke that by replacing build_header() with
acpi_table_begin(), which was expecting NULL terminated string
and was checking oem_id size.
1) 602b45820 ("acpi: Permit OEM ID and OEM table ID fields to be changed")
2)
Fixes: 4b56e1e4eb08 ("acpi: build_fadt: use acpi_table_begin()/acpi_table_end() instead of build_header()")
Resolves: https://gitlab.com/qemu-project/qemu/-/issues/786
Signed-off-by: Igor Mammedov <imammedo@redhat.com>
diff --git a/hw/acpi/core.c b/hw/acpi/core.c
index 1e004d0078..3e811bf03c 100644
--- a/hw/acpi/core.c
+++ b/hw/acpi/core.c
@@ -345,8 +345,8 @@ int acpi_get_slic_oem(AcpiSlicOem *oem)
struct acpi_table_header *hdr = (void *)(u - sizeof(hdr->_length));
if (memcmp(hdr->sig, "SLIC", 4) == 0) {
- oem->id = hdr->oem_id;
- oem->table_id = hdr->oem_table_id;
+ oem->id = g_strndup(hdr->oem_id, 6);
+ oem->table_id = g_strndup(hdr->oem_table_id, 8);
return 0;
}
}
diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c
index a99c6e4fe3..570f82997b 100644
--- a/hw/i386/acpi-build.c
+++ b/hw/i386/acpi-build.c
@@ -2721,6 +2721,8 @@ void acpi_build(AcpiBuildTables *tables, MachineState *machine)
/* Cleanup memory that's no longer used. */
g_array_free(table_offsets, true);
+ g_free(slic_oem.id);
+ g_free(slic_oem.table_id);
}
static void acpi_ram_update(MemoryRegion *mr, GArray *data)
commit a22de122ad03ea40953ad0328b2c3e31002d8052
Author: Igor Mammedov <imammedo@redhat.com>
Date: Mon Dec 27 14:31:18 2021 -0500
tests: acpi: whitelist expected blobs before changing them
Signed-off-by: Igor Mammedov <imammedo@redhat.com>
diff --git a/tests/data/acpi/q35/FACP.slic b/tests/data/acpi/q35/FACP.slic
new file mode 100644
index 0000000000..f6a864cc86
Binary files /dev/null and b/tests/data/acpi/q35/FACP.slic differ
diff --git a/tests/data/acpi/q35/SLIC.slic b/tests/data/acpi/q35/SLIC.slic
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/tests/qtest/bios-tables-test-allowed-diff.h b/tests/qtest/bios-tables-test-allowed-diff.h
index dfb8523c8b..49dbf8fa3e 100644
--- a/tests/qtest/bios-tables-test-allowed-diff.h
+++ b/tests/qtest/bios-tables-test-allowed-diff.h
@@ -1 +1,3 @@
/* List of comma-separated changed AML files to ignore */
+"tests/data/acpi/q35/FACP.slic",
+"tests/data/acpi/q35/SLIC.slic",
commit cb913395d76f8fdfd7f1d0c8ea77d4710821bbd3
Author: Igor Mammedov <imammedo@redhat.com>
Date: Mon Dec 27 14:31:19 2021 -0500
tests: acpi: add SLIC table test
When user uses '-acpitable' to add SLIC table, some ACPI
tables (FADT) will change its 'Oem ID'/'Oem Table ID' fields to
match that of SLIC. Test makes sure thati QEMU handles
those fields correctly when SLIC table is added with
'-acpitable' option.
Signed-off-by: Igor Mammedov <imammedo@redhat.com>
diff --git a/tests/qtest/bios-tables-test.c b/tests/qtest/bios-tables-test.c
index 258874167e..ae7ef13ec7 100644
--- a/tests/qtest/bios-tables-test.c
+++ b/tests/qtest/bios-tables-test.c
@@ -1567,6 +1567,19 @@ static void test_acpi_oem_fields_virt(void)
g_free(args);
}
+static void test_acpi_q35_slic(void)
+{
+ test_data data = {
+ .machine = MACHINE_Q35,
+ .variant = ".slic",
+ };
+
+ test_acpi_one("-acpitable sig=SLIC,oem_id='CRASH ',oem_table_id='ME',"
+ "oem_rev=00002210,asl_compiler_id='qemu',"
+ "asl_compiler_rev=00000000,data=/dev/null",
+ &data);
+ free_test_data(&data);
+}
int main(int argc, char *argv[])
{
@@ -1639,6 +1652,7 @@ int main(int argc, char *argv[])
qtest_add_func("acpi/q35/kvm/xapic", test_acpi_q35_kvm_xapic);
qtest_add_func("acpi/q35/kvm/dmar", test_acpi_q35_kvm_dmar);
}
+ qtest_add_func("acpi/q35/slic", test_acpi_q35_slic);
} else if (strcmp(arch, "aarch64") == 0) {
if (has_tcg) {
qtest_add_func("acpi/virt", test_acpi_virt_tcg);
commit ffba261306370e0ad8506401b104be5fa4749ade
Author: Igor Mammedov <imammedo@redhat.com>
Date: Mon Dec 27 14:31:20 2021 -0500
tests: acpi: SLIC: update expected blobs
Signed-off-by: Igor Mammedov <imammedo@redhat.com>
diff --git a/tests/data/acpi/q35/FACP.slic b/tests/data/acpi/q35/FACP.slic
index f6a864cc86..891fd4b784 100644
Binary files a/tests/data/acpi/q35/FACP.slic and b/tests/data/acpi/q35/FACP.slic differ
diff --git a/tests/data/acpi/q35/SLIC.slic b/tests/data/acpi/q35/SLIC.slic
index e69de29bb2..fd26592e24 100644
Binary files a/tests/data/acpi/q35/SLIC.slic and b/tests/data/acpi/q35/SLIC.slic differ
diff --git a/tests/qtest/bios-tables-test-allowed-diff.h b/tests/qtest/bios-tables-test-allowed-diff.h
index 49dbf8fa3e..dfb8523c8b 100644
--- a/tests/qtest/bios-tables-test-allowed-diff.h
+++ b/tests/qtest/bios-tables-test-allowed-diff.h
@@ -1,3 +1 @@
/* List of comma-separated changed AML files to ignore */
-"tests/data/acpi/q35/FACP.slic",
-"tests/data/acpi/q35/SLIC.slic",

View File

@ -1,4 +1,4 @@
From c1093041466772f4b62961bcc5a354801d41355d Mon Sep 17 00:00:00 2001 From d02ea89239768c93651a161d057f2bf04d56a024 Mon Sep 17 00:00:00 2001
From: Matthias Maier <tamiko@43-1.org> From: Matthias Maier <tamiko@43-1.org>
Date: Mon, 4 Apr 2022 12:56:59 +0200 Date: Mon, 4 Apr 2022 12:56:59 +0200
Subject: [PATCH] also build virtfs-proxy-helper Subject: [PATCH] also build virtfs-proxy-helper
@ -15,18 +15,18 @@ all, it is a tiny executable
1 file changed, 1 insertion(+), 1 deletion(-) 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/meson.build b/meson.build diff --git a/meson.build b/meson.build
index 861de93c4f..a8d29be3aa 100644 index 65a885ea69..29ce7a5a8e 100644
--- a/meson.build --- a/meson.build
+++ b/meson.build +++ b/meson.build
@@ -1474,7 +1474,7 @@ have_virtfs = get_option('virtfs') \ @@ -1684,7 +1684,7 @@ have_virtfs = get_option('virtfs') \
.disable_auto_if(not have_tools and not have_system) \ .disable_auto_if(not have_tools and not have_system) \
.allowed() .allowed()
-have_virtfs_proxy_helper = targetos != 'darwin' and have_virtfs and have_tools -have_virtfs_proxy_helper = targetos != 'darwin' and have_virtfs and have_tools
+have_virtfs_proxy_helper = have_tools and libattr.found() and libcap_ng.found() +have_virtfs_proxy_helper = have_tools and libattr.found() and libcap_ng.found()
foreach k : get_option('trace_backends') if get_option('block_drv_ro_whitelist') == ''
config_host_data.set('CONFIG_TRACE_' + k.to_upper(), true) config_host_data.set('CONFIG_BDRV_RO_WHITELIST', '')
-- --
2.35.1 2.35.1

View File

@ -0,0 +1,31 @@
Forward ported from qemu-2.11.1-capstone_include_path.patch.
This time also fix the capstone.h header check to use the path we're
already patching in.
Bug: https://bugs.gentoo.org/873157
diff --git a/include/disas/capstone.h b/include/disas/capstone.h
index e29068dd97..d8fdc5d537 100644
--- a/include/disas/capstone.h
+++ b/include/disas/capstone.h
@@ -3,7 +3,7 @@
#ifdef CONFIG_CAPSTONE
-#include <capstone.h>
+#include <capstone/capstone.h>
#else
diff --git a/meson.build b/meson.build
index 20fddbd707..50ce96bbd1 100644
--- a/meson.build
+++ b/meson.build
@@ -2605,7 +2605,7 @@ if not get_option('capstone').auto() or have_system or have_user
# that reports a wrong -I path, causing the #include to
# fail later. If the system has such a broken version
# do not use it.
- if capstone.found() and not cc.compiles('#include <capstone.h>',
+ if capstone.found() and not cc.compiles('#include <capstone/capstone.h>',
dependencies: [capstone])
capstone = not_found
if get_option('capstone').enabled()

View File

@ -0,0 +1,78 @@
From 35a2c85f7d691db7aa2c47181902ac87478eef7a Mon Sep 17 00:00:00 2001
From: WANG Xuerui <xen0n@gentoo.org>
Date: Sun, 9 Oct 2022 14:08:13 +0800
Subject: [PATCH] linux-user: Implement faccessat2
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
User space has been preferring this syscall for a while, due to its
closer match with C semantics, and newer platforms such as LoongArch
apparently have libc implementations that don't fallback to faccessat
so normal access checks are failing without the emulation in place.
Tested by successfully emerging several packages within a Gentoo loong
stage3 chroot, emulated on amd64 with help of static qemu-loongarch64.
Reported-by: Andreas K. Hüttel <dilfridge@gentoo.org>
Signed-off-by: WANG Xuerui <xen0n@gentoo.org>
Message-Id: <20221009060813.2289077-1-xen0n@gentoo.org>
[lv: removing defined(__NR_faccessat2) in syscall.c,
adding defined(TARGET_NR_faccessat2) on print_faccessat()]
Signed-off-by: Laurent Vivier <laurent@vivier.eu>
---
linux-user/strace.c | 2 +-
linux-user/strace.list | 3 +++
linux-user/syscall.c | 9 +++++++++
3 files changed, 13 insertions(+), 1 deletion(-)
diff --git a/linux-user/strace.c b/linux-user/strace.c
index 86c081c83f..9ae5a812cd 100644
--- a/linux-user/strace.c
+++ b/linux-user/strace.c
@@ -1969,7 +1969,7 @@ print_execv(CPUArchState *cpu_env, const struct syscallname *name,
}
#endif
-#ifdef TARGET_NR_faccessat
+#if defined(TARGET_NR_faccessat) || defined(TARGET_NR_faccessat2)
static void
print_faccessat(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
diff --git a/linux-user/strace.list b/linux-user/strace.list
index a87415bf3d..3df2184580 100644
--- a/linux-user/strace.list
+++ b/linux-user/strace.list
@@ -178,6 +178,9 @@
#ifdef TARGET_NR_faccessat
{ TARGET_NR_faccessat, "faccessat" , NULL, print_faccessat, NULL },
#endif
+#ifdef TARGET_NR_faccessat2
+{ TARGET_NR_faccessat2, "faccessat2" , NULL, print_faccessat, NULL },
+#endif
#ifdef TARGET_NR_fadvise64
{ TARGET_NR_fadvise64, "fadvise64" , NULL, NULL, NULL },
#endif
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index d499cac1d5..e985ad167f 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -9143,6 +9143,15 @@ static abi_long do_syscall1(CPUArchState *cpu_env, int num, abi_long arg1,
unlock_user(p, arg2, 0);
return ret;
#endif
+#if defined(TARGET_NR_faccessat2)
+ case TARGET_NR_faccessat2:
+ if (!(p = lock_user_string(arg2))) {
+ return -TARGET_EFAULT;
+ }
+ ret = get_errno(faccessat(arg1, p, arg3, arg4));
+ unlock_user(p, arg2, 0);
+ return ret;
+#endif
#ifdef TARGET_NR_nice /* not on alpha */
case TARGET_NR_nice:
return get_errno(nice(arg1));
--
2.37.4

View File

@ -0,0 +1,98 @@
From xen0n@gentoo.org Thu Oct 06 10:07:10 2022
Return-Path: <xen0n@gentoo.org>
X-Original-To: dilfridge@gentoo.org
Delivered-To: dilfridge@gentoo.org
From: WANG Xuerui <xen0n@gentoo.org>
To: qemu-devel@nongnu.org
Cc: Richard Henderson <richard.henderson@linaro.org>,
=?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= <f4bug@amsat.org>,
WANG Xuerui <xen0n@gentoo.org>,
Song Gao <gaosong@loongson.cn>,
Xiaojuan Yang <yangxiaojuan@loongson.cn>,
=?UTF-8?q?Andreas=20K=20=2E=20H=C3=BCttel?= <dilfridge@gentoo.org>
Subject: [PATCH RESEND] linux-user: Fix struct statfs ABI on loongarch64
Date: Thu, 6 Oct 2022 18:07:10 +0800
Message-Id: <20221006100710.427252-1-xen0n@gentoo.org>
X-Mailer: git-send-email 2.38.0
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Previously the 32-bit version was incorrectly chosen, leading to funny
but incorrect output from e.g. df(1). Simply select the version
corresponding to the 64-bit asm-generic definition.
For reference, this program should produce the same output no matter
natively compiled or not, for loongarch64 or not:
```c
#include <stdio.h>
#include <sys/statfs.h>
int main(int argc, const char *argv[])
{
struct statfs b;
if (statfs(argv[0], &b))
return 1;
printf("f_type = 0x%lx\n", b.f_type);
printf("f_bsize = %ld\n", b.f_bsize);
printf("f_blocks = %ld\n", b.f_blocks);
printf("f_bfree = %ld\n", b.f_bfree);
printf("f_bavail = %ld\n", b.f_bavail);
return 0;
}
// Example output on my amd64 box, with the test binary residing on a
// btrfs partition.
// Native and emulated output after the fix:
//
// f_type = 0x9123683e
// f_bsize = 4096
// f_blocks = 268435456
// f_bfree = 168406890
// f_bavail = 168355058
// Output before the fix, note the messed layout:
//
// f_type = 0x10009123683e
// f_bsize = 723302085239504896
// f_blocks = 168355058
// f_bfree = 2250817541779750912
// f_bavail = 1099229433104
```
Fixes: 1f63019632 ("linux-user: Add LoongArch syscall support")
Signed-off-by: WANG Xuerui <xen0n@gentoo.org>
Cc: Song Gao <gaosong@loongson.cn>
Cc: Xiaojuan Yang <yangxiaojuan@loongson.cn>
Cc: Andreas K. Hüttel <dilfridge@gentoo.org>
---
Resend with amended commit message to 100% clarify the example output
are generated on my box and will differ for everyone else. Sorry for
the noise.
linux-user/syscall_defs.h | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h
index 01ee10a88f..77864de57f 100644
--- a/linux-user/syscall_defs.h
+++ b/linux-user/syscall_defs.h
@@ -2262,7 +2262,8 @@ struct target_statfs64 {
};
#elif (defined(TARGET_PPC64) || defined(TARGET_X86_64) || \
defined(TARGET_SPARC64) || defined(TARGET_AARCH64) || \
- defined(TARGET_RISCV)) && !defined(TARGET_ABI32)
+ defined(TARGET_RISCV) || defined(TARGET_LOONGARCH64)) && \
+ !defined(TARGET_ABI32)
struct target_statfs {
abi_long f_type;
abi_long f_bsize;
--
2.38.0

View File

@ -0,0 +1,94 @@
From xen0n@gentoo.org Thu Oct 06 08:55:00 2022
Return-Path: <xen0n@gentoo.org>
X-Original-To: dilfridge@gentoo.org
Delivered-To: dilfridge@gentoo.org
From: WANG Xuerui <xen0n@gentoo.org>
To: qemu-devel@nongnu.org
Cc: WANG Xuerui <xen0n@gentoo.org>,
=?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= <f4bug@amsat.org>,
Jiaxun Yang <jiaxun.yang@flygoat.com>,
=?UTF-8?q?Andreas=20K=20=2E=20H=C3=BCttel?= <dilfridge@gentoo.org>,
Joshua Kinard <kumba@gentoo.org>
Subject: [PATCH] linux-user: Fix more MIPS n32 syscall ABI issues
Date: Thu, 6 Oct 2022 16:55:00 +0800
Message-Id: <20221006085500.290341-1-xen0n@gentoo.org>
X-Mailer: git-send-email 2.38.0
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
In commit 80f0fe3a85 ("linux-user: Fix syscall parameter handling for
MIPS n32") the ABI problem regarding offset64 on MIPS n32 was fixed,
but still some cases remain where the n32 is incorrectly treated as any
other 32-bit ABI that passes 64-bit arguments in pairs of GPRs. Fix by
excluding TARGET_ABI_MIPSN32 from various TARGET_ABI_BITS == 32 checks.
Closes: https://gitlab.com/qemu-project/qemu/-/issues/1238
Signed-off-by: WANG Xuerui <xen0n@gentoo.org>
Cc: Philippe Mathieu-Daudé <f4bug@amsat.org>
Cc: Jiaxun Yang <jiaxun.yang@flygoat.com>
Cc: Andreas K. Hüttel <dilfridge@gentoo.org>
Cc: Joshua Kinard <kumba@gentoo.org>
---
Note: I can't reproduce the crash with neither MIPS n32 sysroot at my hand
(a self-built one for Loongson-2F, and stage3-mips64_n32-openrc-20221001T170527Z),
so I can only verify by looking at the (host and qemu) strace outputs, and
would have to ask you to review/test this harder. Thanks.
linux-user/syscall.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index 2e954d8dbd..8b2d39fe73 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -11793,7 +11793,7 @@ static abi_long do_syscall1(CPUArchState *cpu_env, int num, abi_long arg1,
return -host_to_target_errno(ret);
#endif
-#if TARGET_ABI_BITS == 32
+#if TARGET_ABI_BITS == 32 && !defined(TARGET_ABI_MIPSN32)
#ifdef TARGET_NR_fadvise64_64
case TARGET_NR_fadvise64_64:
@@ -11920,7 +11920,7 @@ static abi_long do_syscall1(CPUArchState *cpu_env, int num, abi_long arg1,
return get_errno(sys_gettid());
#ifdef TARGET_NR_readahead
case TARGET_NR_readahead:
-#if TARGET_ABI_BITS == 32
+#if TARGET_ABI_BITS == 32 && !defined(TARGET_ABI_MIPSN32)
if (regpairs_aligned(cpu_env, num)) {
arg2 = arg3;
arg3 = arg4;
@@ -12612,7 +12612,7 @@ static abi_long do_syscall1(CPUArchState *cpu_env, int num, abi_long arg1,
#endif /* CONFIG_EVENTFD */
#if defined(CONFIG_FALLOCATE) && defined(TARGET_NR_fallocate)
case TARGET_NR_fallocate:
-#if TARGET_ABI_BITS == 32
+#if TARGET_ABI_BITS == 32 && !defined(TARGET_ABI_MIPSN32)
ret = get_errno(fallocate(arg1, arg2, target_offset64(arg3, arg4),
target_offset64(arg5, arg6)));
#else
@@ -12623,7 +12623,7 @@ static abi_long do_syscall1(CPUArchState *cpu_env, int num, abi_long arg1,
#if defined(CONFIG_SYNC_FILE_RANGE)
#if defined(TARGET_NR_sync_file_range)
case TARGET_NR_sync_file_range:
-#if TARGET_ABI_BITS == 32
+#if TARGET_ABI_BITS == 32 && !defined(TARGET_ABI_MIPSN32)
#if defined(TARGET_MIPS)
ret = get_errno(sync_file_range(arg1, target_offset64(arg3, arg4),
target_offset64(arg5, arg6), arg7));
@@ -12645,7 +12645,7 @@ static abi_long do_syscall1(CPUArchState *cpu_env, int num, abi_long arg1,
case TARGET_NR_arm_sync_file_range:
#endif
/* This is like sync_file_range but the arguments are reordered */
-#if TARGET_ABI_BITS == 32
+#if TARGET_ABI_BITS == 32 && !defined(TARGET_ABI_MIPSN32)
ret = get_errno(sync_file_range(arg1, target_offset64(arg3, arg4),
target_offset64(arg5, arg6), arg2));
#else
--
2.38.0

View File

@ -4,15 +4,15 @@ diff --git a/configure b/configure
index da2501489f..4660ee3ee5 100755 index da2501489f..4660ee3ee5 100755
--- a/configure --- a/configure
+++ b/configure +++ b/configure
@@ -516,6 +516,7 @@ ld="${LD-${cross_prefix}ld}" @@ -400,6 +400,7 @@ ld="${LD-${cross_prefix}ld}"
ranlib="${RANLIB-${cross_prefix}ranlib}"
nm="${NM-${cross_prefix}nm}" nm="${NM-${cross_prefix}nm}"
smbd="$SMBD"
strip="${STRIP-${cross_prefix}strip}" strip="${STRIP-${cross_prefix}strip}"
+strings="${STRINGS-${cross_prefix}strings}" +strings="${STRINGS-${cross_prefix}strings}"
widl="${WIDL-${cross_prefix}widl}"
windres="${WINDRES-${cross_prefix}windres}" windres="${WINDRES-${cross_prefix}windres}"
pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}" pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
query_pkg_config() { @@ -1466,9 +1467,9 @@ int main(int argc, char *argv[])
@@ -2380,9 +2381,9 @@ int main(int argc, char *argv[])
EOF EOF
if compile_prog ; then if compile_prog ; then

View File

@ -1,26 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd"> <!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
<pkgmetadata> <pkgmetadata>
<maintainer type="person">
<email>ajak@gentoo.org</email>
<name>John Helmert III</name>
</maintainer>
<maintainer type="person">
<email>sam@gentoo.org</email>
<name>Sam James</name>
</maintainer>
<maintainer type="person">
<email>tamiko@gentoo.org</email>
<name>Matthias Maier</name>
</maintainer>
<maintainer type="person">
<email>zlogene@gentoo.org</email>
<name>Mikle Kolyada</name>
</maintainer>
<maintainer type="project"> <maintainer type="project">
<email>virtualization@gentoo.org</email> <email>virtualization@gentoo.org</email>
<name>Gentoo Virtualization Project</name> <name>Gentoo Virtualization Project</name>
</maintainer> </maintainer>
<maintainer type="person">
<email>dilfridge@gentoo.org</email>
<name>Andreas K. Hüttel</name>
</maintainer>
<use> <use>
<flag name="accessibility">Adds support for braille displays using brltty</flag> <flag name="accessibility">Adds support for braille displays using brltty</flag>
<flag name="aio">Enables support for Linux's Async IO</flag> <flag name="aio">Enables support for Linux's Async IO</flag>
@ -72,7 +60,8 @@
<flag name="xattr">Add support for getting and setting POSIX extended attributes, through <flag name="xattr">Add support for getting and setting POSIX extended attributes, through
<pkg>sys-apps/attr</pkg>. Requisite for the virtfs backend.</flag> <pkg>sys-apps/attr</pkg>. Requisite for the virtfs backend.</flag>
<flag name="xen">Enables support for Xen backends</flag> <flag name="xen">Enables support for Xen backends</flag>
<flag name="xfs">Support xfsctl() notification and syncing for XFS backed
virtual disks.</flag>
</use> </use>
<upstream>
<remote-id type="gitlab">qemu-project/qemu</remote-id>
</upstream>
</pkgmetadata> </pkgmetadata>

View File

@ -1,913 +0,0 @@
# Copyright 1999-2022 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=7
PYTHON_COMPAT=( python3_{8,9,10} )
PYTHON_REQ_USE="ncurses,readline"
FIRMWARE_ABI_VERSION="6.2.0"
inherit linux-info toolchain-funcs python-r1 udev fcaps readme.gentoo-r1 \
pax-utils xdg-utils
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
)
inherit git-r3
SRC_URI=""
else
SRC_URI="https://download.qemu.org/${P}.tar.xz"
KEYWORDS="amd64 arm64 ~ppc ppc64 x86"
fi
DESCRIPTION="QEMU + Kernel-based Virtual Machine userland tools"
HOMEPAGE="https://www.qemu.org https://www.linux-kvm.org"
LICENSE="GPL-2 LGPL-2 BSD-2"
SLOT="0"
IUSE="accessibility +aio alsa bpf bzip2 capstone +caps +curl debug +doc
+fdt fuse glusterfs +gnutls gtk infiniband iscsi io-uring
jack jemalloc +jpeg
lzo multipath
ncurses nfs nls numa opengl +oss +pin-upstream-blobs
plugins +png pulseaudio python rbd sasl +seccomp sdl sdl-image selinux
+slirp
smartcard snappy spice ssh static static-user systemtap test udev usb
usbredir vde +vhost-net vhost-user-fs virgl virtfs +vnc vte xattr xen
xfs 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
rx
tricore
"
IUSE_USER_TARGETS="
${COMMON_TARGETS}
aarch64_be
armeb
hexagon
mipsn32
mipsn32el
ppc64abi32
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}
qemu_softmmu_targets_arm? ( fdt )
qemu_softmmu_targets_microblaze? ( fdt )
qemu_softmmu_targets_mips64el? ( fdt )
qemu_softmmu_targets_ppc64? ( fdt )
qemu_softmmu_targets_ppc? ( fdt )
qemu_softmmu_targets_riscv32? ( fdt )
qemu_softmmu_targets_riscv64? ( fdt )
qemu_softmmu_targets_x86_64? ( fdt )
sdl-image? ( sdl )
static? ( static-user !alsa !gtk !jack !opengl !pulseaudio !plugins !rbd !snappy !udev )
static-user? ( !plugins )
vhost-user-fs? ( caps seccomp )
virgl? ( opengl )
virtfs? ( caps xattr )
vnc? ( gnutls )
vte? ( gtk )
multipath? ( udev )
plugins? ( !static !static-user )
"
# Dependencies required for qemu tools (qemu-nbd, qemu-img, qemu-io, ...)
# and user/softmmu targets (qemu-*, qemu-system-*).
#
# Yep, you need both libcap and libcap-ng since virtfs only uses libcap.
#
# The attr lib isn't always linked in (although the USE flag is always
# 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(+)]
sys-libs/zlib[static-libs(+)]
python? ( ${PYTHON_DEPS} )
systemtap? ( dev-util/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(+)]
>=x11-libs/pixman-0.28.0[static-libs(+)]
accessibility? (
app-accessibility/brltty[api]
app-accessibility/brltty[static-libs(+)]
)
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(+)] )
curl? ( >=net-misc/curl-7.15.4[static-libs(+)] )
fdt? ( >=sys-apps/dtc-1.5.0[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(+)]
)
gtk? (
x11-libs/gtk+:3
vte? ( x11-libs/vte:2.91 )
)
infiniband? (
sys-cluster/rdma-core[static-libs(+)]
)
iscsi? ( net-libs/libiscsi )
io-uring? ( sys-libs/liburing:=[static-libs(+)] )
jack? ( virtual/jack )
jemalloc? ( dev-libs/jemalloc )
jpeg? ( virtual/jpeg:0=[static-libs(+)] )
lzo? ( dev-libs/lzo:2[static-libs(+)] )
multipath? ( sys-fs/multipath-tools )
ncurses? (
sys-libs/ncurses:=[unicode(+)]
sys-libs/ncurses:=[static-libs(+)]
)
nfs? ( >=net-fs/libnfs-1.9.3:=[static-libs(+)] )
numa? ( sys-process/numactl[static-libs(+)] )
opengl? (
virtual/opengl
media-libs/libepoxy[static-libs(+)]
media-libs/mesa[static-libs(+)]
media-libs/mesa[egl(+),gbm(+)]
)
png? ( media-libs/libpng:0=[static-libs(+)] )
pulseaudio? ( media-sound/pulseaudio )
rbd? ( sys-cluster/ceph )
sasl? ( dev-libs/cyrus-sasl[static-libs(+)] )
sdl? (
media-libs/libsdl2[video]
media-libs/libsdl2[static-libs(+)]
)
sdl-image? ( media-libs/sdl2-image[static-libs(+)] )
seccomp? ( >=sys-libs/libseccomp-2.1.0[static-libs(+)] )
slirp? ( net-libs/libslirp[static-libs(+)] )
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(+)]
)
ssh? ( >=net-libs/libssh-0.8.6[static-libs(+)] )
udev? ( virtual/libudev:= )
usb? ( >=virtual/libusb-1-r2[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="202105"
SEABIOS_VERSION="1.14.0"
X86_FIRMWARE_DEPEND="
pin-upstream-blobs? (
~sys-firmware/edk2-ovmf-${EDK2_OVMF_VERSION}[binary]
~sys-firmware/ipxe-1.21.1[binary,qemu]
~sys-firmware/seabios-${SEABIOS_VERSION}[binary,seavgabios]
~sys-firmware/sgabios-0.1_pre10[binary]
)
!pin-upstream-blobs? (
>=sys-firmware/edk2-ovmf-${EDK2_OVMF_VERSION}
sys-firmware/ipxe[qemu]
>=sys-firmware/seabios-${SEABIOS_VERSION}[seavgabios]
sys-firmware/sgabios
)"
PPC_FIRMWARE_DEPEND="
pin-upstream-blobs? (
~sys-firmware/seabios-${SEABIOS_VERSION}[binary,seavgabios]
)
!pin-upstream-blobs? (
>=sys-firmware/seabios-${SEABIOS_VERSION}[seavgabios]
)
"
BDEPEND="
$(python_gen_impl_dep)
dev-lang/perl
sys-apps/texinfo
virtual/pkgconfig
doc? (
dev-python/sphinx[${PYTHON_USEDEP}]
dev-python/sphinx_rtd_theme[${PYTHON_USEDEP}]
)
gtk? ( nls? ( sys-devel/gettext ) )
test? (
dev-libs/glib[utils]
sys-devel/bc
)
"
CDEPEND="
!static? (
${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_ppc? ( ${PPC_FIRMWARE_DEPEND} )
qemu_softmmu_targets_ppc64? ( ${PPC_FIRMWARE_DEPEND} )
"
DEPEND="${CDEPEND}
kernel_linux? ( >=sys-kernel/linux-headers-2.6.35 )
static? (
${ALL_DEPEND}
${SOFTMMU_TOOLS_DEPEND}
)
static-user? ( ${ALL_DEPEND} )"
RDEPEND="${CDEPEND}
acct-group/kvm
selinux? ( sec-policy/selinux-qemu )"
PATCHES=(
"${FILESDIR}"/${PN}-2.11.1-capstone_include_path.patch
"${FILESDIR}"/${PN}-5.2.0-disable-keymap.patch
"${FILESDIR}"/${PN}-6.0.0-make.patch
"${FILESDIR}"/${PN}-6.1.0-strings.patch
)
QA_PREBUILT="
usr/share/qemu/hppa-firmware.img
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
"
QA_WX_LOAD="usr/bin/qemu-i386
usr/bin/qemu-x86_64
usr/bin/qemu-alpha
usr/bin/qemu-arm
usr/bin/qemu-cris
usr/bin/qemu-m68k
usr/bin/qemu-microblaze
usr/bin/qemu-microblazeel
usr/bin/qemu-mips
usr/bin/qemu-mipsel
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
usr/bin/qemu-sparc64
usr/bin/qemu-armeb
usr/bin/qemu-sparc32plus
usr/bin/qemu-s390x
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
kernel module is loaded is to load it on boot.
For AMD CPUs the module is called 'kvm-amd'.
For Intel CPUs the module is called 'kvm-intel'.
Please review /etc/conf.d/modules for how to load these.
Make sure your user is in the 'kvm' group. Just run
$ gpasswd -a <USER> kvm
then have <USER> re-login.
For brand new installs, the default permissions on /dev/kvm might not let
you access it. You can tell udev to reset ownership/perms:
$ udevadm trigger -c add /dev/kvm
If you want to register binfmt handlers for qemu user targets:
For openrc:
# rc-update add qemu-binfmt
For systemd:
# ln -s /usr/share/qemu/binfmt.d/qemu.conf /etc/binfmt.d/qemu.conf"
pkg_pretend() {
if use kernel_linux && kernel_is lt 2 6 25; then
eerror "This version of KVM requires a host kernel of 2.6.25 or higher."
elif use kernel_linux; then
if ! linux_config_exists; then
eerror "Unable to check your kernel for KVM support"
else
CONFIG_CHECK="~KVM ~TUN ~BRIDGE"
ERROR_KVM="You must enable KVM in your kernel to continue"
ERROR_KVM_AMD="If you have an AMD CPU, you must enable KVM_AMD in"
ERROR_KVM_AMD+=" your kernel configuration."
ERROR_KVM_INTEL="If you have an Intel CPU, you must enable"
ERROR_KVM_INTEL+=" KVM_INTEL in your kernel configuration."
ERROR_TUN="You will need the Universal TUN/TAP driver compiled"
ERROR_TUN+=" into your kernel or loaded as a module to use the"
ERROR_TUN+=" virtual network device if using -net tap."
ERROR_BRIDGE="You will also need support for 802.1d"
ERROR_BRIDGE+=" Ethernet Bridging for some network configurations."
use vhost-net && CONFIG_CHECK+=" ~VHOST_NET"
ERROR_VHOST_NET="You must enable VHOST_NET to have vhost-net"
ERROR_VHOST_NET+=" support"
if use amd64 || use x86 || use amd64-linux || use x86-linux; then
if grep -q AuthenticAMD /proc/cpuinfo; then
CONFIG_CHECK+=" ~KVM_AMD"
elif grep -q GenuineIntel /proc/cpuinfo; then
CONFIG_CHECK+=" ~KVM_INTEL"
fi
fi
use python && CONFIG_CHECK+=" ~DEBUG_FS"
ERROR_DEBUG_FS="debugFS support required for kvm_stat"
# Now do the actual checks setup above
check_extra_config
fi
fi
if grep -qs '/usr/bin/qemu-kvm' "${EROOT}"/etc/libvirt/qemu/*.xml; then
eerror "The kvm/qemu-kvm wrappers no longer exist, but your libvirt"
eerror "instances are still pointing to it. Please update your"
eerror "configs in /etc/libvirt/qemu/ to use the -enable-kvm flag"
eerror "and the right system binary (e.g. qemu-system-x86_64)."
die "update your virt configs to not use qemu-kvm"
fi
}
# Sanity check to make sure target lists are kept up-to-date.
check_targets() {
local var=$1 mak=$2
local detected sorted
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))
sorted=$(echo $(printf '%s\n' ${!var} | LC_COLLATE=C sort -u))
if [[ ${sorted} != "${detected}" ]] ; then
eerror "The ebuild needs to be kept in sync."
eerror "${var}: ${sorted}"
eerror "$(printf '%-*s' ${#var} configure): ${detected}"
die "sync ${var} to the list of targets"
fi
popd >/dev/null
}
src_prepare() {
check_targets IUSE_SOFTMMU_TARGETS softmmu
check_targets IUSE_USER_TARGETS linux-user
default
# Use correct toolchain to fix cross-compiling
tc-export AR AS LD NM OBJCOPY PKG_CONFIG RANLIB STRINGS
export WINDRES=${CHOST}-windres
# Verbose builds
MAKEOPTS+=" V=1"
# Remove bundled copy of libfdt
rm -r dtc || die
}
##
# configures qemu based on the build directory and the build type
# we are using.
#
qemu_src_configure() {
debug-print-function ${FUNCNAME} "$@"
local buildtype=$1
local builddir="${S}/${buildtype}-build"
mkdir "${builddir}"
local conf_opts=(
--prefix=/usr
--sysconfdir=/etc
--bindir=/usr/bin
--libdir=/usr/$(get_libdir)
--datadir=/usr/share
--docdir=/usr/share/doc/${PF}/html
--mandir=/usr/share/man
--localstatedir=/var
--disable-bsd-user
--disable-containers # bug #732972
--disable-guest-agent
--disable-strip
# 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)"
--host-cc="$(tc-getBUILD_CC)"
$(use_enable debug debug-info)
$(use_enable debug debug-tcg)
$(use_enable doc docs)
$(use_enable nls gettext)
$(use_enable plugins)
$(use_enable xattr attr)
)
# Disable options not used by user targets. This simplifies building
# static user targets (USE=static-user) considerably.
conf_notuser() {
if [[ ${buildtype} == "user" ]] ; then
echo "--disable-${2:-$1}"
else
use_enable "$@"
fi
}
# Enable option only for softmmu build, but not 'user' or 'tools'
conf_softmmu() {
if [[ ${buildtype} == "softmmu" ]] ; then
use_enable "$@"
else
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_notuser fdt)
$(conf_notuser fuse)
$(conf_notuser glusterfs)
$(conf_notuser gnutls)
$(conf_notuser gnutls nettle)
$(conf_notuser gtk)
$(conf_notuser infiniband rdma)
$(conf_notuser iscsi libiscsi)
$(conf_notuser io-uring linux-io-uring)
$(conf_malloc jemalloc)
$(conf_notuser jpeg vnc-jpeg)
$(conf_notuser kernel_linux kvm)
$(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 rbd)
$(conf_notuser sasl vnc-sasl)
$(conf_notuser sdl)
$(conf_softmmu sdl-image)
$(conf_notuser seccomp)
$(conf_notuser slirp slirp system)
$(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_tools vhost-user-fs virtiofsd)
$(conf_notuser virgl virglrenderer)
$(conf_softmmu virtfs)
$(conf_notuser vnc)
$(conf_notuser vte)
$(conf_notuser xen)
$(conf_notuser xen xen-pci-passthrough)
$(conf_notuser xfs xfsctl)
# 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 jack)
$(usev sdl)
$(usev alsa)
$(usev oss)
)
conf_opts+=(
--audio-drv-list="${audio_opts// /,}"
)
fi
case ${buildtype} in
user)
conf_opts+=(
--enable-linux-user
--disable-system
--disable-blobs
--disable-tools
)
local static_flag="static-user"
;;
softmmu)
conf_opts+=(
--disable-linux-user
--enable-system
--disable-tools
)
local static_flag="static"
;;
tools)
conf_opts+=(
--disable-linux-user
--disable-system
--disable-blobs
--enable-tools
)
local static_flag="static"
;;
esac
local targets="${buildtype}_targets"
[[ -n ${targets} ]] && conf_opts+=( --target-list="${!targets}" )
# Add support for SystemTAP
use systemtap && conf_opts+=( --enable-trace-backend=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
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"
}
src_configure() {
local target
python_setup
softmmu_targets= softmmu_bins=()
user_targets= user_bins=()
for target in ${IUSE_SOFTMMU_TARGETS} ; do
if use "qemu_softmmu_targets_${target}"; then
softmmu_targets+=",${target}-softmmu"
softmmu_bins+=( "qemu-system-${target}" )
fi
done
for target in ${IUSE_USER_TARGETS} ; do
if use "qemu_user_targets_${target}"; then
user_targets+=",${target}-linux-user"
user_bins+=( "qemu-${target}" )
fi
done
softmmu_targets=${softmmu_targets#,}
user_targets=${user_targets#,}
[[ -n ${softmmu_targets} ]] && qemu_src_configure "softmmu"
[[ -n ${user_targets} ]] && qemu_src_configure "user"
qemu_src_configure "tools"
}
src_compile() {
if [[ -n ${user_targets} ]]; then
cd "${S}/user-build"
default
fi
if [[ -n ${softmmu_targets} ]]; then
cd "${S}/softmmu-build"
default
fi
cd "${S}/tools-build"
default
}
src_test() {
if [[ -n ${softmmu_targets} ]]; then
cd "${S}/softmmu-build"
pax-mark m */qemu-system-* #515550
emake check
fi
}
qemu_python_install() {
python_domodule "${S}/python/qemu"
python_doscript "${S}/scripts/kvm/vmxcap"
python_doscript "${S}/scripts/qmp/qmp-shell"
python_doscript "${S}/scripts/qmp/qemu-ga-client"
}
# Generate binfmt support files.
# - /etc/init.d/qemu-binfmt script which registers the user handlers (openrc)
# - /usr/share/qemu/binfmt.d/qemu.conf (for use with systemd-binfmt)
generate_initd() {
local out="${T}/qemu-binfmt"
local out_systemd="${T}/qemu.conf"
local d="${T}/binfmt.d"
einfo "Generating qemu binfmt scripts and configuration files"
# Generate the debian fragments first.
mkdir -p "${d}"
"${S}"/scripts/qemu-binfmt-conf.sh \
--debian \
--exportdir "${d}" \
--qemu-path "${EPREFIX}/usr/bin" \
|| die
# Then turn the fragments into a shell script we can source.
sed -E -i \
-e 's:^([^ ]+) (.*)$:\1="\2":' \
"${d}"/* || die
# Generate the init.d script by assembling the fragments from above.
local f qcpu package interpreter magic mask
cat "${FILESDIR}"/qemu-binfmt.initd.head >"${out}" || die
for f in "${d}"/qemu-* ; do
source "${f}"
# Normalize the cpu logic like we do in the init.d for the native cpu.
qcpu=${package#qemu-}
case ${qcpu} in
arm*) qcpu="arm";;
mips*) qcpu="mips";;
ppc*) qcpu="ppc";;
s390*) qcpu="s390";;
sh*) qcpu="sh";;
sparc*) qcpu="sparc";;
esac
# we use 'printf' here to be portable across 'sh'
# implementations: #679168
cat <<EOF >>"${out}"
if [ "\${cpu}" != "${qcpu}" -a -x "${interpreter}" ] ; then
printf '%s\n' ':${package}:M::${magic}:${mask}:${interpreter}:'"\${QEMU_BINFMT_FLAGS}" >/proc/sys/fs/binfmt_misc/register
fi
EOF
echo ":${package}:M::${magic}:${mask}:${interpreter}:OC" >>"${out_systemd}"
done
cat "${FILESDIR}"/qemu-binfmt.initd.tail >>"${out}" || die
}
src_install() {
if [[ -n ${user_targets} ]]; then
cd "${S}/user-build"
emake DESTDIR="${ED}" install
# Install binfmt handler init script for user targets.
generate_initd
doinitd "${T}/qemu-binfmt"
# Install binfmt/qemu.conf.
insinto "/usr/share/qemu/binfmt.d"
doins "${T}/qemu.conf"
fi
if [[ -n ${softmmu_targets} ]]; then
cd "${S}/softmmu-build"
emake DESTDIR="${ED}" install
# This might not exist if the test failed. #512010
[[ -e check-report.html ]] && dodoc check-report.html
if use kernel_linux; then
udev_newrules "${FILESDIR}"/65-kvm.rules-r2 65-kvm.rules
fi
if use python; then
python_foreach_impl qemu_python_install
fi
fi
cd "${S}/tools-build"
emake DESTDIR="${ED}" install
# Disable mprotect on the qemu binaries as they use JITs to be fast #459348
pushd "${ED}"/usr/bin >/dev/null
pax-mark mr "${softmmu_bins[@]}" "${user_bins[@]}" # bug 575594
popd >/dev/null
# Install config file example for qemu-bridge-helper
insinto "/etc/qemu"
doins "${FILESDIR}/bridge.conf"
cd "${S}"
dodoc MAINTAINERS docs/specs/pci-ids.txt
newdoc pc-bios/README README.pc-bios
# Disallow stripping of prebuilt firmware files.
dostrip -x ${QA_PREBUILT}
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
# Remove vgabios since we're using the seavgabios packaged one
rm "${ED}/usr/share/qemu/vgabios.bin"
rm "${ED}/usr/share/qemu/vgabios-cirrus.bin"
rm "${ED}/usr/share/qemu/vgabios-qxl.bin"
rm "${ED}/usr/share/qemu/vgabios-stdvga.bin"
rm "${ED}/usr/share/qemu/vgabios-virtio.bin"
rm "${ED}/usr/share/qemu/vgabios-vmware.bin"
# 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
dosym ../seavgabios/vgabios-stdvga.bin /usr/share/qemu/vgabios-stdvga.bin
dosym ../seavgabios/vgabios-virtio.bin /usr/share/qemu/vgabios-virtio.bin
dosym ../seavgabios/vgabios-vmware.bin /usr/share/qemu/vgabios-vmware.bin
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
dosym ../ipxe/10500940.rom /usr/share/qemu/pxe-ne2k_pci.rom
dosym ../ipxe/10222000.rom /usr/share/qemu/pxe-pcnet.rom
dosym ../ipxe/10ec8139.rom /usr/share/qemu/pxe-rtl8139.rom
dosym ../ipxe/1af41000.rom /usr/share/qemu/pxe-virtio.rom
fi
fi
DISABLE_AUTOFORMATTING=true
readme.gentoo_create_doc
}
firmware_abi_change() {
local pv
for pv in ${REPLACING_VERSIONS}; do
if ver_test ${pv} -lt ${FIRMWARE_ABI_VERSION}; then
return 0
fi
done
return 1
}
pkg_postinst() {
if [[ -n ${softmmu_targets} ]] && use kernel_linux; then
udev_reload
fi
xdg_icon_cache_update
[[ -z ${EPREFIX} ]] && [[ -f ${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)"
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"
ewarn "firmware. Please (cold) restart all running guests. For functional"
ewarn "guest migration ensure that all"
ewarn "hosts run at least"
ewarn " app-emulation/qemu-${FIRMWARE_ABI_VERSION}."
fi
}
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"
else
echo " USE=''"
fi
echo " $(best_version sys-firmware/ipxe)"
echo " $(best_version sys-firmware/seabios)"
if has_version 'sys-firmware/seabios[binary]'; then
echo " USE=binary"
else
echo " USE=''"
fi
echo " $(best_version sys-firmware/sgabios)"
}
pkg_postrm() {
xdg_icon_cache_update
}

View File

@ -1,20 +1,31 @@
# Copyright 1999-2022 Gentoo Authors # Copyright 1999-2023 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2 # Distributed under the terms of the GNU General Public License v2
EAPI=8 EAPI=8
PYTHON_COMPAT=( python3_{8,9,10} ) # 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:-1}
QEMU_DOCS_PREBUILT_DEV=ajak
QEMU_DOCS_VERSION="${PV}"
# Default to generating docs (inc. man pages) if no prebuilt; overridden later
# bug #830088
QEMU_DOC_USEFLAG="+doc"
PYTHON_COMPAT=( python3_{9,10,11} )
PYTHON_REQ_USE="ncurses,readline" PYTHON_REQ_USE="ncurses,readline"
FIRMWARE_ABI_VERSION="6.2.0" FIRMWARE_ABI_VERSION="7.1.0"
inherit linux-info toolchain-funcs python-r1 udev fcaps readme.gentoo-r1 \ inherit linux-info toolchain-funcs python-r1 udev fcaps readme.gentoo-r1 \
pax-utils xdg-utils pax-utils xdg-utils
if [[ ${PV} = *9999* ]]; then if [[ ${PV} == *9999* ]]; then
EGIT_REPO_URI="https://git.qemu.org/git/qemu.git" QEMU_DOCS_PREBUILT=0
EGIT_REPO_URI="https://gitlab.com/qemu-project/qemu.git/"
EGIT_SUBMODULES=( EGIT_SUBMODULES=(
meson
tests/fp/berkeley-softfloat-3 tests/fp/berkeley-softfloat-3
tests/fp/berkeley-testfloat-3 tests/fp/berkeley-testfloat-3
ui/keycodemapdb ui/keycodemapdb
@ -22,8 +33,15 @@ if [[ ${PV} = *9999* ]]; then
inherit git-r3 inherit git-r3
SRC_URI="" SRC_URI=""
else else
SRC_URI="https://download.qemu.org/${P}.tar.xz" MY_P="${PN}-${PV/_rc/-rc}"
KEYWORDS="~amd64 ~arm ~arm64 ~ppc ~ppc64 ~riscv ~x86" 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}"
KEYWORDS="amd64 ~arm arm64 ~loong ~ppc ppc64 ~riscv x86"
fi fi
DESCRIPTION="QEMU + Kernel-based Virtual Machine userland tools" DESCRIPTION="QEMU + Kernel-based Virtual Machine userland tools"
@ -32,16 +50,18 @@ HOMEPAGE="https://www.qemu.org https://www.linux-kvm.org"
LICENSE="GPL-2 LGPL-2 BSD-2" LICENSE="GPL-2 LGPL-2 BSD-2"
SLOT="0" SLOT="0"
IUSE="accessibility +aio alsa bpf bzip2 capstone +caps +curl debug +doc [[ ${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 +fdt fuse glusterfs +gnutls gtk infiniband iscsi io-uring
jack jemalloc +jpeg jack jemalloc +jpeg
lzo multipath lzo multipath
ncurses nfs nls numa opengl +oss pam +pin-upstream-blobs ncurses nfs nls numa opengl +oss pam +pin-upstream-blobs
plugins +png pulseaudio python rbd sasl +seccomp sdl sdl-image selinux plugins +png pulseaudio python rbd sasl sdl sdl-image selinux
+slirp +slirp
smartcard snappy spice ssh static static-user systemtap test udev usb smartcard snappy spice ssh static static-user systemtap test udev usb
usbredir vde +vhost-net vhost-user-fs virgl virtfs +vnc vte xattr xen usbredir vde +vhost-net virgl virtfs +vnc vte xattr xen
xfs zstd" zstd"
COMMON_TARGETS=" COMMON_TARGETS="
aarch64 aarch64
@ -50,6 +70,7 @@ COMMON_TARGETS="
cris cris
hppa hppa
i386 i386
loongarch64
m68k m68k
microblaze microblaze
microblazeel microblazeel
@ -85,7 +106,6 @@ IUSE_USER_TARGETS="
hexagon hexagon
mipsn32 mipsn32
mipsn32el mipsn32el
ppc64abi32
ppc64le ppc64le
sparc32plus sparc32plus
" "
@ -97,7 +117,8 @@ IUSE+=" ${use_softmmu_targets} ${use_user_targets}"
RESTRICT="!test? ( test )" RESTRICT="!test? ( test )"
# Allow no targets to be built so that people can get a tools-only build. # Allow no targets to be built so that people can get a tools-only build.
# Block USE flag configurations known to not work. # 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_arm? ( fdt )
qemu_softmmu_targets_microblaze? ( fdt ) qemu_softmmu_targets_microblaze? ( fdt )
qemu_softmmu_targets_mips64el? ( fdt ) qemu_softmmu_targets_mips64el? ( fdt )
@ -109,9 +130,8 @@ REQUIRED_USE="${PYTHON_REQUIRED_USE}
sdl-image? ( sdl ) sdl-image? ( sdl )
static? ( static-user !alsa !gtk !jack !opengl !pam !pulseaudio !plugins !rbd !snappy !udev ) static? ( static-user !alsa !gtk !jack !opengl !pam !pulseaudio !plugins !rbd !snappy !udev )
static-user? ( !plugins ) static-user? ( !plugins )
vhost-user-fs? ( caps seccomp )
virgl? ( opengl ) virgl? ( opengl )
virtfs? ( caps xattr ) virtfs? ( xattr )
vnc? ( gnutls ) vnc? ( gnutls )
vte? ( gtk ) vte? ( gtk )
multipath? ( udev ) multipath? ( udev )
@ -136,7 +156,8 @@ ALL_DEPEND="
# Dependencies required for qemu tools (qemu-nbd, qemu-img, qemu-io, ...) # Dependencies required for qemu tools (qemu-nbd, qemu-img, qemu-io, ...)
# softmmu targets (qemu-system-*). # softmmu targets (qemu-system-*).
SOFTMMU_TOOLS_DEPEND=" SOFTMMU_TOOLS_DEPEND="
dev-libs/libxml2[static-libs(+)] sys-libs/libcap-ng[static-libs(+)]
>=sys-libs/libseccomp-2.1.0[static-libs(+)]
>=x11-libs/pixman-0.28.0[static-libs(+)] >=x11-libs/pixman-0.28.0[static-libs(+)]
accessibility? ( accessibility? (
app-accessibility/brltty[api] app-accessibility/brltty[api]
@ -147,9 +168,8 @@ SOFTMMU_TOOLS_DEPEND="
bpf? ( dev-libs/libbpf:= ) bpf? ( dev-libs/libbpf:= )
bzip2? ( app-arch/bzip2[static-libs(+)] ) bzip2? ( app-arch/bzip2[static-libs(+)] )
capstone? ( dev-libs/capstone:= ) capstone? ( dev-libs/capstone:= )
caps? ( sys-libs/libcap-ng[static-libs(+)] )
curl? ( >=net-misc/curl-7.15.4[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(+)] ) fuse? ( >=sys-fs/fuse-3.1:3[static-libs(+)] )
glusterfs? ( >=sys-cluster/glusterfs-3.4.0[static-libs(+)] ) glusterfs? ( >=sys-cluster/glusterfs-3.4.0[static-libs(+)] )
gnutls? ( gnutls? (
@ -165,7 +185,7 @@ SOFTMMU_TOOLS_DEPEND="
io-uring? ( sys-libs/liburing:=[static-libs(+)] ) io-uring? ( sys-libs/liburing:=[static-libs(+)] )
jack? ( virtual/jack ) jack? ( virtual/jack )
jemalloc? ( dev-libs/jemalloc ) jemalloc? ( dev-libs/jemalloc )
jpeg? ( virtual/jpeg:0=[static-libs(+)] ) jpeg? ( media-libs/libjpeg-turbo:=[static-libs(+)] )
lzo? ( dev-libs/lzo:2[static-libs(+)] ) lzo? ( dev-libs/lzo:2[static-libs(+)] )
multipath? ( sys-fs/multipath-tools ) multipath? ( sys-fs/multipath-tools )
ncurses? ( ncurses? (
@ -190,7 +210,6 @@ SOFTMMU_TOOLS_DEPEND="
media-libs/libsdl2[static-libs(+)] media-libs/libsdl2[static-libs(+)]
) )
sdl-image? ( media-libs/sdl2-image[static-libs(+)] ) sdl-image? ( media-libs/sdl2-image[static-libs(+)] )
seccomp? ( >=sys-libs/libseccomp-2.1.0[static-libs(+)] )
slirp? ( net-libs/libslirp[static-libs(+)] ) slirp? ( net-libs/libslirp[static-libs(+)] )
smartcard? ( >=app-emulation/libcacard-2.5.0[static-libs(+)] ) smartcard? ( >=app-emulation/libcacard-2.5.0[static-libs(+)] )
snappy? ( app-arch/snappy:= ) snappy? ( app-arch/snappy:= )
@ -206,38 +225,47 @@ SOFTMMU_TOOLS_DEPEND="
virgl? ( media-libs/virglrenderer[static-libs(+)] ) virgl? ( media-libs/virglrenderer[static-libs(+)] )
virtfs? ( sys-libs/libcap ) virtfs? ( sys-libs/libcap )
xen? ( app-emulation/xen-tools:= ) xen? ( app-emulation/xen-tools:= )
xfs? ( sys-fs/xfsprogs[static-libs(+)] )
zstd? ( >=app-arch/zstd-1.4.0[static-libs(+)] ) zstd? ( >=app-arch/zstd-1.4.0[static-libs(+)] )
" "
EDK2_OVMF_VERSION="202105" EDK2_OVMF_VERSION="202202"
SEABIOS_VERSION="1.14.0" SEABIOS_VERSION="1.16.0"
X86_FIRMWARE_DEPEND=" X86_FIRMWARE_DEPEND="
pin-upstream-blobs? ( pin-upstream-blobs? (
~sys-firmware/edk2-ovmf-${EDK2_OVMF_VERSION}[binary] ~sys-firmware/edk2-ovmf-bin-${EDK2_OVMF_VERSION}
~sys-firmware/ipxe-1.21.1[binary,qemu] ~sys-firmware/ipxe-1.21.1[binary,qemu]
~sys-firmware/seabios-${SEABIOS_VERSION}[binary,seavgabios] ~sys-firmware/seabios-bin-${SEABIOS_VERSION}
~sys-firmware/sgabios-0.1_pre10[binary] ~sys-firmware/sgabios-0.1_pre10[binary]
) )
!pin-upstream-blobs? ( !pin-upstream-blobs? (
>=sys-firmware/edk2-ovmf-${EDK2_OVMF_VERSION} || (
>=sys-firmware/edk2-ovmf-${EDK2_OVMF_VERSION}
>=sys-firmware/edk2-ovmf-bin-${EDK2_OVMF_VERSION}
)
sys-firmware/ipxe[qemu] sys-firmware/ipxe[qemu]
>=sys-firmware/seabios-${SEABIOS_VERSION}[seavgabios] || (
>=sys-firmware/seabios-${SEABIOS_VERSION}[seavgabios]
>=sys-firmware/seabios-bin-${SEABIOS_VERSION}
)
sys-firmware/sgabios sys-firmware/sgabios
)" )"
PPC_FIRMWARE_DEPEND=" PPC_FIRMWARE_DEPEND="
pin-upstream-blobs? ( pin-upstream-blobs? (
~sys-firmware/seabios-${SEABIOS_VERSION}[binary,seavgabios] ~sys-firmware/seabios-bin-${SEABIOS_VERSION}
) )
!pin-upstream-blobs? ( !pin-upstream-blobs? (
>=sys-firmware/seabios-${SEABIOS_VERSION}[seavgabios] || (
>=sys-firmware/seabios-${SEABIOS_VERSION}[seavgabios]
>=sys-firmware/seabios-bin-${SEABIOS_VERSION}
)
) )
" "
BDEPEND=" BDEPEND="
$(python_gen_impl_dep) $(python_gen_impl_dep)
dev-lang/perl dev-lang/perl
dev-util/meson
sys-apps/texinfo sys-apps/texinfo
virtual/pkgconfig virtual/pkgconfig
doc? ( doc? (
@ -275,12 +303,14 @@ RDEPEND="${CDEPEND}
)" )"
PATCHES=( PATCHES=(
"${FILESDIR}"/${PN}-2.11.1-capstone_include_path.patch
"${FILESDIR}"/${PN}-5.2.0-disable-keymap.patch "${FILESDIR}"/${PN}-5.2.0-disable-keymap.patch
"${FILESDIR}"/${PN}-6.0.0-make.patch "${FILESDIR}"/${PN}-6.0.0-make.patch
"${FILESDIR}"/${PN}-6.1.0-strings.patch "${FILESDIR}"/${PN}-7.1.0-also-build-virtfs-proxy-helper.patch
"${FILESDIR}"/${PN}-6.2.0-user-SLIC-crash.patch "${FILESDIR}"/${PN}-7.1.0-strings.patch
"${FILESDIR}"/${PN}-6.2.0-also-build-virtfs-proxy-helper.patch "${FILESDIR}"/${PN}-7.1.0-capstone-include-path.patch
"${FILESDIR}"/${PN}-7.1.0-mips-n32-syscalls.patch
"${FILESDIR}"/${PN}-7.1.0-loong-stat.patch
"${FILESDIR}"/${PN}-7.1.0-faccessat2.patch
) )
QA_PREBUILT=" QA_PREBUILT="
@ -309,7 +339,6 @@ QA_WX_LOAD="usr/bin/qemu-i386
usr/bin/qemu-or1k usr/bin/qemu-or1k
usr/bin/qemu-ppc usr/bin/qemu-ppc
usr/bin/qemu-ppc64 usr/bin/qemu-ppc64
usr/bin/qemu-ppc64abi32
usr/bin/qemu-sh4 usr/bin/qemu-sh4
usr/bin/qemu-sh4eb usr/bin/qemu-sh4eb
usr/bin/qemu-sparc usr/bin/qemu-sparc
@ -421,8 +450,13 @@ src_prepare() {
# Verbose builds # Verbose builds
MAKEOPTS+=" V=1" MAKEOPTS+=" V=1"
# Remove bundled copy of libfdt # We already force -D_FORTIFY_SOURCE=2 (or 3) in our toolchain, but
rm -r dtc || die # this setting (-U then -D..=2) will prevent us from trying out 3, so
# drop it. No change to level of protection b/c we patch our toolchain.
sed -i -e 's/-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2//' configure || die
# Remove bundled modules
rm -r dtc meson roms/*/ slirp || die
} }
## ##
@ -435,7 +469,7 @@ qemu_src_configure() {
local buildtype=$1 local buildtype=$1
local builddir="${S}/${buildtype}-build" local builddir="${S}/${buildtype}-build"
mkdir "${builddir}" mkdir "${builddir}" || die
local conf_opts=( local conf_opts=(
--prefix=/usr --prefix=/usr
@ -467,10 +501,10 @@ qemu_src_configure() {
# are enabled), but it's not really worth the hassle. Disable it # are enabled), but it's not really worth the hassle. Disable it
# all the time to avoid automatically detecting it. #568856 # all the time to avoid automatically detecting it. #568856
--disable-gcrypt --disable-gcrypt
--python="${PYTHON}"
--cc="$(tc-getCC)" --cc="$(tc-getCC)"
--cxx="$(tc-getCXX)" --cxx="$(tc-getCXX)"
--host-cc="$(tc-getBUILD_CC)" --host-cc="$(tc-getBUILD_CC)"
$(use_enable alsa) $(use_enable alsa)
$(use_enable debug debug-info) $(use_enable debug debug-info)
$(use_enable debug debug-tcg) $(use_enable debug debug-tcg)
@ -521,7 +555,6 @@ qemu_src_configure() {
$(conf_softmmu bpf) $(conf_softmmu bpf)
$(conf_notuser bzip2) $(conf_notuser bzip2)
$(conf_notuser capstone) $(conf_notuser capstone)
$(conf_notuser caps cap-ng)
$(conf_notuser curl) $(conf_notuser curl)
$(conf_tools doc docs) $(conf_tools doc docs)
$(conf_notuser fdt) $(conf_notuser fdt)
@ -543,12 +576,11 @@ qemu_src_configure() {
$(conf_notuser numa) $(conf_notuser numa)
$(conf_notuser opengl) $(conf_notuser opengl)
$(conf_notuser pam auth-pam) $(conf_notuser pam auth-pam)
$(conf_notuser png vnc-png) $(conf_notuser png)
$(conf_notuser rbd) $(conf_notuser rbd)
$(conf_notuser sasl vnc-sasl) $(conf_notuser sasl vnc-sasl)
$(conf_notuser sdl) $(conf_notuser sdl)
$(conf_softmmu sdl-image) $(conf_softmmu sdl-image)
$(conf_notuser seccomp)
$(conf_notuser slirp slirp system) $(conf_notuser slirp slirp system)
$(conf_notuser smartcard) $(conf_notuser smartcard)
$(conf_notuser snappy) $(conf_notuser snappy)
@ -559,26 +591,17 @@ qemu_src_configure() {
$(conf_notuser usbredir usb-redir) $(conf_notuser usbredir usb-redir)
$(conf_notuser vde) $(conf_notuser vde)
$(conf_notuser vhost-net) $(conf_notuser vhost-net)
$(conf_notuser vhost-user-fs)
$(conf_tools vhost-user-fs virtiofsd)
$(conf_notuser virgl virglrenderer) $(conf_notuser virgl virglrenderer)
$(conf_softmmu virtfs) $(conf_softmmu virtfs)
$(conf_notuser vnc) $(conf_notuser vnc)
$(conf_notuser vte) $(conf_notuser vte)
$(conf_notuser xen) $(conf_notuser xen)
$(conf_notuser xen xen-pci-passthrough) $(conf_notuser xen xen-pci-passthrough)
$(conf_notuser xfs xfsctl)
# use prebuilt keymaps, bug #759604 # use prebuilt keymaps, bug #759604
--disable-xkbcommon --disable-xkbcommon
$(conf_notuser zstd) $(conf_notuser zstd)
) )
if [[ ${buildtype} == "user" ]] ; then
conf_opts+=( --disable-libxml2 )
else
conf_opts+=( --enable-libxml2 )
fi
if [[ ! ${buildtype} == "user" ]] ; then if [[ ! ${buildtype} == "user" ]] ; then
# audio options # audio options
local audio_opts=( local audio_opts=(
@ -602,6 +625,8 @@ qemu_src_configure() {
--disable-system --disable-system
--disable-blobs --disable-blobs
--disable-tools --disable-tools
--disable-cap-ng
--disable-seccomp
) )
local static_flag="static-user" local static_flag="static-user"
;; ;;
@ -610,6 +635,8 @@ qemu_src_configure() {
--disable-linux-user --disable-linux-user
--enable-system --enable-system
--disable-tools --disable-tools
--enable-cap-ng
--enable-seccomp
) )
local static_flag="static" local static_flag="static"
;; ;;
@ -618,6 +645,8 @@ qemu_src_configure() {
--disable-linux-user --disable-linux-user
--disable-system --disable-system
--disable-blobs --disable-blobs
--enable-cap-ng
--enable-seccomp
--enable-tools --enable-tools
) )
local static_flag="static" local static_flag="static"
@ -683,22 +712,22 @@ src_configure() {
src_compile() { src_compile() {
if [[ -n ${user_targets} ]]; then if [[ -n ${user_targets} ]]; then
cd "${S}/user-build" cd "${S}/user-build" || die
default default
fi fi
if [[ -n ${softmmu_targets} ]]; then if [[ -n ${softmmu_targets} ]]; then
cd "${S}/softmmu-build" cd "${S}/softmmu-build" || die
default default
fi fi
cd "${S}/tools-build" cd "${S}/tools-build" || die
default default
} }
src_test() { src_test() {
if [[ -n ${softmmu_targets} ]]; then if [[ -n ${softmmu_targets} ]]; then
cd "${S}/softmmu-build" cd "${S}/softmmu-build" || die
pax-mark m */qemu-system-* #515550 pax-mark m */qemu-system-* #515550
emake check emake check
fi fi
@ -795,19 +824,24 @@ src_install() {
fi fi
fi fi
cd "${S}/tools-build" cd "${S}/tools-build" || die
emake DESTDIR="${ED}" install 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 # 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 pax-mark mr "${softmmu_bins[@]}" "${user_bins[@]}" # bug 575594
popd >/dev/null popd >/dev/null || die
# Install config file example for qemu-bridge-helper # Install config file example for qemu-bridge-helper
insinto "/etc/qemu" insinto "/etc/qemu"
doins "${FILESDIR}/bridge.conf" doins "${FILESDIR}/bridge.conf"
cd "${S}" cd "${S}" || die
dodoc MAINTAINERS docs/specs/pci-ids.txt dodoc MAINTAINERS docs/specs/pci-ids.txt
newdoc pc-bios/README README.pc-bios newdoc pc-bios/README README.pc-bios
@ -816,10 +850,7 @@ src_install() {
if [[ -n ${softmmu_targets} ]]; then if [[ -n ${softmmu_targets} ]]; then
# Remove SeaBIOS since we're using the SeaBIOS packaged one # 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 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 dosym ../seabios/bios-256k.bin /usr/share/qemu/bios-256k.bin
fi fi
@ -830,6 +861,7 @@ src_install() {
rm "${ED}/usr/share/qemu/vgabios-stdvga.bin" rm "${ED}/usr/share/qemu/vgabios-stdvga.bin"
rm "${ED}/usr/share/qemu/vgabios-virtio.bin" rm "${ED}/usr/share/qemu/vgabios-virtio.bin"
rm "${ED}/usr/share/qemu/vgabios-vmware.bin" rm "${ED}/usr/share/qemu/vgabios-vmware.bin"
# PPC/PPC64 loads vgabios-stdvga # 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 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-isavga.bin /usr/share/qemu/vgabios.bin
@ -841,13 +873,11 @@ src_install() {
fi fi
# Remove sgabios since we're using the sgabios packaged one # 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 if use qemu_softmmu_targets_x86_64 || use qemu_softmmu_targets_i386; then
dosym ../sgabios/sgabios.bin /usr/share/qemu/sgabios.bin dosym ../sgabios/sgabios.bin /usr/share/qemu/sgabios.bin
fi fi
# Remove iPXE since we're using the iPXE packaged one # 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 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/8086100e.rom /usr/share/qemu/pxe-e1000.rom
dosym ../ipxe/80861209.rom /usr/share/qemu/pxe-eepro100.rom dosym ../ipxe/80861209.rom /usr/share/qemu/pxe-eepro100.rom
@ -880,16 +910,27 @@ pkg_postinst() {
xdg_icon_cache_update xdg_icon_cache_update
[[ -z ${EPREFIX} ]] && [[ -f ${EROOT}/usr/libexec/qemu-bridge-helper ]] && \ [[ -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 DISABLE_AUTOFORMATTING=true
readme.gentoo_print_elog readme.gentoo_print_elog
if use pin-upstream-blobs && firmware_abi_change; then if use pin-upstream-blobs && firmware_abi_change; then
ewarn "This version of qemu pins new versions of firmware blobs:" 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/ipxe)"
ewarn " $(best_version sys-firmware/seabios)"
ewarn " $(best_version sys-firmware/sgabios)" ewarn " $(best_version sys-firmware/sgabios)"
ewarn "This might break resume of hibernated guests (started with a different" ewarn "This might break resume of hibernated guests (started with a different"
ewarn "firmware version) and live migration to/from qemu versions with different" ewarn "firmware version) and live migration to/from qemu versions with different"
@ -903,22 +944,24 @@ pkg_postinst() {
pkg_info() { pkg_info() {
echo "Using:" echo "Using:"
echo " $(best_version app-emulation/spice-protocol)" echo " $(best_version app-emulation/spice-protocol)"
echo " $(best_version sys-firmware/edk2-ovmf)"
if has_version 'sys-firmware/edk2-ovmf[binary]'; then if has_version 'sys-firmware/edk2-ovmf-bin'; then
echo " USE=binary" echo " $(best_version sys-firmware/edk2-ovmf-bin)"
else else
echo " USE=''" echo " $(best_version sys-firmware/edk2-ovmf)"
fi fi
if has_version 'sys-firmware/seabios-bin'; then
echo " $(best_version sys-firmware/seabios-bin)"
else
echo " $(best_version sys-firmware/seabios)"
fi
echo " $(best_version sys-firmware/ipxe)" echo " $(best_version sys-firmware/ipxe)"
echo " $(best_version sys-firmware/seabios)"
if has_version 'sys-firmware/seabios[binary]'; then
echo " USE=binary"
else
echo " USE=''"
fi
echo " $(best_version sys-firmware/sgabios)" echo " $(best_version sys-firmware/sgabios)"
} }
pkg_postrm() { pkg_postrm() {
xdg_icon_cache_update xdg_icon_cache_update
udev_reload
} }

View File

@ -1,20 +1,31 @@
# Copyright 1999-2022 Gentoo Authors # Copyright 1999-2023 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2 # Distributed under the terms of the GNU General Public License v2
EAPI=8 EAPI=8
PYTHON_COMPAT=( python3_{8,9,10} ) # 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:-1}
QEMU_DOCS_PREBUILT_DEV=ajak
QEMU_DOCS_VERSION="${PV}"
# Default to generating docs (inc. man pages) if no prebuilt; overridden later
# bug #830088
QEMU_DOC_USEFLAG="+doc"
PYTHON_COMPAT=( python3_{9,10,11} )
PYTHON_REQ_USE="ncurses,readline" PYTHON_REQ_USE="ncurses,readline"
FIRMWARE_ABI_VERSION="6.2.0" FIRMWARE_ABI_VERSION="7.1.0"
inherit linux-info toolchain-funcs python-r1 udev fcaps readme.gentoo-r1 \ inherit linux-info toolchain-funcs python-r1 udev fcaps readme.gentoo-r1 \
pax-utils xdg-utils pax-utils xdg-utils
if [[ ${PV} = *9999* ]]; then if [[ ${PV} == *9999* ]]; then
EGIT_REPO_URI="https://git.qemu.org/git/qemu.git" QEMU_DOCS_PREBUILT=0
EGIT_REPO_URI="https://gitlab.com/qemu-project/qemu.git/"
EGIT_SUBMODULES=( EGIT_SUBMODULES=(
meson
tests/fp/berkeley-softfloat-3 tests/fp/berkeley-softfloat-3
tests/fp/berkeley-testfloat-3 tests/fp/berkeley-testfloat-3
ui/keycodemapdb ui/keycodemapdb
@ -22,8 +33,15 @@ if [[ ${PV} = *9999* ]]; then
inherit git-r3 inherit git-r3
SRC_URI="" SRC_URI=""
else else
SRC_URI="https://download.qemu.org/${P}.tar.xz" MY_P="${PN}-${PV/_rc/-rc}"
KEYWORDS="~amd64 ~arm ~arm64 ~ppc ~ppc64 ~riscv ~x86" 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}"
KEYWORDS="~amd64 ~arm ~arm64 ~loong ~ppc ~ppc64 ~riscv ~x86"
fi fi
DESCRIPTION="QEMU + Kernel-based Virtual Machine userland tools" DESCRIPTION="QEMU + Kernel-based Virtual Machine userland tools"
@ -32,7 +50,9 @@ HOMEPAGE="https://www.qemu.org https://www.linux-kvm.org"
LICENSE="GPL-2 LGPL-2 BSD-2" LICENSE="GPL-2 LGPL-2 BSD-2"
SLOT="0" SLOT="0"
IUSE="accessibility +aio alsa bpf bzip2 capstone +caps +curl debug +doc [[ ${QEMU_DOCS_PREBUILT} == 1 ]] && QEMU_DOC_USEFLAG="doc"
IUSE="accessibility +aio alsa bpf bzip2 capstone +caps +curl debug ${QEMU_DOC_USEFLAG}
+fdt fuse glusterfs +gnutls gtk infiniband iscsi io-uring +fdt fuse glusterfs +gnutls gtk infiniband iscsi io-uring
jack jemalloc +jpeg jack jemalloc +jpeg
lzo multipath lzo multipath
@ -41,7 +61,7 @@ IUSE="accessibility +aio alsa bpf bzip2 capstone +caps +curl debug +doc
+slirp +slirp
smartcard snappy spice ssh static static-user systemtap test udev usb smartcard snappy spice ssh static static-user systemtap test udev usb
usbredir vde +vhost-net vhost-user-fs virgl virtfs +vnc vte xattr xen usbredir vde +vhost-net vhost-user-fs virgl virtfs +vnc vte xattr xen
xfs zstd" zstd"
COMMON_TARGETS=" COMMON_TARGETS="
aarch64 aarch64
@ -50,6 +70,7 @@ COMMON_TARGETS="
cris cris
hppa hppa
i386 i386
loongarch64
m68k m68k
microblaze microblaze
microblazeel microblazeel
@ -85,7 +106,6 @@ IUSE_USER_TARGETS="
hexagon hexagon
mipsn32 mipsn32
mipsn32el mipsn32el
ppc64abi32
ppc64le ppc64le
sparc32plus sparc32plus
" "
@ -136,7 +156,6 @@ ALL_DEPEND="
# Dependencies required for qemu tools (qemu-nbd, qemu-img, qemu-io, ...) # Dependencies required for qemu tools (qemu-nbd, qemu-img, qemu-io, ...)
# softmmu targets (qemu-system-*). # softmmu targets (qemu-system-*).
SOFTMMU_TOOLS_DEPEND=" SOFTMMU_TOOLS_DEPEND="
dev-libs/libxml2[static-libs(+)]
>=x11-libs/pixman-0.28.0[static-libs(+)] >=x11-libs/pixman-0.28.0[static-libs(+)]
accessibility? ( accessibility? (
app-accessibility/brltty[api] app-accessibility/brltty[api]
@ -149,7 +168,7 @@ SOFTMMU_TOOLS_DEPEND="
capstone? ( dev-libs/capstone:= ) capstone? ( dev-libs/capstone:= )
caps? ( sys-libs/libcap-ng[static-libs(+)] ) caps? ( sys-libs/libcap-ng[static-libs(+)] )
curl? ( >=net-misc/curl-7.15.4[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(+)] ) fuse? ( >=sys-fs/fuse-3.1:3[static-libs(+)] )
glusterfs? ( >=sys-cluster/glusterfs-3.4.0[static-libs(+)] ) glusterfs? ( >=sys-cluster/glusterfs-3.4.0[static-libs(+)] )
gnutls? ( gnutls? (
@ -165,7 +184,7 @@ SOFTMMU_TOOLS_DEPEND="
io-uring? ( sys-libs/liburing:=[static-libs(+)] ) io-uring? ( sys-libs/liburing:=[static-libs(+)] )
jack? ( virtual/jack ) jack? ( virtual/jack )
jemalloc? ( dev-libs/jemalloc ) jemalloc? ( dev-libs/jemalloc )
jpeg? ( virtual/jpeg:0=[static-libs(+)] ) jpeg? ( media-libs/libjpeg-turbo:=[static-libs(+)] )
lzo? ( dev-libs/lzo:2[static-libs(+)] ) lzo? ( dev-libs/lzo:2[static-libs(+)] )
multipath? ( sys-fs/multipath-tools ) multipath? ( sys-fs/multipath-tools )
ncurses? ( ncurses? (
@ -206,38 +225,47 @@ SOFTMMU_TOOLS_DEPEND="
virgl? ( media-libs/virglrenderer[static-libs(+)] ) virgl? ( media-libs/virglrenderer[static-libs(+)] )
virtfs? ( sys-libs/libcap ) virtfs? ( sys-libs/libcap )
xen? ( app-emulation/xen-tools:= ) xen? ( app-emulation/xen-tools:= )
xfs? ( sys-fs/xfsprogs[static-libs(+)] )
zstd? ( >=app-arch/zstd-1.4.0[static-libs(+)] ) zstd? ( >=app-arch/zstd-1.4.0[static-libs(+)] )
" "
EDK2_OVMF_VERSION="202105" EDK2_OVMF_VERSION="202202"
SEABIOS_VERSION="1.14.0" SEABIOS_VERSION="1.16.0"
X86_FIRMWARE_DEPEND=" X86_FIRMWARE_DEPEND="
pin-upstream-blobs? ( pin-upstream-blobs? (
~sys-firmware/edk2-ovmf-${EDK2_OVMF_VERSION}[binary] ~sys-firmware/edk2-ovmf-bin-${EDK2_OVMF_VERSION}
~sys-firmware/ipxe-1.21.1[binary,qemu] ~sys-firmware/ipxe-1.21.1[binary,qemu]
~sys-firmware/seabios-${SEABIOS_VERSION}[binary,seavgabios] ~sys-firmware/seabios-bin-${SEABIOS_VERSION}
~sys-firmware/sgabios-0.1_pre10[binary] ~sys-firmware/sgabios-0.1_pre10[binary]
) )
!pin-upstream-blobs? ( !pin-upstream-blobs? (
>=sys-firmware/edk2-ovmf-${EDK2_OVMF_VERSION} || (
>=sys-firmware/edk2-ovmf-${EDK2_OVMF_VERSION}
>=sys-firmware/edk2-ovmf-bin-${EDK2_OVMF_VERSION}
)
sys-firmware/ipxe[qemu] sys-firmware/ipxe[qemu]
>=sys-firmware/seabios-${SEABIOS_VERSION}[seavgabios] || (
>=sys-firmware/seabios-${SEABIOS_VERSION}[seavgabios]
>=sys-firmware/seabios-bin-${SEABIOS_VERSION}
)
sys-firmware/sgabios sys-firmware/sgabios
)" )"
PPC_FIRMWARE_DEPEND=" PPC_FIRMWARE_DEPEND="
pin-upstream-blobs? ( pin-upstream-blobs? (
~sys-firmware/seabios-${SEABIOS_VERSION}[binary,seavgabios] ~sys-firmware/seabios-bin-${SEABIOS_VERSION}
) )
!pin-upstream-blobs? ( !pin-upstream-blobs? (
>=sys-firmware/seabios-${SEABIOS_VERSION}[seavgabios] || (
>=sys-firmware/seabios-${SEABIOS_VERSION}[seavgabios]
>=sys-firmware/seabios-bin-${SEABIOS_VERSION}
)
) )
" "
BDEPEND=" BDEPEND="
$(python_gen_impl_dep) $(python_gen_impl_dep)
dev-lang/perl dev-lang/perl
dev-util/meson
sys-apps/texinfo sys-apps/texinfo
virtual/pkgconfig virtual/pkgconfig
doc? ( doc? (
@ -275,13 +303,11 @@ RDEPEND="${CDEPEND}
)" )"
PATCHES=( PATCHES=(
"${FILESDIR}"/${PN}-2.11.1-capstone_include_path.patch
"${FILESDIR}"/${PN}-5.2.0-disable-keymap.patch "${FILESDIR}"/${PN}-5.2.0-disable-keymap.patch
"${FILESDIR}"/${PN}-6.0.0-make.patch "${FILESDIR}"/${PN}-6.0.0-make.patch
"${FILESDIR}"/${PN}-6.1.0-strings.patch "${FILESDIR}"/${PN}-7.1.0-also-build-virtfs-proxy-helper.patch
"${FILESDIR}"/${PN}-6.2.0-user-SLIC-crash.patch "${FILESDIR}"/${PN}-7.1.0-strings.patch
"${FILESDIR}"/${PN}-6.2.0-also-build-virtfs-proxy-helper.patch "${FILESDIR}"/${PN}-7.1.0-capstone-include-path.patch
"${FILESDIR}"/${PN}-6.2.0-glibc-2.35-rseq-seccomp-virtiofsd.patch
) )
QA_PREBUILT=" QA_PREBUILT="
@ -310,7 +336,6 @@ QA_WX_LOAD="usr/bin/qemu-i386
usr/bin/qemu-or1k usr/bin/qemu-or1k
usr/bin/qemu-ppc usr/bin/qemu-ppc
usr/bin/qemu-ppc64 usr/bin/qemu-ppc64
usr/bin/qemu-ppc64abi32
usr/bin/qemu-sh4 usr/bin/qemu-sh4
usr/bin/qemu-sh4eb usr/bin/qemu-sh4eb
usr/bin/qemu-sparc usr/bin/qemu-sparc
@ -422,8 +447,13 @@ src_prepare() {
# Verbose builds # Verbose builds
MAKEOPTS+=" V=1" MAKEOPTS+=" V=1"
# Remove bundled copy of libfdt # We already force -D_FORTIFY_SOURCE=2 (or 3) in our toolchain, but
rm -r dtc || die # this setting (-U then -D..=2) will prevent us from trying out 3, so
# drop it. No change to level of protection b/c we patch our toolchain.
sed -i -e 's/-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2//' configure || die
# Remove bundled modules
rm -r dtc meson roms/*/ slirp || die
} }
## ##
@ -436,7 +466,7 @@ qemu_src_configure() {
local buildtype=$1 local buildtype=$1
local builddir="${S}/${buildtype}-build" local builddir="${S}/${buildtype}-build"
mkdir "${builddir}" mkdir "${builddir}" || die
local conf_opts=( local conf_opts=(
--prefix=/usr --prefix=/usr
@ -468,10 +498,10 @@ qemu_src_configure() {
# are enabled), but it's not really worth the hassle. Disable it # are enabled), but it's not really worth the hassle. Disable it
# all the time to avoid automatically detecting it. #568856 # all the time to avoid automatically detecting it. #568856
--disable-gcrypt --disable-gcrypt
--python="${PYTHON}"
--cc="$(tc-getCC)" --cc="$(tc-getCC)"
--cxx="$(tc-getCXX)" --cxx="$(tc-getCXX)"
--host-cc="$(tc-getBUILD_CC)" --host-cc="$(tc-getBUILD_CC)"
$(use_enable alsa) $(use_enable alsa)
$(use_enable debug debug-info) $(use_enable debug debug-info)
$(use_enable debug debug-tcg) $(use_enable debug debug-tcg)
@ -544,7 +574,7 @@ qemu_src_configure() {
$(conf_notuser numa) $(conf_notuser numa)
$(conf_notuser opengl) $(conf_notuser opengl)
$(conf_notuser pam auth-pam) $(conf_notuser pam auth-pam)
$(conf_notuser png vnc-png) $(conf_notuser png)
$(conf_notuser rbd) $(conf_notuser rbd)
$(conf_notuser sasl vnc-sasl) $(conf_notuser sasl vnc-sasl)
$(conf_notuser sdl) $(conf_notuser sdl)
@ -560,26 +590,17 @@ qemu_src_configure() {
$(conf_notuser usbredir usb-redir) $(conf_notuser usbredir usb-redir)
$(conf_notuser vde) $(conf_notuser vde)
$(conf_notuser vhost-net) $(conf_notuser vhost-net)
$(conf_notuser vhost-user-fs)
$(conf_tools vhost-user-fs virtiofsd)
$(conf_notuser virgl virglrenderer) $(conf_notuser virgl virglrenderer)
$(conf_softmmu virtfs) $(conf_softmmu virtfs)
$(conf_notuser vnc) $(conf_notuser vnc)
$(conf_notuser vte) $(conf_notuser vte)
$(conf_notuser xen) $(conf_notuser xen)
$(conf_notuser xen xen-pci-passthrough) $(conf_notuser xen xen-pci-passthrough)
$(conf_notuser xfs xfsctl)
# use prebuilt keymaps, bug #759604 # use prebuilt keymaps, bug #759604
--disable-xkbcommon --disable-xkbcommon
$(conf_notuser zstd) $(conf_notuser zstd)
) )
if [[ ${buildtype} == "user" ]] ; then
conf_opts+=( --disable-libxml2 )
else
conf_opts+=( --enable-libxml2 )
fi
if [[ ! ${buildtype} == "user" ]] ; then if [[ ! ${buildtype} == "user" ]] ; then
# audio options # audio options
local audio_opts=( local audio_opts=(
@ -613,6 +634,16 @@ qemu_src_configure() {
--disable-tools --disable-tools
) )
local static_flag="static" local static_flag="static"
for target in ${IUSE_SOFTMMU_TARGETS}; do
if use "qemu_softmmu_targets_${target}"; then
conf_opts+=(
# For some reason, adding this with the setting set
# to on *or* off makes the build always fail.
# --with-devices-${target}=gentoo
)
fi
done
;; ;;
tools) tools)
conf_opts+=( conf_opts+=(
@ -664,6 +695,21 @@ src_configure() {
if use "qemu_softmmu_targets_${target}"; then if use "qemu_softmmu_targets_${target}"; then
softmmu_targets+=",${target}-softmmu" softmmu_targets+=",${target}-softmmu"
softmmu_bins+=( "qemu-system-${target}" ) softmmu_bins+=( "qemu-system-${target}" )
# Needed to rework vhost-user-fs handling thanks to https://gitlab.com/qemu-project/qemu/-/commit/5166dab
# The option was converted into being configurable by
# Kconfig's. So, to enable it, we insert the necessary
# options into each arch's softmmu target gentoo.mak file,
# then configure with --with-devices-${target}=gentoo.
if use vhost-user-fs; then
echo "CONFIG_VHOST_USER_FS=y for ${target}-softmmu" || die
echo "CONFIG_VIRTIO=y" >> "configs/devices/${target}-softmmu/gentoo.mak" || die
echo "CONFIG_VHOST_USER_FS=y" >> "configs/devices/${target}-softmmu/gentoo.mak" || die
else
echo "CONFIG_VHOST_USER_FS=n for ${target}-softmmu" || die
echo "CONFIG_VIRTIO=n" >> "configs/devices/${target}-softmmu/gentoo.mak" || die
echo "CONFIG_VHOST_USER_FS=n" >> "configs/devices/${target}-softmmu/gentoo.mak" || die
fi
fi fi
done done
@ -684,22 +730,22 @@ src_configure() {
src_compile() { src_compile() {
if [[ -n ${user_targets} ]]; then if [[ -n ${user_targets} ]]; then
cd "${S}/user-build" cd "${S}/user-build" || die
default default
fi fi
if [[ -n ${softmmu_targets} ]]; then if [[ -n ${softmmu_targets} ]]; then
cd "${S}/softmmu-build" cd "${S}/softmmu-build" || die
default default
fi fi
cd "${S}/tools-build" cd "${S}/tools-build" || die
default default
} }
src_test() { src_test() {
if [[ -n ${softmmu_targets} ]]; then if [[ -n ${softmmu_targets} ]]; then
cd "${S}/softmmu-build" cd "${S}/softmmu-build" || die
pax-mark m */qemu-system-* #515550 pax-mark m */qemu-system-* #515550
emake check emake check
fi fi
@ -796,19 +842,24 @@ src_install() {
fi fi
fi fi
cd "${S}/tools-build" cd "${S}/tools-build" || die
emake DESTDIR="${ED}" install 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 # 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 pax-mark mr "${softmmu_bins[@]}" "${user_bins[@]}" # bug 575594
popd >/dev/null popd >/dev/null || die
# Install config file example for qemu-bridge-helper # Install config file example for qemu-bridge-helper
insinto "/etc/qemu" insinto "/etc/qemu"
doins "${FILESDIR}/bridge.conf" doins "${FILESDIR}/bridge.conf"
cd "${S}" cd "${S}" || die
dodoc MAINTAINERS docs/specs/pci-ids.txt dodoc MAINTAINERS docs/specs/pci-ids.txt
newdoc pc-bios/README README.pc-bios newdoc pc-bios/README README.pc-bios
@ -817,10 +868,7 @@ src_install() {
if [[ -n ${softmmu_targets} ]]; then if [[ -n ${softmmu_targets} ]]; then
# Remove SeaBIOS since we're using the SeaBIOS packaged one # 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 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 dosym ../seabios/bios-256k.bin /usr/share/qemu/bios-256k.bin
fi fi
@ -831,6 +879,7 @@ src_install() {
rm "${ED}/usr/share/qemu/vgabios-stdvga.bin" rm "${ED}/usr/share/qemu/vgabios-stdvga.bin"
rm "${ED}/usr/share/qemu/vgabios-virtio.bin" rm "${ED}/usr/share/qemu/vgabios-virtio.bin"
rm "${ED}/usr/share/qemu/vgabios-vmware.bin" rm "${ED}/usr/share/qemu/vgabios-vmware.bin"
# PPC/PPC64 loads vgabios-stdvga # 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 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-isavga.bin /usr/share/qemu/vgabios.bin
@ -842,13 +891,11 @@ src_install() {
fi fi
# Remove sgabios since we're using the sgabios packaged one # 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 if use qemu_softmmu_targets_x86_64 || use qemu_softmmu_targets_i386; then
dosym ../sgabios/sgabios.bin /usr/share/qemu/sgabios.bin dosym ../sgabios/sgabios.bin /usr/share/qemu/sgabios.bin
fi fi
# Remove iPXE since we're using the iPXE packaged one # 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 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/8086100e.rom /usr/share/qemu/pxe-e1000.rom
dosym ../ipxe/80861209.rom /usr/share/qemu/pxe-eepro100.rom dosym ../ipxe/80861209.rom /usr/share/qemu/pxe-eepro100.rom
@ -881,16 +928,27 @@ pkg_postinst() {
xdg_icon_cache_update xdg_icon_cache_update
[[ -z ${EPREFIX} ]] && [[ -f ${EROOT}/usr/libexec/qemu-bridge-helper ]] && \ [[ -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 DISABLE_AUTOFORMATTING=true
readme.gentoo_print_elog readme.gentoo_print_elog
if use pin-upstream-blobs && firmware_abi_change; then if use pin-upstream-blobs && firmware_abi_change; then
ewarn "This version of qemu pins new versions of firmware blobs:" 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/ipxe)"
ewarn " $(best_version sys-firmware/seabios)"
ewarn " $(best_version sys-firmware/sgabios)" ewarn " $(best_version sys-firmware/sgabios)"
ewarn "This might break resume of hibernated guests (started with a different" ewarn "This might break resume of hibernated guests (started with a different"
ewarn "firmware version) and live migration to/from qemu versions with different" ewarn "firmware version) and live migration to/from qemu versions with different"
@ -904,22 +962,24 @@ pkg_postinst() {
pkg_info() { pkg_info() {
echo "Using:" echo "Using:"
echo " $(best_version app-emulation/spice-protocol)" echo " $(best_version app-emulation/spice-protocol)"
echo " $(best_version sys-firmware/edk2-ovmf)"
if has_version 'sys-firmware/edk2-ovmf[binary]'; then if has_version 'sys-firmware/edk2-ovmf-bin'; then
echo " USE=binary" echo " $(best_version sys-firmware/edk2-ovmf-bin)"
else else
echo " USE=''" echo " $(best_version sys-firmware/edk2-ovmf)"
fi fi
if has_version 'sys-firmware/seabios-bin'; then
echo " $(best_version sys-firmware/seabios-bin)"
else
echo " $(best_version sys-firmware/seabios)"
fi
echo " $(best_version sys-firmware/ipxe)" echo " $(best_version sys-firmware/ipxe)"
echo " $(best_version sys-firmware/seabios)"
if has_version 'sys-firmware/seabios[binary]'; then
echo " USE=binary"
else
echo " USE=''"
fi
echo " $(best_version sys-firmware/sgabios)" echo " $(best_version sys-firmware/sgabios)"
} }
pkg_postrm() { pkg_postrm() {
xdg_icon_cache_update xdg_icon_cache_update
udev_reload
} }

View File

@ -1,20 +1,31 @@
# Copyright 1999-2022 Gentoo Authors # Copyright 1999-2023 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2 # Distributed under the terms of the GNU General Public License v2
EAPI=8 EAPI=8
PYTHON_COMPAT=( python3_{8,9,10} ) # 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:-1}
QEMU_DOCS_PREBUILT_DEV=ajak
QEMU_DOCS_VERSION="${PV}"
# Default to generating docs (inc. man pages) if no prebuilt; overridden later
# bug #830088
QEMU_DOC_USEFLAG="+doc"
PYTHON_COMPAT=( python3_{9,10,11} )
PYTHON_REQ_USE="ncurses,readline" PYTHON_REQ_USE="ncurses,readline"
FIRMWARE_ABI_VERSION="7.0.0" FIRMWARE_ABI_VERSION="7.2.0"
inherit linux-info toolchain-funcs python-r1 udev fcaps readme.gentoo-r1 \ inherit linux-info toolchain-funcs python-r1 udev fcaps readme.gentoo-r1 \
pax-utils xdg-utils pax-utils xdg-utils
if [[ ${PV} = *9999* ]]; then if [[ ${PV} == *9999* ]]; then
QEMU_DOCS_PREBUILT=0
EGIT_REPO_URI="https://gitlab.com/qemu-project/qemu.git/" EGIT_REPO_URI="https://gitlab.com/qemu-project/qemu.git/"
EGIT_SUBMODULES=( EGIT_SUBMODULES=(
meson
tests/fp/berkeley-softfloat-3 tests/fp/berkeley-softfloat-3
tests/fp/berkeley-testfloat-3 tests/fp/berkeley-testfloat-3
ui/keycodemapdb ui/keycodemapdb
@ -24,8 +35,13 @@ if [[ ${PV} = *9999* ]]; then
else else
MY_P="${PN}-${PV/_rc/-rc}" MY_P="${PN}-${PV/_rc/-rc}"
SRC_URI="https://download.qemu.org/${MY_P}.tar.xz" SRC_URI="https://download.qemu.org/${MY_P}.tar.xz"
KEYWORDS="amd64 ~arm ~arm64 ~ppc ppc64 ~riscv ~x86"
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}" S="${WORKDIR}/${MY_P}"
# [[ "${PV}" != *_rc* ]] && KEYWORDS="~amd64 ~arm ~arm64 ~loong ~ppc ~ppc64 ~riscv ~x86"
fi fi
DESCRIPTION="QEMU + Kernel-based Virtual Machine userland tools" DESCRIPTION="QEMU + Kernel-based Virtual Machine userland tools"
@ -34,7 +50,9 @@ HOMEPAGE="https://www.qemu.org https://www.linux-kvm.org"
LICENSE="GPL-2 LGPL-2 BSD-2" LICENSE="GPL-2 LGPL-2 BSD-2"
SLOT="0" SLOT="0"
IUSE="accessibility +aio alsa bpf bzip2 capstone +caps +curl debug +doc [[ ${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 +fdt fuse glusterfs +gnutls gtk infiniband iscsi io-uring
jack jemalloc +jpeg jack jemalloc +jpeg
lzo multipath lzo multipath
@ -42,7 +60,7 @@ IUSE="accessibility +aio alsa bpf bzip2 capstone +caps +curl debug +doc
plugins +png pulseaudio python rbd sasl +seccomp sdl sdl-image selinux plugins +png pulseaudio python rbd sasl +seccomp sdl sdl-image selinux
+slirp +slirp
smartcard snappy spice ssh static static-user systemtap test udev usb smartcard snappy spice ssh static static-user systemtap test udev usb
usbredir vde +vhost-net vhost-user-fs virgl virtfs +vnc vte xattr xen usbredir vde +vhost-net virgl virtfs +vnc vte xattr xen
zstd" zstd"
COMMON_TARGETS=" COMMON_TARGETS="
@ -52,6 +70,7 @@ COMMON_TARGETS="
cris cris
hppa hppa
i386 i386
loongarch64
m68k m68k
microblaze microblaze
microblazeel microblazeel
@ -96,9 +115,11 @@ use_user_targets=$(printf ' qemu_user_targets_%s' ${IUSE_USER_TARGETS})
IUSE+=" ${use_softmmu_targets} ${use_user_targets}" IUSE+=" ${use_softmmu_targets} ${use_user_targets}"
RESTRICT="!test? ( test )" RESTRICT="!test? ( test )"
# Allow no targets to be built so that people can get a tools-only build. # Allow no targets to be built so that people can get a tools-only build.
# Block USE flag configurations known to not work. # 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_arm? ( fdt )
qemu_softmmu_targets_microblaze? ( fdt ) qemu_softmmu_targets_microblaze? ( fdt )
qemu_softmmu_targets_mips64el? ( fdt ) qemu_softmmu_targets_mips64el? ( fdt )
@ -110,14 +131,16 @@ REQUIRED_USE="${PYTHON_REQUIRED_USE}
sdl-image? ( sdl ) sdl-image? ( sdl )
static? ( static-user !alsa !gtk !jack !opengl !pam !pulseaudio !plugins !rbd !snappy !udev ) static? ( static-user !alsa !gtk !jack !opengl !pam !pulseaudio !plugins !rbd !snappy !udev )
static-user? ( !plugins ) static-user? ( !plugins )
vhost-user-fs? ( caps seccomp )
virgl? ( opengl ) virgl? ( opengl )
virtfs? ( caps xattr ) virtfs? ( xattr )
vnc? ( gnutls ) vnc? ( gnutls )
vte? ( gtk ) vte? ( gtk )
multipath? ( udev ) multipath? ( udev )
plugins? ( !static !static-user ) plugins? ( !static !static-user )
" "
for smname in ${IUSE_SOFTMMU_TARGETS} ; do
REQUIRED_USE+=" qemu_softmmu_targets_${smname}? ( seccomp ) "
done
# Dependencies required for qemu tools (qemu-nbd, qemu-img, qemu-io, ...) # Dependencies required for qemu tools (qemu-nbd, qemu-img, qemu-io, ...)
# and user/softmmu targets (qemu-*, qemu-system-*). # and user/softmmu targets (qemu-*, qemu-system-*).
@ -137,6 +160,7 @@ ALL_DEPEND="
# Dependencies required for qemu tools (qemu-nbd, qemu-img, qemu-io, ...) # Dependencies required for qemu tools (qemu-nbd, qemu-img, qemu-io, ...)
# softmmu targets (qemu-system-*). # softmmu targets (qemu-system-*).
SOFTMMU_TOOLS_DEPEND=" SOFTMMU_TOOLS_DEPEND="
sys-libs/libcap-ng[static-libs(+)]
>=x11-libs/pixman-0.28.0[static-libs(+)] >=x11-libs/pixman-0.28.0[static-libs(+)]
accessibility? ( accessibility? (
app-accessibility/brltty[api] app-accessibility/brltty[api]
@ -147,7 +171,6 @@ SOFTMMU_TOOLS_DEPEND="
bpf? ( dev-libs/libbpf:= ) bpf? ( dev-libs/libbpf:= )
bzip2? ( app-arch/bzip2[static-libs(+)] ) bzip2? ( app-arch/bzip2[static-libs(+)] )
capstone? ( dev-libs/capstone:= ) capstone? ( dev-libs/capstone:= )
caps? ( sys-libs/libcap-ng[static-libs(+)] )
curl? ( >=net-misc/curl-7.15.4[static-libs(+)] ) curl? ( >=net-misc/curl-7.15.4[static-libs(+)] )
fdt? ( >=sys-apps/dtc-1.5.1[static-libs(+)] ) fdt? ( >=sys-apps/dtc-1.5.1[static-libs(+)] )
fuse? ( >=sys-fs/fuse-3.1:3[static-libs(+)] ) fuse? ( >=sys-fs/fuse-3.1:3[static-libs(+)] )
@ -165,7 +188,7 @@ SOFTMMU_TOOLS_DEPEND="
io-uring? ( sys-libs/liburing:=[static-libs(+)] ) io-uring? ( sys-libs/liburing:=[static-libs(+)] )
jack? ( virtual/jack ) jack? ( virtual/jack )
jemalloc? ( dev-libs/jemalloc ) jemalloc? ( dev-libs/jemalloc )
jpeg? ( virtual/jpeg:0=[static-libs(+)] ) jpeg? ( media-libs/libjpeg-turbo:=[static-libs(+)] )
lzo? ( dev-libs/lzo:2[static-libs(+)] ) lzo? ( dev-libs/lzo:2[static-libs(+)] )
multipath? ( sys-fs/multipath-tools ) multipath? ( sys-fs/multipath-tools )
ncurses? ( ncurses? (
@ -209,34 +232,44 @@ SOFTMMU_TOOLS_DEPEND="
zstd? ( >=app-arch/zstd-1.4.0[static-libs(+)] ) zstd? ( >=app-arch/zstd-1.4.0[static-libs(+)] )
" "
EDK2_OVMF_VERSION="202105" EDK2_OVMF_VERSION="202202"
SEABIOS_VERSION="1.14.0" SEABIOS_VERSION="1.16.0"
X86_FIRMWARE_DEPEND=" X86_FIRMWARE_DEPEND="
pin-upstream-blobs? ( pin-upstream-blobs? (
~sys-firmware/edk2-ovmf-${EDK2_OVMF_VERSION}[binary] ~sys-firmware/edk2-ovmf-bin-${EDK2_OVMF_VERSION}
~sys-firmware/ipxe-1.21.1[binary,qemu] ~sys-firmware/ipxe-1.21.1[binary,qemu]
~sys-firmware/seabios-${SEABIOS_VERSION}[binary,seavgabios] ~sys-firmware/seabios-bin-${SEABIOS_VERSION}
~sys-firmware/sgabios-0.1_pre10[binary] ~sys-firmware/sgabios-0.1_pre10[binary]
) )
!pin-upstream-blobs? ( !pin-upstream-blobs? (
>=sys-firmware/edk2-ovmf-${EDK2_OVMF_VERSION} || (
>=sys-firmware/edk2-ovmf-${EDK2_OVMF_VERSION}
>=sys-firmware/edk2-ovmf-bin-${EDK2_OVMF_VERSION}
)
sys-firmware/ipxe[qemu] sys-firmware/ipxe[qemu]
>=sys-firmware/seabios-${SEABIOS_VERSION}[seavgabios] || (
>=sys-firmware/seabios-${SEABIOS_VERSION}[seavgabios]
>=sys-firmware/seabios-bin-${SEABIOS_VERSION}
)
sys-firmware/sgabios sys-firmware/sgabios
)" )"
PPC_FIRMWARE_DEPEND=" PPC_FIRMWARE_DEPEND="
pin-upstream-blobs? ( pin-upstream-blobs? (
~sys-firmware/seabios-${SEABIOS_VERSION}[binary,seavgabios] ~sys-firmware/seabios-bin-${SEABIOS_VERSION}
) )
!pin-upstream-blobs? ( !pin-upstream-blobs? (
>=sys-firmware/seabios-${SEABIOS_VERSION}[seavgabios] || (
>=sys-firmware/seabios-${SEABIOS_VERSION}[seavgabios]
>=sys-firmware/seabios-bin-${SEABIOS_VERSION}
)
) )
" "
BDEPEND=" BDEPEND="
$(python_gen_impl_dep) $(python_gen_impl_dep)
dev-lang/perl dev-lang/perl
dev-util/meson
sys-apps/texinfo sys-apps/texinfo
virtual/pkgconfig virtual/pkgconfig
doc? ( doc? (
@ -274,11 +307,10 @@ RDEPEND="${CDEPEND}
)" )"
PATCHES=( PATCHES=(
"${FILESDIR}"/${PN}-2.11.1-capstone_include_path.patch
"${FILESDIR}"/${PN}-5.2.0-disable-keymap.patch "${FILESDIR}"/${PN}-5.2.0-disable-keymap.patch
"${FILESDIR}"/${PN}-6.0.0-make.patch "${FILESDIR}"/${PN}-6.0.0-make.patch
"${FILESDIR}"/${PN}-6.1.0-strings.patch "${FILESDIR}"/${PN}-7.1.0-also-build-virtfs-proxy-helper.patch
"${FILESDIR}"/${PN}-7.0.0-also-build-virtfs-proxy-helper.patch "${FILESDIR}"/${PN}-7.1.0-capstone-include-path.patch
) )
QA_PREBUILT=" QA_PREBUILT="
@ -418,8 +450,13 @@ src_prepare() {
# Verbose builds # Verbose builds
MAKEOPTS+=" V=1" MAKEOPTS+=" V=1"
# Remove bundled copy of libfdt # We already force -D_FORTIFY_SOURCE=2 (or 3) in our toolchain, but
rm -r dtc || die # this setting (-U then -D..=2) will prevent us from trying out 3, so
# drop it. No change to level of protection b/c we patch our toolchain.
sed -i -e 's/-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2//' configure || die
# Remove bundled modules
rm -r dtc meson roms/*/ || die
} }
## ##
@ -432,7 +469,7 @@ qemu_src_configure() {
local buildtype=$1 local buildtype=$1
local builddir="${S}/${buildtype}-build" local builddir="${S}/${buildtype}-build"
mkdir "${builddir}" mkdir "${builddir}" || die
local conf_opts=( local conf_opts=(
--prefix=/usr --prefix=/usr
@ -464,10 +501,10 @@ qemu_src_configure() {
# are enabled), but it's not really worth the hassle. Disable it # are enabled), but it's not really worth the hassle. Disable it
# all the time to avoid automatically detecting it. #568856 # all the time to avoid automatically detecting it. #568856
--disable-gcrypt --disable-gcrypt
--python="${PYTHON}"
--cc="$(tc-getCC)" --cc="$(tc-getCC)"
--cxx="$(tc-getCXX)" --cxx="$(tc-getCXX)"
--host-cc="$(tc-getBUILD_CC)" --host-cc="$(tc-getBUILD_CC)"
$(use_enable alsa) $(use_enable alsa)
$(use_enable debug debug-info) $(use_enable debug debug-info)
$(use_enable debug debug-tcg) $(use_enable debug debug-tcg)
@ -518,7 +555,6 @@ qemu_src_configure() {
$(conf_softmmu bpf) $(conf_softmmu bpf)
$(conf_notuser bzip2) $(conf_notuser bzip2)
$(conf_notuser capstone) $(conf_notuser capstone)
$(conf_notuser caps cap-ng)
$(conf_notuser curl) $(conf_notuser curl)
$(conf_tools doc docs) $(conf_tools doc docs)
$(conf_notuser fdt) $(conf_notuser fdt)
@ -540,13 +576,13 @@ qemu_src_configure() {
$(conf_notuser numa) $(conf_notuser numa)
$(conf_notuser opengl) $(conf_notuser opengl)
$(conf_notuser pam auth-pam) $(conf_notuser pam auth-pam)
$(conf_notuser png vnc-png) $(conf_notuser png)
$(conf_notuser rbd) $(conf_notuser rbd)
$(conf_notuser sasl vnc-sasl) $(conf_notuser sasl vnc-sasl)
$(conf_notuser sdl) $(conf_notuser sdl)
$(conf_softmmu sdl-image) $(conf_softmmu sdl-image)
$(conf_notuser seccomp) $(conf_notuser seccomp)
$(conf_notuser slirp slirp system) $(conf_notuser slirp)
$(conf_notuser smartcard) $(conf_notuser smartcard)
$(conf_notuser snappy) $(conf_notuser snappy)
$(conf_notuser spice) $(conf_notuser spice)
@ -556,8 +592,6 @@ qemu_src_configure() {
$(conf_notuser usbredir usb-redir) $(conf_notuser usbredir usb-redir)
$(conf_notuser vde) $(conf_notuser vde)
$(conf_notuser vhost-net) $(conf_notuser vhost-net)
$(conf_notuser vhost-user-fs)
$(conf_tools vhost-user-fs virtiofsd)
$(conf_notuser virgl virglrenderer) $(conf_notuser virgl virglrenderer)
$(conf_softmmu virtfs) $(conf_softmmu virtfs)
$(conf_notuser vnc) $(conf_notuser vnc)
@ -592,6 +626,8 @@ qemu_src_configure() {
--disable-system --disable-system
--disable-blobs --disable-blobs
--disable-tools --disable-tools
--disable-cap-ng
--disable-seccomp
) )
local static_flag="static-user" local static_flag="static-user"
;; ;;
@ -600,6 +636,8 @@ qemu_src_configure() {
--disable-linux-user --disable-linux-user
--enable-system --enable-system
--disable-tools --disable-tools
--enable-cap-ng
--enable-seccomp
) )
local static_flag="static" local static_flag="static"
;; ;;
@ -609,6 +647,7 @@ qemu_src_configure() {
--disable-system --disable-system
--disable-blobs --disable-blobs
--enable-tools --enable-tools
--enable-cap-ng
) )
local static_flag="static" local static_flag="static"
;; ;;
@ -673,22 +712,22 @@ src_configure() {
src_compile() { src_compile() {
if [[ -n ${user_targets} ]]; then if [[ -n ${user_targets} ]]; then
cd "${S}/user-build" cd "${S}/user-build" || die
default default
fi fi
if [[ -n ${softmmu_targets} ]]; then if [[ -n ${softmmu_targets} ]]; then
cd "${S}/softmmu-build" cd "${S}/softmmu-build" || die
default default
fi fi
cd "${S}/tools-build" cd "${S}/tools-build" || die
default default
} }
src_test() { src_test() {
if [[ -n ${softmmu_targets} ]]; then if [[ -n ${softmmu_targets} ]]; then
cd "${S}/softmmu-build" cd "${S}/softmmu-build" || die
pax-mark m */qemu-system-* #515550 pax-mark m */qemu-system-* #515550
emake check emake check
fi fi
@ -785,19 +824,24 @@ src_install() {
fi fi
fi fi
cd "${S}/tools-build" cd "${S}/tools-build" || die
emake DESTDIR="${ED}" install 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 # 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 pax-mark mr "${softmmu_bins[@]}" "${user_bins[@]}" # bug 575594
popd >/dev/null popd >/dev/null || die
# Install config file example for qemu-bridge-helper # Install config file example for qemu-bridge-helper
insinto "/etc/qemu" insinto "/etc/qemu"
doins "${FILESDIR}/bridge.conf" doins "${FILESDIR}/bridge.conf"
cd "${S}" cd "${S}" || die
dodoc MAINTAINERS docs/specs/pci-ids.txt dodoc MAINTAINERS docs/specs/pci-ids.txt
newdoc pc-bios/README README.pc-bios newdoc pc-bios/README README.pc-bios
@ -806,10 +850,7 @@ src_install() {
if [[ -n ${softmmu_targets} ]]; then if [[ -n ${softmmu_targets} ]]; then
# Remove SeaBIOS since we're using the SeaBIOS packaged one # 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 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 dosym ../seabios/bios-256k.bin /usr/share/qemu/bios-256k.bin
fi fi
@ -820,6 +861,7 @@ src_install() {
rm "${ED}/usr/share/qemu/vgabios-stdvga.bin" rm "${ED}/usr/share/qemu/vgabios-stdvga.bin"
rm "${ED}/usr/share/qemu/vgabios-virtio.bin" rm "${ED}/usr/share/qemu/vgabios-virtio.bin"
rm "${ED}/usr/share/qemu/vgabios-vmware.bin" rm "${ED}/usr/share/qemu/vgabios-vmware.bin"
# PPC/PPC64 loads vgabios-stdvga # 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 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-isavga.bin /usr/share/qemu/vgabios.bin
@ -831,13 +873,11 @@ src_install() {
fi fi
# Remove sgabios since we're using the sgabios packaged one # 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 if use qemu_softmmu_targets_x86_64 || use qemu_softmmu_targets_i386; then
dosym ../sgabios/sgabios.bin /usr/share/qemu/sgabios.bin dosym ../sgabios/sgabios.bin /usr/share/qemu/sgabios.bin
fi fi
# Remove iPXE since we're using the iPXE packaged one # 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 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/8086100e.rom /usr/share/qemu/pxe-e1000.rom
dosym ../ipxe/80861209.rom /usr/share/qemu/pxe-eepro100.rom dosym ../ipxe/80861209.rom /usr/share/qemu/pxe-eepro100.rom
@ -870,16 +910,27 @@ pkg_postinst() {
xdg_icon_cache_update xdg_icon_cache_update
[[ -z ${EPREFIX} ]] && [[ -f ${EROOT}/usr/libexec/qemu-bridge-helper ]] && \ [[ -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 DISABLE_AUTOFORMATTING=true
readme.gentoo_print_elog readme.gentoo_print_elog
if use pin-upstream-blobs && firmware_abi_change; then if use pin-upstream-blobs && firmware_abi_change; then
ewarn "This version of qemu pins new versions of firmware blobs:" 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/ipxe)"
ewarn " $(best_version sys-firmware/seabios)"
ewarn " $(best_version sys-firmware/sgabios)" ewarn " $(best_version sys-firmware/sgabios)"
ewarn "This might break resume of hibernated guests (started with a different" ewarn "This might break resume of hibernated guests (started with a different"
ewarn "firmware version) and live migration to/from qemu versions with different" ewarn "firmware version) and live migration to/from qemu versions with different"
@ -893,22 +944,24 @@ pkg_postinst() {
pkg_info() { pkg_info() {
echo "Using:" echo "Using:"
echo " $(best_version app-emulation/spice-protocol)" echo " $(best_version app-emulation/spice-protocol)"
echo " $(best_version sys-firmware/edk2-ovmf)"
if has_version 'sys-firmware/edk2-ovmf[binary]'; then if has_version 'sys-firmware/edk2-ovmf-bin'; then
echo " USE=binary" echo " $(best_version sys-firmware/edk2-ovmf-bin)"
else else
echo " USE=''" echo " $(best_version sys-firmware/edk2-ovmf)"
fi fi
if has_version 'sys-firmware/seabios-bin'; then
echo " $(best_version sys-firmware/seabios-bin)"
else
echo " $(best_version sys-firmware/seabios)"
fi
echo " $(best_version sys-firmware/ipxe)" echo " $(best_version sys-firmware/ipxe)"
echo " $(best_version sys-firmware/seabios)"
if has_version 'sys-firmware/seabios[binary]'; then
echo " USE=binary"
else
echo " USE=''"
fi
echo " $(best_version sys-firmware/sgabios)" echo " $(best_version sys-firmware/sgabios)"
} }
pkg_postrm() { pkg_postrm() {
xdg_icon_cache_update xdg_icon_cache_update
udev_reload
} }

View File

@ -1,20 +1,31 @@
# Copyright 1999-2022 Gentoo Authors # Copyright 1999-2023 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2 # Distributed under the terms of the GNU General Public License v2
EAPI=8 EAPI=8
PYTHON_COMPAT=( python3_{8,9,10} ) # 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:-1}
QEMU_DOCS_PREBUILT_DEV=ajak
QEMU_DOCS_VERSION="${PV}"
# Default to generating docs (inc. man pages) if no prebuilt; overridden later
# bug #830088
QEMU_DOC_USEFLAG="+doc"
PYTHON_COMPAT=( python3_{9,10,11} )
PYTHON_REQ_USE="ncurses,readline" PYTHON_REQ_USE="ncurses,readline"
FIRMWARE_ABI_VERSION="6.2.0" FIRMWARE_ABI_VERSION="7.2.0"
inherit linux-info toolchain-funcs python-r1 udev fcaps readme.gentoo-r1 \ inherit linux-info toolchain-funcs python-r1 udev fcaps readme.gentoo-r1 \
pax-utils xdg-utils pax-utils xdg-utils
if [[ ${PV} = *9999* ]]; then if [[ ${PV} == *9999* ]]; then
QEMU_DOCS_PREBUILT=0
EGIT_REPO_URI="https://gitlab.com/qemu-project/qemu.git/" EGIT_REPO_URI="https://gitlab.com/qemu-project/qemu.git/"
EGIT_SUBMODULES=( EGIT_SUBMODULES=(
meson
tests/fp/berkeley-softfloat-3 tests/fp/berkeley-softfloat-3
tests/fp/berkeley-testfloat-3 tests/fp/berkeley-testfloat-3
ui/keycodemapdb ui/keycodemapdb
@ -24,8 +35,13 @@ if [[ ${PV} = *9999* ]]; then
else else
MY_P="${PN}-${PV/_rc/-rc}" MY_P="${PN}-${PV/_rc/-rc}"
SRC_URI="https://download.qemu.org/${MY_P}.tar.xz" SRC_URI="https://download.qemu.org/${MY_P}.tar.xz"
#KEYWORDS="~amd64 ~arm64 ~ppc ~ppc64 ~x86"
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}" S="${WORKDIR}/${MY_P}"
[[ "${PV}" != *_rc* ]] && KEYWORDS="~amd64 ~arm ~arm64 ~loong ~ppc ppc64 ~riscv ~x86"
fi fi
DESCRIPTION="QEMU + Kernel-based Virtual Machine userland tools" DESCRIPTION="QEMU + Kernel-based Virtual Machine userland tools"
@ -34,15 +50,17 @@ HOMEPAGE="https://www.qemu.org https://www.linux-kvm.org"
LICENSE="GPL-2 LGPL-2 BSD-2" LICENSE="GPL-2 LGPL-2 BSD-2"
SLOT="0" SLOT="0"
IUSE="accessibility +aio alsa bpf bzip2 capstone +caps +curl debug +doc [[ ${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 +fdt fuse glusterfs +gnutls gtk infiniband iscsi io-uring
jack jemalloc +jpeg jack jemalloc +jpeg
lzo multipath lzo multipath
ncurses nfs nls numa opengl +oss pam +pin-upstream-blobs ncurses nfs nls numa opengl +oss pam +pin-upstream-blobs
plugins +png pulseaudio python rbd sasl +seccomp sdl sdl-image selinux plugins +png pulseaudio python rbd sasl sdl sdl-image selinux
+slirp +slirp
smartcard snappy spice ssh static static-user systemtap test udev usb smartcard snappy spice ssh static static-user systemtap test udev usb
usbredir vde +vhost-net vhost-user-fs virgl virtfs +vnc vte xattr xen usbredir vde +vhost-net virgl virtfs +vnc vte xattr xen
zstd" zstd"
COMMON_TARGETS=" COMMON_TARGETS="
@ -52,6 +70,7 @@ COMMON_TARGETS="
cris cris
hppa hppa
i386 i386
loongarch64
m68k m68k
microblaze microblaze
microblazeel microblazeel
@ -98,7 +117,8 @@ IUSE+=" ${use_softmmu_targets} ${use_user_targets}"
RESTRICT="!test? ( test )" RESTRICT="!test? ( test )"
# Allow no targets to be built so that people can get a tools-only build. # Allow no targets to be built so that people can get a tools-only build.
# Block USE flag configurations known to not work. # 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_arm? ( fdt )
qemu_softmmu_targets_microblaze? ( fdt ) qemu_softmmu_targets_microblaze? ( fdt )
qemu_softmmu_targets_mips64el? ( fdt ) qemu_softmmu_targets_mips64el? ( fdt )
@ -110,9 +130,8 @@ REQUIRED_USE="${PYTHON_REQUIRED_USE}
sdl-image? ( sdl ) sdl-image? ( sdl )
static? ( static-user !alsa !gtk !jack !opengl !pam !pulseaudio !plugins !rbd !snappy !udev ) static? ( static-user !alsa !gtk !jack !opengl !pam !pulseaudio !plugins !rbd !snappy !udev )
static-user? ( !plugins ) static-user? ( !plugins )
vhost-user-fs? ( caps seccomp )
virgl? ( opengl ) virgl? ( opengl )
virtfs? ( caps xattr ) virtfs? ( xattr )
vnc? ( gnutls ) vnc? ( gnutls )
vte? ( gtk ) vte? ( gtk )
multipath? ( udev ) multipath? ( udev )
@ -137,6 +156,8 @@ ALL_DEPEND="
# Dependencies required for qemu tools (qemu-nbd, qemu-img, qemu-io, ...) # Dependencies required for qemu tools (qemu-nbd, qemu-img, qemu-io, ...)
# softmmu targets (qemu-system-*). # softmmu targets (qemu-system-*).
SOFTMMU_TOOLS_DEPEND=" SOFTMMU_TOOLS_DEPEND="
sys-libs/libcap-ng[static-libs(+)]
>=sys-libs/libseccomp-2.1.0[static-libs(+)]
>=x11-libs/pixman-0.28.0[static-libs(+)] >=x11-libs/pixman-0.28.0[static-libs(+)]
accessibility? ( accessibility? (
app-accessibility/brltty[api] app-accessibility/brltty[api]
@ -147,9 +168,8 @@ SOFTMMU_TOOLS_DEPEND="
bpf? ( dev-libs/libbpf:= ) bpf? ( dev-libs/libbpf:= )
bzip2? ( app-arch/bzip2[static-libs(+)] ) bzip2? ( app-arch/bzip2[static-libs(+)] )
capstone? ( dev-libs/capstone:= ) capstone? ( dev-libs/capstone:= )
caps? ( sys-libs/libcap-ng[static-libs(+)] )
curl? ( >=net-misc/curl-7.15.4[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(+)] ) fuse? ( >=sys-fs/fuse-3.1:3[static-libs(+)] )
glusterfs? ( >=sys-cluster/glusterfs-3.4.0[static-libs(+)] ) glusterfs? ( >=sys-cluster/glusterfs-3.4.0[static-libs(+)] )
gnutls? ( gnutls? (
@ -165,7 +185,7 @@ SOFTMMU_TOOLS_DEPEND="
io-uring? ( sys-libs/liburing:=[static-libs(+)] ) io-uring? ( sys-libs/liburing:=[static-libs(+)] )
jack? ( virtual/jack ) jack? ( virtual/jack )
jemalloc? ( dev-libs/jemalloc ) jemalloc? ( dev-libs/jemalloc )
jpeg? ( virtual/jpeg:0=[static-libs(+)] ) jpeg? ( media-libs/libjpeg-turbo:=[static-libs(+)] )
lzo? ( dev-libs/lzo:2[static-libs(+)] ) lzo? ( dev-libs/lzo:2[static-libs(+)] )
multipath? ( sys-fs/multipath-tools ) multipath? ( sys-fs/multipath-tools )
ncurses? ( ncurses? (
@ -190,7 +210,6 @@ SOFTMMU_TOOLS_DEPEND="
media-libs/libsdl2[static-libs(+)] media-libs/libsdl2[static-libs(+)]
) )
sdl-image? ( media-libs/sdl2-image[static-libs(+)] ) sdl-image? ( media-libs/sdl2-image[static-libs(+)] )
seccomp? ( >=sys-libs/libseccomp-2.1.0[static-libs(+)] )
slirp? ( net-libs/libslirp[static-libs(+)] ) slirp? ( net-libs/libslirp[static-libs(+)] )
smartcard? ( >=app-emulation/libcacard-2.5.0[static-libs(+)] ) smartcard? ( >=app-emulation/libcacard-2.5.0[static-libs(+)] )
snappy? ( app-arch/snappy:= ) snappy? ( app-arch/snappy:= )
@ -209,34 +228,44 @@ SOFTMMU_TOOLS_DEPEND="
zstd? ( >=app-arch/zstd-1.4.0[static-libs(+)] ) zstd? ( >=app-arch/zstd-1.4.0[static-libs(+)] )
" "
EDK2_OVMF_VERSION="202105" EDK2_OVMF_VERSION="202202"
SEABIOS_VERSION="1.14.0" SEABIOS_VERSION="1.16.0"
X86_FIRMWARE_DEPEND=" X86_FIRMWARE_DEPEND="
pin-upstream-blobs? ( pin-upstream-blobs? (
~sys-firmware/edk2-ovmf-${EDK2_OVMF_VERSION}[binary] ~sys-firmware/edk2-ovmf-bin-${EDK2_OVMF_VERSION}
~sys-firmware/ipxe-1.21.1[binary,qemu] ~sys-firmware/ipxe-1.21.1[binary,qemu]
~sys-firmware/seabios-${SEABIOS_VERSION}[binary,seavgabios] ~sys-firmware/seabios-bin-${SEABIOS_VERSION}
~sys-firmware/sgabios-0.1_pre10[binary] ~sys-firmware/sgabios-0.1_pre10[binary]
) )
!pin-upstream-blobs? ( !pin-upstream-blobs? (
>=sys-firmware/edk2-ovmf-${EDK2_OVMF_VERSION} || (
>=sys-firmware/edk2-ovmf-${EDK2_OVMF_VERSION}
>=sys-firmware/edk2-ovmf-bin-${EDK2_OVMF_VERSION}
)
sys-firmware/ipxe[qemu] sys-firmware/ipxe[qemu]
>=sys-firmware/seabios-${SEABIOS_VERSION}[seavgabios] || (
>=sys-firmware/seabios-${SEABIOS_VERSION}[seavgabios]
>=sys-firmware/seabios-bin-${SEABIOS_VERSION}
)
sys-firmware/sgabios sys-firmware/sgabios
)" )"
PPC_FIRMWARE_DEPEND=" PPC_FIRMWARE_DEPEND="
pin-upstream-blobs? ( pin-upstream-blobs? (
~sys-firmware/seabios-${SEABIOS_VERSION}[binary,seavgabios] ~sys-firmware/seabios-bin-${SEABIOS_VERSION}
) )
!pin-upstream-blobs? ( !pin-upstream-blobs? (
>=sys-firmware/seabios-${SEABIOS_VERSION}[seavgabios] || (
>=sys-firmware/seabios-${SEABIOS_VERSION}[seavgabios]
>=sys-firmware/seabios-bin-${SEABIOS_VERSION}
)
) )
" "
BDEPEND=" BDEPEND="
$(python_gen_impl_dep) $(python_gen_impl_dep)
dev-lang/perl dev-lang/perl
dev-util/meson
sys-apps/texinfo sys-apps/texinfo
virtual/pkgconfig virtual/pkgconfig
doc? ( doc? (
@ -274,11 +303,10 @@ RDEPEND="${CDEPEND}
)" )"
PATCHES=( PATCHES=(
"${FILESDIR}"/${PN}-2.11.1-capstone_include_path.patch
"${FILESDIR}"/${PN}-5.2.0-disable-keymap.patch "${FILESDIR}"/${PN}-5.2.0-disable-keymap.patch
"${FILESDIR}"/${PN}-6.0.0-make.patch "${FILESDIR}"/${PN}-6.0.0-make.patch
"${FILESDIR}"/${PN}-6.1.0-strings.patch "${FILESDIR}"/${PN}-7.1.0-also-build-virtfs-proxy-helper.patch
"${FILESDIR}"/${PN}-7.0.0-also-build-virtfs-proxy-helper.patch "${FILESDIR}"/${PN}-7.1.0-capstone-include-path.patch
) )
QA_PREBUILT=" QA_PREBUILT="
@ -418,8 +446,13 @@ src_prepare() {
# Verbose builds # Verbose builds
MAKEOPTS+=" V=1" MAKEOPTS+=" V=1"
# Remove bundled copy of libfdt # We already force -D_FORTIFY_SOURCE=2 (or 3) in our toolchain, but
rm -r dtc || die # this setting (-U then -D..=2) will prevent us from trying out 3, so
# drop it. No change to level of protection b/c we patch our toolchain.
sed -i -e 's/-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2//' configure || die
# Remove bundled modules
rm -r dtc meson roms/*/ || die
} }
## ##
@ -432,7 +465,7 @@ qemu_src_configure() {
local buildtype=$1 local buildtype=$1
local builddir="${S}/${buildtype}-build" local builddir="${S}/${buildtype}-build"
mkdir "${builddir}" mkdir "${builddir}" || die
local conf_opts=( local conf_opts=(
--prefix=/usr --prefix=/usr
@ -464,10 +497,10 @@ qemu_src_configure() {
# are enabled), but it's not really worth the hassle. Disable it # are enabled), but it's not really worth the hassle. Disable it
# all the time to avoid automatically detecting it. #568856 # all the time to avoid automatically detecting it. #568856
--disable-gcrypt --disable-gcrypt
--python="${PYTHON}"
--cc="$(tc-getCC)" --cc="$(tc-getCC)"
--cxx="$(tc-getCXX)" --cxx="$(tc-getCXX)"
--host-cc="$(tc-getBUILD_CC)" --host-cc="$(tc-getBUILD_CC)"
$(use_enable alsa) $(use_enable alsa)
$(use_enable debug debug-info) $(use_enable debug debug-info)
$(use_enable debug debug-tcg) $(use_enable debug debug-tcg)
@ -518,7 +551,6 @@ qemu_src_configure() {
$(conf_softmmu bpf) $(conf_softmmu bpf)
$(conf_notuser bzip2) $(conf_notuser bzip2)
$(conf_notuser capstone) $(conf_notuser capstone)
$(conf_notuser caps cap-ng)
$(conf_notuser curl) $(conf_notuser curl)
$(conf_tools doc docs) $(conf_tools doc docs)
$(conf_notuser fdt) $(conf_notuser fdt)
@ -540,13 +572,12 @@ qemu_src_configure() {
$(conf_notuser numa) $(conf_notuser numa)
$(conf_notuser opengl) $(conf_notuser opengl)
$(conf_notuser pam auth-pam) $(conf_notuser pam auth-pam)
$(conf_notuser png vnc-png) $(conf_notuser png)
$(conf_notuser rbd) $(conf_notuser rbd)
$(conf_notuser sasl vnc-sasl) $(conf_notuser sasl vnc-sasl)
$(conf_notuser sdl) $(conf_notuser sdl)
$(conf_softmmu sdl-image) $(conf_softmmu sdl-image)
$(conf_notuser seccomp) $(conf_notuser slirp)
$(conf_notuser slirp slirp system)
$(conf_notuser smartcard) $(conf_notuser smartcard)
$(conf_notuser snappy) $(conf_notuser snappy)
$(conf_notuser spice) $(conf_notuser spice)
@ -556,8 +587,6 @@ qemu_src_configure() {
$(conf_notuser usbredir usb-redir) $(conf_notuser usbredir usb-redir)
$(conf_notuser vde) $(conf_notuser vde)
$(conf_notuser vhost-net) $(conf_notuser vhost-net)
$(conf_notuser vhost-user-fs)
$(conf_tools vhost-user-fs virtiofsd)
$(conf_notuser virgl virglrenderer) $(conf_notuser virgl virglrenderer)
$(conf_softmmu virtfs) $(conf_softmmu virtfs)
$(conf_notuser vnc) $(conf_notuser vnc)
@ -592,6 +621,8 @@ qemu_src_configure() {
--disable-system --disable-system
--disable-blobs --disable-blobs
--disable-tools --disable-tools
--disable-cap-ng
--disable-seccomp
) )
local static_flag="static-user" local static_flag="static-user"
;; ;;
@ -600,6 +631,8 @@ qemu_src_configure() {
--disable-linux-user --disable-linux-user
--enable-system --enable-system
--disable-tools --disable-tools
--enable-cap-ng
--enable-seccomp
) )
local static_flag="static" local static_flag="static"
;; ;;
@ -609,6 +642,8 @@ qemu_src_configure() {
--disable-system --disable-system
--disable-blobs --disable-blobs
--enable-tools --enable-tools
--enable-cap-ng
--enable-seccomp
) )
local static_flag="static" local static_flag="static"
;; ;;
@ -673,22 +708,22 @@ src_configure() {
src_compile() { src_compile() {
if [[ -n ${user_targets} ]]; then if [[ -n ${user_targets} ]]; then
cd "${S}/user-build" cd "${S}/user-build" || die
default default
fi fi
if [[ -n ${softmmu_targets} ]]; then if [[ -n ${softmmu_targets} ]]; then
cd "${S}/softmmu-build" cd "${S}/softmmu-build" || die
default default
fi fi
cd "${S}/tools-build" cd "${S}/tools-build" || die
default default
} }
src_test() { src_test() {
if [[ -n ${softmmu_targets} ]]; then if [[ -n ${softmmu_targets} ]]; then
cd "${S}/softmmu-build" cd "${S}/softmmu-build" || die
pax-mark m */qemu-system-* #515550 pax-mark m */qemu-system-* #515550
emake check emake check
fi fi
@ -785,19 +820,24 @@ src_install() {
fi fi
fi fi
cd "${S}/tools-build" cd "${S}/tools-build" || die
emake DESTDIR="${ED}" install 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 # 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 pax-mark mr "${softmmu_bins[@]}" "${user_bins[@]}" # bug 575594
popd >/dev/null popd >/dev/null || die
# Install config file example for qemu-bridge-helper # Install config file example for qemu-bridge-helper
insinto "/etc/qemu" insinto "/etc/qemu"
doins "${FILESDIR}/bridge.conf" doins "${FILESDIR}/bridge.conf"
cd "${S}" cd "${S}" || die
dodoc MAINTAINERS docs/specs/pci-ids.txt dodoc MAINTAINERS docs/specs/pci-ids.txt
newdoc pc-bios/README README.pc-bios newdoc pc-bios/README README.pc-bios
@ -806,10 +846,7 @@ src_install() {
if [[ -n ${softmmu_targets} ]]; then if [[ -n ${softmmu_targets} ]]; then
# Remove SeaBIOS since we're using the SeaBIOS packaged one # 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 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 dosym ../seabios/bios-256k.bin /usr/share/qemu/bios-256k.bin
fi fi
@ -820,6 +857,7 @@ src_install() {
rm "${ED}/usr/share/qemu/vgabios-stdvga.bin" rm "${ED}/usr/share/qemu/vgabios-stdvga.bin"
rm "${ED}/usr/share/qemu/vgabios-virtio.bin" rm "${ED}/usr/share/qemu/vgabios-virtio.bin"
rm "${ED}/usr/share/qemu/vgabios-vmware.bin" rm "${ED}/usr/share/qemu/vgabios-vmware.bin"
# PPC/PPC64 loads vgabios-stdvga # 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 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-isavga.bin /usr/share/qemu/vgabios.bin
@ -831,13 +869,11 @@ src_install() {
fi fi
# Remove sgabios since we're using the sgabios packaged one # 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 if use qemu_softmmu_targets_x86_64 || use qemu_softmmu_targets_i386; then
dosym ../sgabios/sgabios.bin /usr/share/qemu/sgabios.bin dosym ../sgabios/sgabios.bin /usr/share/qemu/sgabios.bin
fi fi
# Remove iPXE since we're using the iPXE packaged one # 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 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/8086100e.rom /usr/share/qemu/pxe-e1000.rom
dosym ../ipxe/80861209.rom /usr/share/qemu/pxe-eepro100.rom dosym ../ipxe/80861209.rom /usr/share/qemu/pxe-eepro100.rom
@ -870,16 +906,27 @@ pkg_postinst() {
xdg_icon_cache_update xdg_icon_cache_update
[[ -z ${EPREFIX} ]] && [[ -f ${EROOT}/usr/libexec/qemu-bridge-helper ]] && \ [[ -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 DISABLE_AUTOFORMATTING=true
readme.gentoo_print_elog readme.gentoo_print_elog
if use pin-upstream-blobs && firmware_abi_change; then if use pin-upstream-blobs && firmware_abi_change; then
ewarn "This version of qemu pins new versions of firmware blobs:" 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/ipxe)"
ewarn " $(best_version sys-firmware/seabios)"
ewarn " $(best_version sys-firmware/sgabios)" ewarn " $(best_version sys-firmware/sgabios)"
ewarn "This might break resume of hibernated guests (started with a different" ewarn "This might break resume of hibernated guests (started with a different"
ewarn "firmware version) and live migration to/from qemu versions with different" ewarn "firmware version) and live migration to/from qemu versions with different"
@ -893,22 +940,24 @@ pkg_postinst() {
pkg_info() { pkg_info() {
echo "Using:" echo "Using:"
echo " $(best_version app-emulation/spice-protocol)" echo " $(best_version app-emulation/spice-protocol)"
echo " $(best_version sys-firmware/edk2-ovmf)"
if has_version 'sys-firmware/edk2-ovmf[binary]'; then if has_version 'sys-firmware/edk2-ovmf-bin'; then
echo " USE=binary" echo " $(best_version sys-firmware/edk2-ovmf-bin)"
else else
echo " USE=''" echo " $(best_version sys-firmware/edk2-ovmf)"
fi fi
if has_version 'sys-firmware/seabios-bin'; then
echo " $(best_version sys-firmware/seabios-bin)"
else
echo " $(best_version sys-firmware/seabios)"
fi
echo " $(best_version sys-firmware/ipxe)" echo " $(best_version sys-firmware/ipxe)"
echo " $(best_version sys-firmware/seabios)"
if has_version 'sys-firmware/seabios[binary]'; then
echo " USE=binary"
else
echo " USE=''"
fi
echo " $(best_version sys-firmware/sgabios)" echo " $(best_version sys-firmware/sgabios)"
} }
pkg_postrm() { pkg_postrm() {
xdg_icon_cache_update xdg_icon_cache_update
udev_reload
} }

View File

@ -1,20 +1,32 @@
# Copyright 1999-2022 Gentoo Authors # Copyright 1999-2023 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2 # Distributed under the terms of the GNU General Public License v2
EAPI=8 EAPI=8
PYTHON_COMPAT=( python3_{8,9,10} ) # 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:=1}
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_{9,10,11} )
PYTHON_REQ_USE="ncurses,readline" PYTHON_REQ_USE="ncurses,readline"
FIRMWARE_ABI_VERSION="6.2.0" FIRMWARE_ABI_VERSION="7.2.0"
inherit linux-info toolchain-funcs python-r1 udev fcaps readme.gentoo-r1 \ inherit linux-info toolchain-funcs python-r1 udev fcaps readme.gentoo-r1 \
pax-utils xdg-utils pax-utils xdg-utils
if [[ ${PV} = *9999* ]]; then if [[ ${PV} == *9999* ]]; then
QEMU_DOCS_PREBUILT=0
EGIT_REPO_URI="https://gitlab.com/qemu-project/qemu.git/" EGIT_REPO_URI="https://gitlab.com/qemu-project/qemu.git/"
EGIT_SUBMODULES=( EGIT_SUBMODULES=(
meson
tests/fp/berkeley-softfloat-3 tests/fp/berkeley-softfloat-3
tests/fp/berkeley-testfloat-3 tests/fp/berkeley-testfloat-3
ui/keycodemapdb ui/keycodemapdb
@ -22,8 +34,15 @@ if [[ ${PV} = *9999* ]]; then
inherit git-r3 inherit git-r3
SRC_URI="" SRC_URI=""
else else
SRC_URI="https://download.qemu.org/${P}.tar.xz" MY_P="${PN}-${PV/_rc/-rc}"
KEYWORDS="~amd64 ~arm ~arm64 ~ppc ~ppc64 ~riscv ~x86" 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 fi
DESCRIPTION="QEMU + Kernel-based Virtual Machine userland tools" DESCRIPTION="QEMU + Kernel-based Virtual Machine userland tools"
@ -32,7 +51,9 @@ HOMEPAGE="https://www.qemu.org https://www.linux-kvm.org"
LICENSE="GPL-2 LGPL-2 BSD-2" LICENSE="GPL-2 LGPL-2 BSD-2"
SLOT="0" SLOT="0"
IUSE="accessibility +aio alsa bpf bzip2 capstone +caps +curl debug +doc [[ ${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 +fdt fuse glusterfs +gnutls gtk infiniband iscsi io-uring
jack jemalloc +jpeg jack jemalloc +jpeg
lzo multipath lzo multipath
@ -40,7 +61,7 @@ IUSE="accessibility +aio alsa bpf bzip2 capstone +caps +curl debug +doc
plugins +png pulseaudio python rbd sasl +seccomp sdl sdl-image selinux plugins +png pulseaudio python rbd sasl +seccomp sdl sdl-image selinux
+slirp +slirp
smartcard snappy spice ssh static static-user systemtap test udev usb smartcard snappy spice ssh static static-user systemtap test udev usb
usbredir vde +vhost-net vhost-user-fs virgl virtfs +vnc vte xattr xen usbredir vde +vhost-net virgl virtfs +vnc vte xattr xen
zstd" zstd"
COMMON_TARGETS=" COMMON_TARGETS="
@ -50,6 +71,7 @@ COMMON_TARGETS="
cris cris
hppa hppa
i386 i386
loongarch64
m68k m68k
microblaze microblaze
microblazeel microblazeel
@ -94,9 +116,11 @@ use_user_targets=$(printf ' qemu_user_targets_%s' ${IUSE_USER_TARGETS})
IUSE+=" ${use_softmmu_targets} ${use_user_targets}" IUSE+=" ${use_softmmu_targets} ${use_user_targets}"
RESTRICT="!test? ( test )" RESTRICT="!test? ( test )"
# Allow no targets to be built so that people can get a tools-only build. # Allow no targets to be built so that people can get a tools-only build.
# Block USE flag configurations known to not work. # 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_arm? ( fdt )
qemu_softmmu_targets_microblaze? ( fdt ) qemu_softmmu_targets_microblaze? ( fdt )
qemu_softmmu_targets_mips64el? ( fdt ) qemu_softmmu_targets_mips64el? ( fdt )
@ -108,14 +132,16 @@ REQUIRED_USE="${PYTHON_REQUIRED_USE}
sdl-image? ( sdl ) sdl-image? ( sdl )
static? ( static-user !alsa !gtk !jack !opengl !pam !pulseaudio !plugins !rbd !snappy !udev ) static? ( static-user !alsa !gtk !jack !opengl !pam !pulseaudio !plugins !rbd !snappy !udev )
static-user? ( !plugins ) static-user? ( !plugins )
vhost-user-fs? ( caps seccomp )
virgl? ( opengl ) virgl? ( opengl )
virtfs? ( caps xattr ) virtfs? ( xattr )
vnc? ( gnutls ) vnc? ( gnutls )
vte? ( gtk ) vte? ( gtk )
multipath? ( udev ) multipath? ( udev )
plugins? ( !static !static-user ) plugins? ( !static !static-user )
" "
for smname in ${IUSE_SOFTMMU_TARGETS} ; do
REQUIRED_USE+=" qemu_softmmu_targets_${smname}? ( seccomp ) "
done
# Dependencies required for qemu tools (qemu-nbd, qemu-img, qemu-io, ...) # Dependencies required for qemu tools (qemu-nbd, qemu-img, qemu-io, ...)
# and user/softmmu targets (qemu-*, qemu-system-*). # and user/softmmu targets (qemu-*, qemu-system-*).
@ -135,6 +161,7 @@ ALL_DEPEND="
# Dependencies required for qemu tools (qemu-nbd, qemu-img, qemu-io, ...) # Dependencies required for qemu tools (qemu-nbd, qemu-img, qemu-io, ...)
# softmmu targets (qemu-system-*). # softmmu targets (qemu-system-*).
SOFTMMU_TOOLS_DEPEND=" SOFTMMU_TOOLS_DEPEND="
sys-libs/libcap-ng[static-libs(+)]
>=x11-libs/pixman-0.28.0[static-libs(+)] >=x11-libs/pixman-0.28.0[static-libs(+)]
accessibility? ( accessibility? (
app-accessibility/brltty[api] app-accessibility/brltty[api]
@ -145,9 +172,8 @@ SOFTMMU_TOOLS_DEPEND="
bpf? ( dev-libs/libbpf:= ) bpf? ( dev-libs/libbpf:= )
bzip2? ( app-arch/bzip2[static-libs(+)] ) bzip2? ( app-arch/bzip2[static-libs(+)] )
capstone? ( dev-libs/capstone:= ) capstone? ( dev-libs/capstone:= )
caps? ( sys-libs/libcap-ng[static-libs(+)] )
curl? ( >=net-misc/curl-7.15.4[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(+)] ) fuse? ( >=sys-fs/fuse-3.1:3[static-libs(+)] )
glusterfs? ( >=sys-cluster/glusterfs-3.4.0[static-libs(+)] ) glusterfs? ( >=sys-cluster/glusterfs-3.4.0[static-libs(+)] )
gnutls? ( gnutls? (
@ -163,7 +189,7 @@ SOFTMMU_TOOLS_DEPEND="
io-uring? ( sys-libs/liburing:=[static-libs(+)] ) io-uring? ( sys-libs/liburing:=[static-libs(+)] )
jack? ( virtual/jack ) jack? ( virtual/jack )
jemalloc? ( dev-libs/jemalloc ) jemalloc? ( dev-libs/jemalloc )
jpeg? ( virtual/jpeg:0=[static-libs(+)] ) jpeg? ( media-libs/libjpeg-turbo:=[static-libs(+)] )
lzo? ( dev-libs/lzo:2[static-libs(+)] ) lzo? ( dev-libs/lzo:2[static-libs(+)] )
multipath? ( sys-fs/multipath-tools ) multipath? ( sys-fs/multipath-tools )
ncurses? ( ncurses? (
@ -207,34 +233,44 @@ SOFTMMU_TOOLS_DEPEND="
zstd? ( >=app-arch/zstd-1.4.0[static-libs(+)] ) zstd? ( >=app-arch/zstd-1.4.0[static-libs(+)] )
" "
EDK2_OVMF_VERSION="202105" EDK2_OVMF_VERSION="202202"
SEABIOS_VERSION="1.14.0" SEABIOS_VERSION="1.16.0"
X86_FIRMWARE_DEPEND=" X86_FIRMWARE_DEPEND="
pin-upstream-blobs? ( pin-upstream-blobs? (
~sys-firmware/edk2-ovmf-${EDK2_OVMF_VERSION}[binary] ~sys-firmware/edk2-ovmf-bin-${EDK2_OVMF_VERSION}
~sys-firmware/ipxe-1.21.1[binary,qemu] ~sys-firmware/ipxe-1.21.1[binary,qemu]
~sys-firmware/seabios-${SEABIOS_VERSION}[binary,seavgabios] ~sys-firmware/seabios-bin-${SEABIOS_VERSION}
~sys-firmware/sgabios-0.1_pre10[binary] ~sys-firmware/sgabios-0.1_pre10[binary]
) )
!pin-upstream-blobs? ( !pin-upstream-blobs? (
>=sys-firmware/edk2-ovmf-${EDK2_OVMF_VERSION} || (
>=sys-firmware/edk2-ovmf-${EDK2_OVMF_VERSION}
>=sys-firmware/edk2-ovmf-bin-${EDK2_OVMF_VERSION}
)
sys-firmware/ipxe[qemu] sys-firmware/ipxe[qemu]
>=sys-firmware/seabios-${SEABIOS_VERSION}[seavgabios] || (
>=sys-firmware/seabios-${SEABIOS_VERSION}[seavgabios]
>=sys-firmware/seabios-bin-${SEABIOS_VERSION}
)
sys-firmware/sgabios sys-firmware/sgabios
)" )"
PPC_FIRMWARE_DEPEND=" PPC_FIRMWARE_DEPEND="
pin-upstream-blobs? ( pin-upstream-blobs? (
~sys-firmware/seabios-${SEABIOS_VERSION}[binary,seavgabios] ~sys-firmware/seabios-bin-${SEABIOS_VERSION}
) )
!pin-upstream-blobs? ( !pin-upstream-blobs? (
>=sys-firmware/seabios-${SEABIOS_VERSION}[seavgabios] || (
>=sys-firmware/seabios-${SEABIOS_VERSION}[seavgabios]
>=sys-firmware/seabios-bin-${SEABIOS_VERSION}
)
) )
" "
BDEPEND=" BDEPEND="
$(python_gen_impl_dep) $(python_gen_impl_dep)
dev-lang/perl dev-lang/perl
dev-util/meson
sys-apps/texinfo sys-apps/texinfo
virtual/pkgconfig virtual/pkgconfig
doc? ( doc? (
@ -272,11 +308,10 @@ RDEPEND="${CDEPEND}
)" )"
PATCHES=( PATCHES=(
"${FILESDIR}"/${PN}-2.11.1-capstone_include_path.patch
"${FILESDIR}"/${PN}-5.2.0-disable-keymap.patch "${FILESDIR}"/${PN}-5.2.0-disable-keymap.patch
"${FILESDIR}"/${PN}-6.0.0-make.patch "${FILESDIR}"/${PN}-6.0.0-make.patch
"${FILESDIR}"/${PN}-6.1.0-strings.patch "${FILESDIR}"/${PN}-7.1.0-also-build-virtfs-proxy-helper.patch
"${FILESDIR}"/${PN}-7.0.0-also-build-virtfs-proxy-helper.patch "${FILESDIR}"/${PN}-7.1.0-capstone-include-path.patch
) )
QA_PREBUILT=" QA_PREBUILT="
@ -416,8 +451,13 @@ src_prepare() {
# Verbose builds # Verbose builds
MAKEOPTS+=" V=1" MAKEOPTS+=" V=1"
# Remove bundled copy of libfdt # We already force -D_FORTIFY_SOURCE=2 (or 3) in our toolchain, but
rm -r dtc || die # this setting (-U then -D..=2) will prevent us from trying out 3, so
# drop it. No change to level of protection b/c we patch our toolchain.
sed -i -e 's/-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2//' configure || die
# Remove bundled modules
rm -r dtc meson roms/*/ || die
} }
## ##
@ -430,7 +470,7 @@ qemu_src_configure() {
local buildtype=$1 local buildtype=$1
local builddir="${S}/${buildtype}-build" local builddir="${S}/${buildtype}-build"
mkdir "${builddir}" mkdir "${builddir}" || die
local conf_opts=( local conf_opts=(
--prefix=/usr --prefix=/usr
@ -462,10 +502,10 @@ qemu_src_configure() {
# are enabled), but it's not really worth the hassle. Disable it # are enabled), but it's not really worth the hassle. Disable it
# all the time to avoid automatically detecting it. #568856 # all the time to avoid automatically detecting it. #568856
--disable-gcrypt --disable-gcrypt
--python="${PYTHON}"
--cc="$(tc-getCC)" --cc="$(tc-getCC)"
--cxx="$(tc-getCXX)" --cxx="$(tc-getCXX)"
--host-cc="$(tc-getBUILD_CC)" --host-cc="$(tc-getBUILD_CC)"
$(use_enable alsa) $(use_enable alsa)
$(use_enable debug debug-info) $(use_enable debug debug-info)
$(use_enable debug debug-tcg) $(use_enable debug debug-tcg)
@ -516,7 +556,6 @@ qemu_src_configure() {
$(conf_softmmu bpf) $(conf_softmmu bpf)
$(conf_notuser bzip2) $(conf_notuser bzip2)
$(conf_notuser capstone) $(conf_notuser capstone)
$(conf_notuser caps cap-ng)
$(conf_notuser curl) $(conf_notuser curl)
$(conf_tools doc docs) $(conf_tools doc docs)
$(conf_notuser fdt) $(conf_notuser fdt)
@ -538,13 +577,13 @@ qemu_src_configure() {
$(conf_notuser numa) $(conf_notuser numa)
$(conf_notuser opengl) $(conf_notuser opengl)
$(conf_notuser pam auth-pam) $(conf_notuser pam auth-pam)
$(conf_notuser png vnc-png) $(conf_notuser png)
$(conf_notuser rbd) $(conf_notuser rbd)
$(conf_notuser sasl vnc-sasl) $(conf_notuser sasl vnc-sasl)
$(conf_notuser sdl) $(conf_notuser sdl)
$(conf_softmmu sdl-image) $(conf_softmmu sdl-image)
$(conf_notuser seccomp) $(conf_notuser seccomp)
$(conf_notuser slirp slirp system) $(conf_notuser slirp)
$(conf_notuser smartcard) $(conf_notuser smartcard)
$(conf_notuser snappy) $(conf_notuser snappy)
$(conf_notuser spice) $(conf_notuser spice)
@ -554,8 +593,6 @@ qemu_src_configure() {
$(conf_notuser usbredir usb-redir) $(conf_notuser usbredir usb-redir)
$(conf_notuser vde) $(conf_notuser vde)
$(conf_notuser vhost-net) $(conf_notuser vhost-net)
$(conf_notuser vhost-user-fs)
$(conf_tools vhost-user-fs virtiofsd)
$(conf_notuser virgl virglrenderer) $(conf_notuser virgl virglrenderer)
$(conf_softmmu virtfs) $(conf_softmmu virtfs)
$(conf_notuser vnc) $(conf_notuser vnc)
@ -590,6 +627,8 @@ qemu_src_configure() {
--disable-system --disable-system
--disable-blobs --disable-blobs
--disable-tools --disable-tools
--disable-cap-ng
--disable-seccomp
) )
local static_flag="static-user" local static_flag="static-user"
;; ;;
@ -598,6 +637,8 @@ qemu_src_configure() {
--disable-linux-user --disable-linux-user
--enable-system --enable-system
--disable-tools --disable-tools
--enable-cap-ng
--enable-seccomp
) )
local static_flag="static" local static_flag="static"
;; ;;
@ -607,6 +648,7 @@ qemu_src_configure() {
--disable-system --disable-system
--disable-blobs --disable-blobs
--enable-tools --enable-tools
--enable-cap-ng
) )
local static_flag="static" local static_flag="static"
;; ;;
@ -671,22 +713,22 @@ src_configure() {
src_compile() { src_compile() {
if [[ -n ${user_targets} ]]; then if [[ -n ${user_targets} ]]; then
cd "${S}/user-build" cd "${S}/user-build" || die
default default
fi fi
if [[ -n ${softmmu_targets} ]]; then if [[ -n ${softmmu_targets} ]]; then
cd "${S}/softmmu-build" cd "${S}/softmmu-build" || die
default default
fi fi
cd "${S}/tools-build" cd "${S}/tools-build" || die
default default
} }
src_test() { src_test() {
if [[ -n ${softmmu_targets} ]]; then if [[ -n ${softmmu_targets} ]]; then
cd "${S}/softmmu-build" cd "${S}/softmmu-build" || die
pax-mark m */qemu-system-* #515550 pax-mark m */qemu-system-* #515550
emake check emake check
fi fi
@ -783,19 +825,24 @@ src_install() {
fi fi
fi fi
cd "${S}/tools-build" cd "${S}/tools-build" || die
emake DESTDIR="${ED}" install 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 # 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 pax-mark mr "${softmmu_bins[@]}" "${user_bins[@]}" # bug 575594
popd >/dev/null popd >/dev/null || die
# Install config file example for qemu-bridge-helper # Install config file example for qemu-bridge-helper
insinto "/etc/qemu" insinto "/etc/qemu"
doins "${FILESDIR}/bridge.conf" doins "${FILESDIR}/bridge.conf"
cd "${S}" cd "${S}" || die
dodoc MAINTAINERS docs/specs/pci-ids.txt dodoc MAINTAINERS docs/specs/pci-ids.txt
newdoc pc-bios/README README.pc-bios newdoc pc-bios/README README.pc-bios
@ -804,10 +851,7 @@ src_install() {
if [[ -n ${softmmu_targets} ]]; then if [[ -n ${softmmu_targets} ]]; then
# Remove SeaBIOS since we're using the SeaBIOS packaged one # 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 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 dosym ../seabios/bios-256k.bin /usr/share/qemu/bios-256k.bin
fi fi
@ -818,6 +862,7 @@ src_install() {
rm "${ED}/usr/share/qemu/vgabios-stdvga.bin" rm "${ED}/usr/share/qemu/vgabios-stdvga.bin"
rm "${ED}/usr/share/qemu/vgabios-virtio.bin" rm "${ED}/usr/share/qemu/vgabios-virtio.bin"
rm "${ED}/usr/share/qemu/vgabios-vmware.bin" rm "${ED}/usr/share/qemu/vgabios-vmware.bin"
# PPC/PPC64 loads vgabios-stdvga # 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 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-isavga.bin /usr/share/qemu/vgabios.bin
@ -829,13 +874,11 @@ src_install() {
fi fi
# Remove sgabios since we're using the sgabios packaged one # 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 if use qemu_softmmu_targets_x86_64 || use qemu_softmmu_targets_i386; then
dosym ../sgabios/sgabios.bin /usr/share/qemu/sgabios.bin dosym ../sgabios/sgabios.bin /usr/share/qemu/sgabios.bin
fi fi
# Remove iPXE since we're using the iPXE packaged one # 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 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/8086100e.rom /usr/share/qemu/pxe-e1000.rom
dosym ../ipxe/80861209.rom /usr/share/qemu/pxe-eepro100.rom dosym ../ipxe/80861209.rom /usr/share/qemu/pxe-eepro100.rom
@ -868,16 +911,27 @@ pkg_postinst() {
xdg_icon_cache_update xdg_icon_cache_update
[[ -z ${EPREFIX} ]] && [[ -f ${EROOT}/usr/libexec/qemu-bridge-helper ]] && \ [[ -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 DISABLE_AUTOFORMATTING=true
readme.gentoo_print_elog readme.gentoo_print_elog
if use pin-upstream-blobs && firmware_abi_change; then if use pin-upstream-blobs && firmware_abi_change; then
ewarn "This version of qemu pins new versions of firmware blobs:" 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/ipxe)"
ewarn " $(best_version sys-firmware/seabios)"
ewarn " $(best_version sys-firmware/sgabios)" ewarn " $(best_version sys-firmware/sgabios)"
ewarn "This might break resume of hibernated guests (started with a different" ewarn "This might break resume of hibernated guests (started with a different"
ewarn "firmware version) and live migration to/from qemu versions with different" ewarn "firmware version) and live migration to/from qemu versions with different"
@ -891,22 +945,24 @@ pkg_postinst() {
pkg_info() { pkg_info() {
echo "Using:" echo "Using:"
echo " $(best_version app-emulation/spice-protocol)" echo " $(best_version app-emulation/spice-protocol)"
echo " $(best_version sys-firmware/edk2-ovmf)"
if has_version 'sys-firmware/edk2-ovmf[binary]'; then if has_version 'sys-firmware/edk2-ovmf-bin'; then
echo " USE=binary" echo " $(best_version sys-firmware/edk2-ovmf-bin)"
else else
echo " USE=''" echo " $(best_version sys-firmware/edk2-ovmf)"
fi fi
if has_version 'sys-firmware/seabios-bin'; then
echo " $(best_version sys-firmware/seabios-bin)"
else
echo " $(best_version sys-firmware/seabios)"
fi
echo " $(best_version sys-firmware/ipxe)" echo " $(best_version sys-firmware/ipxe)"
echo " $(best_version sys-firmware/seabios)"
if has_version 'sys-firmware/seabios[binary]'; then
echo " USE=binary"
else
echo " USE=''"
fi
echo " $(best_version sys-firmware/sgabios)" echo " $(best_version sys-firmware/sgabios)"
} }
pkg_postrm() { pkg_postrm() {
xdg_icon_cache_update xdg_icon_cache_update
udev_reload
} }