From a883e57e7d59df263f7ee642f1f00b77b579d22d Mon Sep 17 00:00:00 2001 From: Ophestra Date: Tue, 17 Feb 2026 17:34:25 +0900 Subject: [PATCH] internal/rosa: qemu artifact This is still a quite minimal build. More features will be enabled as dependencies become available. The powerpc failure will be investigated if it is ever needed. Signed-off-by: Ophestra --- internal/rosa/all.go | 2 + internal/rosa/qemu.go | 102 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 104 insertions(+) create mode 100644 internal/rosa/qemu.go diff --git a/internal/rosa/all.go b/internal/rosa/all.go index 94fba47..e5b41ac 100644 --- a/internal/rosa/all.go +++ b/internal/rosa/all.go @@ -68,6 +68,7 @@ const ( PyTest Pygments Python + QEMU Rsync Sed Setuptools @@ -178,6 +179,7 @@ func ResolveName(name string) (p PArtifact, ok bool) { "pytest": PyTest, "pygments": Pygments, "python": Python, + "qemu": QEMU, "rsync": Rsync, "sed": Sed, "setuptools": Setuptools, diff --git a/internal/rosa/qemu.go b/internal/rosa/qemu.go new file mode 100644 index 0000000..6ede43d --- /dev/null +++ b/internal/rosa/qemu.go @@ -0,0 +1,102 @@ +package rosa + +import ( + "hakurei.app/internal/pkg" +) + +func (t Toolchain) newQEMU() pkg.Artifact { + const ( + version = "10.2.1" + checksum = "rjLTSgHJd3X3Vgpxrsus_ZZiaYLiNix1YhcHaGbLd_odYixwZjCcAIt8CVQPJGdZ" + ) + return t.NewViaMake("qemu", version, t.NewPatchedSource( + "qemu", version, pkg.NewHTTPGetTar( + nil, "https://download.qemu.org/qemu-"+version+".tar.bz2", + mustDecode(checksum), + pkg.TarBzip2, + ), false, [2]string{"disable-mcast-test", `diff --git a/tests/qtest/netdev-socket.c b/tests/qtest/netdev-socket.c +index b731af0ad9..b5cbed4801 100644 +--- a/tests/qtest/netdev-socket.c ++++ b/tests/qtest/netdev-socket.c +@@ -401,7 +401,7 @@ static void test_dgram_inet(void) + qtest_quit(qts0); + } + +-#if !defined(_WIN32) && !defined(CONFIG_DARWIN) ++#if 0 + static void test_dgram_mcast(void) + { + QTestState *qts; +@@ -513,7 +513,7 @@ int main(int argc, char **argv) + if (has_ipv4) { + qtest_add_func("/netdev/stream/inet/ipv4", test_stream_inet_ipv4); + qtest_add_func("/netdev/dgram/inet", test_dgram_inet); +-#if !defined(_WIN32) && !defined(CONFIG_DARWIN) ++#if 0 + qtest_add_func("/netdev/dgram/mcast", test_dgram_mcast); + #endif + } +`}, + ), &MakeAttr{ + // configure script uses source as scratch space + Writable: true, + + ScriptEarly: ` +# tests expect /var/tmp/ to be available +mkdir -p /var/tmp/ + +# https://gitlab.com/qemu-project/qemu/-/issues/3145 +(cd /usr/src/qemu && sed -i \ + 's,Input/output error,I/O error,g' \ + tests/qemu-iotests/[0-9][0-9][0-9]* \ + tests/qemu-iotests/tests/copy-before-write \ + tests/qemu-iotests/tests/file-io-error.out && +cat << EOF > tests/qemu-iotests/150 +#!/bin/sh +_notrun 'appears to spuriously fail on zfs' +EOF +) +`, + + Configure: [][2]string{ + {"disable-download"}, + {"disable-docs"}, + + {"target-list-exclude", "" + + // fails to load firmware + "ppc-linux-user," + + "ppc64-linux-user," + + "ppc64le-linux-user," + + "ppc-softmmu," + + "ppc64-softmmu"}, + }, + + ScriptConfigured: ` +make "-j$(nproc)" +`, + }, + t.Load(Bash), + t.Load(Python), + t.Load(Ninja), + t.Load(Bzip2), + t.Load(PkgConfig), + t.Load(Diffutils), + + t.Load(OpenSSL), + t.Load(Bzip2), + t.Load(XZ), + + t.Load(Flex), + t.Load(Bison), + t.Load(M4), + + t.Load(PCRE2), + t.Load(Libffi), + t.Load(Zlib), + t.Load(GLib), + t.Load(Zstd), + t.Load(DTC), + t.Load(KernelHeaders), + ) +} +func init() { artifactsF[QEMU] = Toolchain.newQEMU }