Skip to content

Commit

Permalink
emulators/qemu70: New port
Browse files Browse the repository at this point in the history
qemu 7.1.X has been released and in preperation of updating
emulators/qemu to latest version emulators/qemu has been moved to a new
port.
  • Loading branch information
5u623l20 committed Sep 8, 2022
1 parent fc85d84 commit 5618fbd
Show file tree
Hide file tree
Showing 15 changed files with 725 additions and 0 deletions.
1 change: 1 addition & 0 deletions emulators/Makefile
Expand Up @@ -116,6 +116,7 @@
SUBDIR += qemu-user-static
SUBDIR += qemu-user-static-devel
SUBDIR += qemu6
SUBDIR += qemu70
SUBDIR += qmc2
SUBDIR += quasi88
SUBDIR += reicast
Expand Down
246 changes: 246 additions & 0 deletions emulators/qemu70/Makefile
@@ -0,0 +1,246 @@
PORTNAME= qemu
PORTVERSION= 7.0.0
CATEGORIES= emulators
MASTER_SITES= https://download.qemu.org/
DIST_SUBDIR= qemu/${PORTVERSION}

MAINTAINER= bofh@FreeBSD.org
COMMENT= QEMU CPU Emulator ${${FLAVOR}_COMMENT} - 7.0.x
WWW= https://wiki.qemu.org/Main_Page

LICENSE= GPLv2

.if ${FLAVOR:U} != tools
ONLY_FOR_ARCHS= amd64 powerpc64 powerpc64le
# We need to check if it build with other ARCHS
# For i386 we have unknown type name 'vm_page_t'
.endif

BUILD_DEPENDS= bash:shells/bash
.if ${FLAVOR:U} != tools
LIB_DEPENDS+= libfdt.so:sysutils/dtc \
libzstd.so:archivers/zstd
.endif
.if (${FLAVOR:U} != nox11 && ${FLAVOR:U} != tools)
LIB_DEPENDS+= libepoxy.so:graphics/libepoxy
.endif

FLAVORS= default nox11 tools
FLAVOR?= ${FLAVORS:[1]}
default_PKGNAMESUFFIX= 70
default_CONFLICTS_INSTALL= qemu-devel qemu-nox11 qemu-tools qemu-utils \
qemu6*
nox11_PKGNAMESUFFIX= 70-nox11
nox11_CONFLICTS_INSTALL= qemu qemu-devel qemu6*
nox11_COMMENT= (without X11)
tools_PKGNAMESUFFIX= 70-tools
tools_COMMENT= (tools only)
tools_CONFLICTS_INSTALL= qemu qemu-devel qemu-nox11 qemu-utils qemu6*
tools_DESCR= ${.CURDIR}/pkg-descr-tools
tools_PLIST= ${.CURDIR}/pkg-plist-tools

USES= cpe gmake gnome ninja perl5 pkgconfig python:build tar:xz
USE_GNOME= glib20
USE_PERL5= build
.if ${FLAVOR:U} != tools
USES+= iconv:wchar_t
.endif
.if (${FLAVOR:U} != nox11 && ${FLAVOR:U} != tools)
USE_GNOME+= cairo
.endif

HAS_CONFIGURE= yes
CONFIGURE_ARGS+= --cc=${CC} \
--disable-kvm \
--disable-linux-aio \
--disable-linux-user \
--disable-xen \
--extra-cflags=-I${WRKSRC}\ -I${LOCALBASE}/include\ -DPREFIX=\\\"\"${PREFIX}\\\"\" \
--extra-ldflags=-L${LOCALBASE}/lib \
--extra-ldflags=-L/usr/lib \
--localstatedir=/var \
--mandir=${PREFIX}/man \
--prefix=${PREFIX} \
--python=${PYTHON_CMD}
.if ${FLAVOR:U} != tools
CONFIGURE_ARGS+= --enable-fdt=system \
--enable-netmap
.endif
.if ${FLAVOR:U} == tools
CONFIGURE_ARGS+= --disable-attr \
--disable-blobs \
--disable-brlapi \
--disable-bzip2 \
--disable-cap-ng \
--disable-coroutine-pool \
--disable-curses \
--disable-fdt \
--disable-gcrypt \
--disable-glusterfs \
--disable-guest-agent \
--disable-libnfs \
--disable-libusb \
--disable-lzo \
--disable-netmap \
--disable-nettle \
--disable-numa \
--disable-rbd \
--disable-rdma \
--disable-seccomp \
--disable-smartcard \
--disable-snappy \
--disable-spice \
--disable-system \
--disable-tpm \
--disable-user \
--disable-vhost-net \
--disable-virtfs \
--disable-vnc \
--enable-tools
.endif

CFLAGS:= ${CFLAGS:C/-fno-tree-vrp//}
WITHOUT_CPU_CFLAGS= yes #to avoid problems with register allocation

PORTDOCS= .buildinfo _static/* about/* dbus-dbusindex.html devel/* docs \
genindex.html index.html interop/* objects.inv search.html \
searchindex.js specs/* system/* tools/* user/*

OPTIONS_DEFINE= CAPSTONE CDROM_DMA CURL DEBUG DOCS GNUTLS GTK3 \
ISCSI JPEG OPENGL PNG SAMBA SASL STATIC_LINK \
STRIP USBREDIR VDE X11 X86_TARGETS
OPTIONS_DEFAULT= CDROM_DMA CURL GNUTLS GTK3 JPEG NCURSES_DEFAULT \
OPENGL PNG SASL VDE X11
OPTIONS_SINGLE= NCURSES
OPTIONS_SINGLE_NCURSES= NCURSES_BASE NCURSES_DEFAULT NCURSES_PORT
.if ${FLAVOR:U} == nox11
OPTIONS_EXCLUDE:= GTK3 X11
.endif
.if ${FLAVOR:U} == tools
OPTIONS_EXCLUDE:= CAPSTONE CDROM_DMA CURL DEBUG GNUTLS GTK3 ISCSI \
JPEG NCURSES NCURSES_BASE NCURSES_DEFAULT \
NCURSES_PORT OPENGL PNG SAMBA SASL STATIC_LINK \
USBREDIR VDE X11 X86_TARGETS
.endif
OPTIONS_SUB= yes
CAPSTONE_DESC= Disassembly framework support
CDROM_DMA_DESC= IDE CDROM DMA
GNUTLS_DESC= gnutls dependency (vnc encryption)
ISCSI_DESC= libiscsi dependency (iSCSI client for emulated drives)
JPEG_DESC= jpeg dependency (vnc lossy compression)
NCURSES_BASE_DESC= Depend on ncurses in base
NCURSES_DEFAULT_DESC= Depend on ncurses (ports if installed, otherwise base)
NCURSES_PORT_DESC= Depend on devel/ncurses in ports
PNG_DESC= png dependency (vnc compression)
SAMBA_DESC= samba dependency (for -smb)
SASL_DESC= cyrus-sasl dependency (vnc encryption)
STATIC_LINK_DESC= Statically link the executables
USBREDIR_DESC= usb device network redirection (experimental!)
VDE_DESC= vde dependency (for vde networking)
X86_TARGETS_DESC= Build only x86 system targets
CAPSTONE_LIB_DEPENDS= libcapstone.so:devel/capstone4
CAPSTONE_CONFIGURE_ON= --enable-capstone=system \
--extra-cflags=-I${LOCALBASE}/include/capstone
CAPSTONE_CONFIGURE_OFF= --disable-capstone
CURL_LIB_DEPENDS= libcurl.so:ftp/curl
CURL_CONFIGURE_OFF= --disable-curl
DEBUG_CONFIGURE_ON= --enable-debug
DOCS_BUILD_DEPENDS= ${PYTHON_PKGNAMEPREFIX}sphinx_rtd_theme>0:textproc/py-sphinx_rtd_theme@${PY_FLAVOR} \
sphinx-build:textproc/py-sphinx@${PY_FLAVOR}
DOCS_CONFIGURE_ENABLE= docs
GNUTLS_LIB_DEPENDS= libgnutls.so:security/gnutls
GNUTLS_CONFIGURE_OFF= --disable-gnutls
GTK3_LIB_DEPENDS= libxkbcommon.so:x11/libxkbcommon
GTK3_USES= gettext gl
GTK3_USE= GNOME=gdkpixbuf2,gtk30,vte3 \
XORG=x11,xext
GTK3_CONFIGURE_OFF= --disable-gtk \
--disable-vte
ISCSI_LIB_DEPENDS= libiscsi.so:net/libiscsi
ISCSI_CONFIGURE_OFF= --disable-libiscsi
JPEG_USES= jpeg
JPEG_CONFIGURE_OFF= --disable-vnc-jpeg
NCURSES_BASE_USES= ncurses:base
NCURSES_DEFAULT_USES= ncurses
NCURSES_PORT_USES= ncurses:port
OPENGL_USES= gl
OPENGL_USE= GL=gbm,gl
OPENGL_CONFIGURE_OFF= --disable-opengl
PNG_LIB_DEPENDS= libpng.so:graphics/png
PNG_CONFIGURE_OFF= --disable-vnc-png
SAMBA_USES= samba:run # smbd
SAMBA_CONFIGURE_ON= --smbd=${LOCALBASE}/sbin/smbd
SASL_LIB_DEPENDS= libsasl2.so:security/cyrus-sasl2
SASL_CONFIGURE_OFF= --disable-vnc-sasl
STATIC_LINK_PREVENTS= GTK3 X11
STATIC_LINK_PREVENTS_MSG= X11 ui cannot be built static
STATIC_LINK_CONFIGURE_ON= --static
STRIP_CONFIGURE_OFF= --disable-strip
USBREDIR_BUILD_DEPENDS= usbredir>=0.6:net/usbredir
USBREDIR_RUN_DEPENDS= usbredir>=0.6:net/usbredir
USBREDIR_CONFIGURE_OFF= --disable-usb-redir
VDE_LIB_DEPENDS= libvdeplug.so:net/vde2
VDE_CONFIGURE_OFF= --disable-vde
X11_USES= sdl
X11_USE= GNOME=gdkpixbuf2 \
SDL=sdl2 \
XORG=x11,xext
X11_CONFIGURE_ENABLE= sdl
.if (empty(FLAVOR) || ${FLAVOR:U} == default || ${FLAVOR:U} == nox11) && \
(${FLAVOR:U} != tools || ${PKGNAMESUFFIX} != "-guest-agent")
X86_TARGETS_USES_OFF= xorg
X86_TARGETS_USE_OFF= XORG=pixman,x11
X86_TARGETS_CONFIGURE_ON= --target-list='i386-softmmu i386-bsd-user x86_64-softmmu x86_64-bsd-user'
.endif

.include <bsd.port.options.mk>

.if (empty(FLAVOR) || ${FLAVOR:U} == default || ${FLAVOR:U} == nox11) && \
(${FLAVOR:U} != tools || ${PKGNAMESUFFIX} != "-guest-agent")
.if ${ARCH} == "amd64"
MAKE_ARGS+= ARCH=x86_64
.endif

.if ${ARCH} == "powerpc"
CFLAGS+= -D_CALL_SYSV
MAKE_ARGS+= ARCH=ppc
USE_GCC= yes
.endif

.if ${ARCH:Mpowerpc64*}
CONFIGURE_ARGS+= --disable-bsd-user
MAKE_ARGS+= ARCH=ppc64
PLIST_SUB+= BSDUSER="@comment "
.else
PLIST_SUB+= BSDUSER=""
.endif

.if ${ARCH} == "sparc64"
CONFIGURE_ARGS+= --sparc_cpu=v9
.endif

PLIST_SUB+= LINUXBOOT_DMA=""
.endif

post-patch-CDROM_DMA-off:
@${REINPLACE_CMD} -e '/USE_DMA_CDROM/d' ${WRKSRC}/include/hw/ide/internal.h

do-build:
cd ${WRKSRC} && ${GMAKE}

do-install:
cd ${WRKSRC} && ${SETENV} DESTDIR=${STAGEDIR} ${GMAKE} install

.if !target(post-install)
post-install:
.if ${FLAVOR:U} != tools
${INSTALL_SCRIPT} ${FILESDIR}/qemu-ifup.sample ${STAGEDIR}${PREFIX}/etc
${INSTALL_SCRIPT} ${FILESDIR}/qemu-ifdown.sample ${STAGEDIR}${PREFIX}/etc
@${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/qemu-*
.endif

post-install-DOCS-on:
@(cd ${WRKSRC} && ${COPYTREE_SHARE} docs ${STAGEDIR}${DOCSDIR}/)
.endif

.include <bsd.port.mk>
3 changes: 3 additions & 0 deletions emulators/qemu70/distinfo
@@ -0,0 +1,3 @@
TIMESTAMP = 1650583782
SHA256 (qemu/7.0.0/qemu-7.0.0.tar.xz) = f6b375c7951f728402798b0baabb2d86478ca53d44cedbefabbe1c46bf46f839
SIZE (qemu/7.0.0/qemu-7.0.0.tar.xz) = 125117636
60 changes: 60 additions & 0 deletions emulators/qemu70/files/patch-block_export_fuse.c
@@ -0,0 +1,60 @@
--- block/export/fuse.c.orig 2022-04-22 18:57:58 UTC
+++ block/export/fuse.c
@@ -637,12 +637,6 @@ static void fuse_fallocate(fuse_req_t req, fuse_ino_t
return;
}

-#ifdef CONFIG_FALLOCATE_PUNCH_HOLE
- if (mode & FALLOC_FL_KEEP_SIZE) {
- length = MIN(length, blk_len - offset);
- }
-#endif /* CONFIG_FALLOCATE_PUNCH_HOLE */
-
if (!mode) {
/* We can only fallocate at the EOF with a truncate */
if (offset < blk_len) {
@@ -662,44 +656,6 @@ static void fuse_fallocate(fuse_req_t req, fuse_ino_t
ret = fuse_do_truncate(exp, offset + length, true,
PREALLOC_MODE_FALLOC);
}
-#ifdef CONFIG_FALLOCATE_PUNCH_HOLE
- else if (mode & FALLOC_FL_PUNCH_HOLE) {
- if (!(mode & FALLOC_FL_KEEP_SIZE)) {
- fuse_reply_err(req, EINVAL);
- return;
- }
-
- do {
- int size = MIN(length, BDRV_REQUEST_MAX_BYTES);
-
- ret = blk_pdiscard(exp->common.blk, offset, size);
- offset += size;
- length -= size;
- } while (ret == 0 && length > 0);
- }
-#endif /* CONFIG_FALLOCATE_PUNCH_HOLE */
-#ifdef CONFIG_FALLOCATE_ZERO_RANGE
- else if (mode & FALLOC_FL_ZERO_RANGE) {
- if (!(mode & FALLOC_FL_KEEP_SIZE) && offset + length > blk_len) {
- /* No need for zeroes, we are going to write them ourselves */
- ret = fuse_do_truncate(exp, offset + length, false,
- PREALLOC_MODE_OFF);
- if (ret < 0) {
- fuse_reply_err(req, -ret);
- return;
- }
- }
-
- do {
- int size = MIN(length, BDRV_REQUEST_MAX_BYTES);
-
- ret = blk_pwrite_zeroes(exp->common.blk,
- offset, size, 0);
- offset += size;
- length -= size;
- } while (ret == 0 && length > 0);
- }
-#endif /* CONFIG_FALLOCATE_ZERO_RANGE */
else {
ret = -EOPNOTSUPP;
}
12 changes: 12 additions & 0 deletions emulators/qemu70/files/patch-bsd-user_host_i386_host-signal.h
@@ -0,0 +1,12 @@
--- bsd-user/host/i386/host-signal.h.orig 2022-09-08 16:00:45 UTC
+++ bsd-user/host/i386/host-signal.h
@@ -9,6 +9,9 @@
#ifndef I386_HOST_SIGNAL_H
#define I386_HOST_SIGNAL_H

+#if defined(__FreeBSD__) || defined(__DragonFly__) || defined(__NetBSD__) || defined(__OpenBSD__)
+#include <sys/param.h>
+#endif
#include <sys/ucontext.h>
#include <machine/trap.h>
#include <vm/pmap.h>
12 changes: 12 additions & 0 deletions emulators/qemu70/files/patch-bsd-user_host_x86__64_host-signal.h
@@ -0,0 +1,12 @@
--- bsd-user/host/x86_64/host-signal.h.orig 2022-04-19 19:10:27 UTC
+++ bsd-user/host/x86_64/host-signal.h
@@ -9,6 +9,9 @@
#ifndef X86_64_HOST_SIGNAL_H
#define X86_64_HOST_SIGNAL_H

+#if defined(__FreeBSD__)
+#include <sys/param.h>
+#endif
#include <sys/ucontext.h>
#include <machine/trap.h>
#include <vm/pmap.h>
20 changes: 20 additions & 0 deletions emulators/qemu70/files/patch-meson.build
@@ -0,0 +1,20 @@
--- meson.build.orig 2022-04-19 19:10:27 UTC
+++ meson.build
@@ -2505,14 +2505,10 @@ if have_system
fdt_opt = get_option('fdt')
if fdt_opt in ['enabled', 'auto', 'system']
have_internal = fs.exists(meson.current_source_dir() / 'dtc/libfdt/Makefile.libfdt')
- fdt = cc.find_library('fdt', kwargs: static_kwargs,
+ fdt = cc.find_library('fdt', kwargs: static_kwargs, dirs: '/usr/local/lib/',
required: fdt_opt == 'system' or
- fdt_opt == 'enabled' and not have_internal)
- if fdt.found() and cc.links('''
- #include <libfdt.h>
- #include <libfdt_env.h>
- int main(void) { fdt_find_max_phandle(NULL, NULL); return 0; }''',
- dependencies: fdt)
+ fdt_opt == 'enabled')
+ if fdt.found()
fdt_opt = 'system'
elif fdt_opt == 'system'
error('system libfdt requested, but it is too old (1.5.1 or newer required)')
14 changes: 14 additions & 0 deletions emulators/qemu70/files/patch-util_meson.build
@@ -0,0 +1,14 @@
--- util/meson.build.orig 2022-04-23 11:59:28 UTC
+++ util/meson.build
@@ -87,10 +87,6 @@ if have_block
util_ss.add(files('readline.c'))
util_ss.add(files('throttle.c'))
util_ss.add(files('timed-average.c'))
- if config_host_data.get('CONFIG_INOTIFY1')
- util_ss.add(files('filemonitor-inotify.c'))
- else
- util_ss.add(files('filemonitor-stub.c'))
- endif
+ util_ss.add(files('filemonitor-stub.c'))
util_ss.add(when: 'CONFIG_LINUX', if_true: files('vfio-helpers.c'))
endif
2 changes: 2 additions & 0 deletions emulators/qemu70/files/qemu-ifdown.sample
@@ -0,0 +1,2 @@
#!/bin/sh
exec true
2 changes: 2 additions & 0 deletions emulators/qemu70/files/qemu-ifup.sample
@@ -0,0 +1,2 @@
#!/bin/sh
exec true

0 comments on commit 5618fbd

Please sign in to comment.