git: 5618fbd15461 - main - emulators/qemu70: New port

From: Muhammad Moinur Rahman <bofh_at_FreeBSD.org>
Date: Thu, 08 Sep 2022 18:50:33 UTC
The branch main has been updated by bofh:

URL: https://cgit.FreeBSD.org/ports/commit/?id=5618fbd154618f2e297c6639741e303a8649c887

commit 5618fbd154618f2e297c6639741e303a8649c887
Author:     Muhammad Moinur Rahman <bofh@FreeBSD.org>
AuthorDate: 2022-09-08 18:49:08 +0000
Commit:     Muhammad Moinur Rahman <bofh@FreeBSD.org>
CommitDate: 2022-09-08 18:49:08 +0000

    emulators/qemu70: New port
    
    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.
---
 emulators/Makefile                                 |   1 +
 emulators/qemu70/Makefile                          | 246 +++++++++++++++++++++
 emulators/qemu70/distinfo                          |   3 +
 emulators/qemu70/files/patch-block_export_fuse.c   |  60 +++++
 .../files/patch-bsd-user_host_i386_host-signal.h   |  12 +
 .../patch-bsd-user_host_x86__64_host-signal.h      |  12 +
 emulators/qemu70/files/patch-meson.build           |  20 ++
 emulators/qemu70/files/patch-util_meson.build      |  14 ++
 emulators/qemu70/files/qemu-ifdown.sample          |   2 +
 emulators/qemu70/files/qemu-ifup.sample            |   2 +
 emulators/qemu70/pkg-descr                         |  14 ++
 emulators/qemu70/pkg-descr-tools                   |   7 +
 emulators/qemu70/pkg-message                       | 103 +++++++++
 emulators/qemu70/pkg-plist                         | 179 +++++++++++++++
 emulators/qemu70/pkg-plist-tools                   |  50 +++++
 15 files changed, 725 insertions(+)

diff --git a/emulators/Makefile b/emulators/Makefile
index ae843a24a94e..0bec792dd8d9 100644
--- a/emulators/Makefile
+++ b/emulators/Makefile
@@ -116,6 +116,7 @@
     SUBDIR += qemu-user-static
     SUBDIR += qemu-user-static-devel
     SUBDIR += qemu6
+    SUBDIR += qemu70
     SUBDIR += qmc2
     SUBDIR += quasi88
     SUBDIR += reicast
diff --git a/emulators/qemu70/Makefile b/emulators/qemu70/Makefile
new file mode 100644
index 000000000000..7dd97baa3cae
--- /dev/null
+++ b/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>
diff --git a/emulators/qemu70/distinfo b/emulators/qemu70/distinfo
new file mode 100644
index 000000000000..e40467f0d5ce
--- /dev/null
+++ b/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
diff --git a/emulators/qemu70/files/patch-block_export_fuse.c b/emulators/qemu70/files/patch-block_export_fuse.c
new file mode 100644
index 000000000000..5fbb0dd9a040
--- /dev/null
+++ b/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;
+     }
diff --git a/emulators/qemu70/files/patch-bsd-user_host_i386_host-signal.h b/emulators/qemu70/files/patch-bsd-user_host_i386_host-signal.h
new file mode 100644
index 000000000000..06a07c0f9425
--- /dev/null
+++ b/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>
diff --git a/emulators/qemu70/files/patch-bsd-user_host_x86__64_host-signal.h b/emulators/qemu70/files/patch-bsd-user_host_x86__64_host-signal.h
new file mode 100644
index 000000000000..1864eb788f03
--- /dev/null
+++ b/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>
diff --git a/emulators/qemu70/files/patch-meson.build b/emulators/qemu70/files/patch-meson.build
new file mode 100644
index 000000000000..e701a096e957
--- /dev/null
+++ b/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)')
diff --git a/emulators/qemu70/files/patch-util_meson.build b/emulators/qemu70/files/patch-util_meson.build
new file mode 100644
index 000000000000..590b1f5a0592
--- /dev/null
+++ b/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
diff --git a/emulators/qemu70/files/qemu-ifdown.sample b/emulators/qemu70/files/qemu-ifdown.sample
new file mode 100644
index 000000000000..89d9a9bff436
--- /dev/null
+++ b/emulators/qemu70/files/qemu-ifdown.sample
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec true
diff --git a/emulators/qemu70/files/qemu-ifup.sample b/emulators/qemu70/files/qemu-ifup.sample
new file mode 100644
index 000000000000..89d9a9bff436
--- /dev/null
+++ b/emulators/qemu70/files/qemu-ifup.sample
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec true
diff --git a/emulators/qemu70/pkg-descr b/emulators/qemu70/pkg-descr
new file mode 100644
index 000000000000..592b7660dd49
--- /dev/null
+++ b/emulators/qemu70/pkg-descr
@@ -0,0 +1,14 @@
+QEMU is a FAST! processor emulator using dynamic translation to achieve
+good emulation speed.
+QEMU has two operating modes:
+
+    * Full system emulation. In this mode, QEMU emulates a full system
+(for example a PC), including a processor and various peripherials.
+It can be used to launch different Operating Systems without rebooting
+the PC or to debug system code.
+    * User mode emulation (Linux host only). In this mode, QEMU can launch
+Linux processes compiled for one CPU on another CPU. It can be used to
+launch the Wine Windows API emulator or to ease cross-compilation and
+cross-debugging.
+
+As QEMU requires no host kernel patches to run, it is very safe and easy to use.
diff --git a/emulators/qemu70/pkg-descr-tools b/emulators/qemu70/pkg-descr-tools
new file mode 100644
index 000000000000..f1914609c286
--- /dev/null
+++ b/emulators/qemu70/pkg-descr-tools
@@ -0,0 +1,7 @@
+Miscellaneous tools that can be used without the rest of QEMU
+
+* qemu-img: QEMU disk image utility
+* qemu-io:  QEMU disk exerciser
+* qemu-nbd: QEMU disk network block device server
+
+WWW: http://wiki.qemu.org/Main_Page
diff --git a/emulators/qemu70/pkg-message b/emulators/qemu70/pkg-message
new file mode 100644
index 000000000000..54a7ebc05d6d
--- /dev/null
+++ b/emulators/qemu70/pkg-message
@@ -0,0 +1,103 @@
+[
+{ type: install
+  message: <<EOM
+FreeBSD host notes
+==================
+
+- Needs to set net.link.tap.user_open sysctl in order to use /dev/tap*
+  networking as non-root.  Don't forget to adjust device node permissions in
+  /etc/devfs.rules.
+
+- Expect timer problems when guest kernel HZ is > hosts.  The linux 2.6
+  kernel uses 1000 by default btw.  (changed to 250 later, and recent linux
+  kernels now no longer have a fixed HZ, aka `tickless kernel'...)
+  Enabling /dev/rtc doesn't seem to help either (not included since it needs
+  a patch to emulators/rtc.)
+
+- The -smb option (smb-export local dir to guest using the default
+  slirp networking) needs the samba port/package installed
+  in addition to qemu. (SAMBA knob.)
+
+- If you want to use usb devices connected to the host in the guest
+  yot can use usbredir over the network (see below); also unless you are
+  running qemu as root you then need to fix permissions for /dev/ugen*
+  device nodes: if you are on 5.x or later (devfs) put a rule in
+  /etc/devfs.rules, activate it in /etc/rc.conf and run /etc/rc.d/devfs
+  restart.  Example devfs.rules:
+
+	[ugen_ruleset=20]
+	add path 'ugen*' mode 660 group operator
+
+  corresponding rc.conf line:
+
+	devfs_system_ruleset="ugen_ruleset"
+
+- Still usb: since the hub is no longer attached to the uchi controller and
+  the wakeup mechanism, resume interrupt is not implemented yet linux guests
+  will suspend the bus, i.e. they wont see devices usb_add'ed after its
+  (linux') uhci module got loaded.  Workaround: either add devices before
+  linux loads the module or rmmod and modprobe it afterwards.  [Not sure
+  if this still applies to the new libusb host code used on recent
+  10-current.]
+
+- If you get repeated `atapi_poll called!' console messages with FreeBSD
+  guests or other weird cdrom problems then thats probably because the guest
+  has atapicam loaded, which for reasons still to be determined has problems
+  with qemu's now by default enabled cdrom dma. You can build the port with
+  CDROM_DMA disabled to disable it.  [Looks like this is fixed in recent
+  FreeBSD guest versions.]
+
+- If you build qemu wihout SDL and then get crashes running it try passing it
+  -nographic.  This should probably be default in that case...
+
+- qemu's network boot roms (-boot n) have a bug when bootfiles sizes are a
+  multiple of blksize, if this affects you (like with FreeBSD's /boot/pxeboot)
+  you can do like
+
+	cp /boot/pxeboot pxeboot-qemu && chmod +w pxeboot-qemu && echo >>pxeboot-qemu
+
+  and then use pxeboot-qemu.  Actually you need recent btx code
+  (from after 7.0 was released) because of the real mode boot
+  problem, so use at least pxeboot from there.  And I just did that
+  for the pxeboot extracted out of
+
+	ftp://ftp.freebsd.org/pub/FreeBSD/snapshots/200805/7.0-STABLE-200805-i386-bootonly.iso
+
+  and placed it here:
+
+	http://people.freebsd.org/~nox/qemu/pxeboot-qemu
+
+- If you use slirp (usernet, the default) and want to mount nfs into the guest
+  and you are not running qemu as root, then mountd(8) on the exporting box
+  needs to be run with -n in order to accept requests from ports >= 1024.
+
+- (not FreeBSD-specific:) There have been reports of qcow2 corruption with (at
+  least) win2k guests on recent kvm (which uses similar qcow2 code than qemu
+  now, see this thread:
+
+	http://lists.gnu.org/archive/html/qemu-devel/2009-02/msg00713.html -
+
+  the consensus on that thread seems to be that qcow(2) code has always been
+  experimental and you should use raw images if you want reliability; raw is
+  also usually faster.)  You should be able to migrate existing images to raw
+  using qemu-img(1)'s convert function; raw doesn't support advanced features
+  like snapshots tho.  [a few important qcow2 bugfixed have been committed in
+  the meantime so this _might_ be less of an issue now; and meanwhile there
+  also is the new qed format - I don't know how stable that one is.]
+
+- (also not FreeBSD-specific:)  It is recommended to pass raw images using the
+  new -drive syntax, specifying format=raw explicitly in order to avoid
+  malicious guests being able to exploit the format autodetection thats
+  otherwise getting used.  (Not that you should run malicious guests anyway,
+  but this eleminates at least a known attack vector.)
+
+- qemu now has improved physical cdrom support, but still there is at
+  least one known problem: you need to have the guest eject the disc if you
+  want to change it/take it out, or otherwise the guest may continue using
+  state (like size) of the old disc.  (You can also do like `change ide1-cd0
+  /dev/acd0' in the monitor after taking out the disc if a guest cannot eject
+  it itself.)
+
+EOM
+}
+]
diff --git a/emulators/qemu70/pkg-plist b/emulators/qemu70/pkg-plist
new file mode 100644
index 000000000000..00d0673675ba
--- /dev/null
+++ b/emulators/qemu70/pkg-plist
@@ -0,0 +1,179 @@
+%%CURL%%bin/elf2dmp
+%%BSDUSER%%%%NO_X86_TARGETS%%bin/qemu-arm
+bin/qemu-edid
+%%BSDUSER%%bin/qemu-i386
+bin/qemu-img
+bin/qemu-io
+%%GTK3%%bin/qemu-keymap
+bin/qemu-nbd
+bin/qemu-storage-daemon
+%%NO_X86_TARGETS%%bin/qemu-system-aarch64
+%%NO_X86_TARGETS%%bin/qemu-system-alpha
+%%NO_X86_TARGETS%%bin/qemu-system-avr
+%%NO_X86_TARGETS%%bin/qemu-system-arm
+%%NO_X86_TARGETS%%bin/qemu-system-cris
+%%NO_X86_TARGETS%%bin/qemu-system-hppa
+bin/qemu-system-i386
+%%NO_X86_TARGETS%%bin/qemu-system-m68k
+%%NO_X86_TARGETS%%bin/qemu-system-microblaze
+%%NO_X86_TARGETS%%bin/qemu-system-microblazeel
+%%NO_X86_TARGETS%%bin/qemu-system-mips
+%%NO_X86_TARGETS%%bin/qemu-system-mips64
+%%NO_X86_TARGETS%%bin/qemu-system-mips64el
+%%NO_X86_TARGETS%%bin/qemu-system-mipsel
+%%NO_X86_TARGETS%%bin/qemu-system-nios2
+%%NO_X86_TARGETS%%bin/qemu-system-or1k
+%%NO_X86_TARGETS%%bin/qemu-system-ppc
+%%NO_X86_TARGETS%%bin/qemu-system-ppc64
+%%NO_X86_TARGETS%%bin/qemu-system-riscv32
+%%NO_X86_TARGETS%%bin/qemu-system-riscv64
+%%NO_X86_TARGETS%%bin/qemu-system-rx
+%%NO_X86_TARGETS%%bin/qemu-system-s390x
+%%NO_X86_TARGETS%%bin/qemu-system-sh4
+%%NO_X86_TARGETS%%bin/qemu-system-sh4eb
+%%NO_X86_TARGETS%%bin/qemu-system-sparc
+%%NO_X86_TARGETS%%bin/qemu-system-sparc64
+%%NO_X86_TARGETS%%bin/qemu-system-tricore
+bin/qemu-system-x86_64
+%%NO_X86_TARGETS%%bin/qemu-system-xtensa
+%%NO_X86_TARGETS%%bin/qemu-system-xtensaeb
+%%BSDUSER%%bin/qemu-x86_64
+include/qemu-plugin.h
+%%PORTDOCS%%man/man1/qemu.1.gz
+%%PORTDOCS%%man/man1/qemu-img.1.gz
+%%PORTDOCS%%man/man7/qemu-block-drivers.7.gz
+%%PORTDOCS%%man/man7/qemu-cpu-models.7.gz
+%%PORTDOCS%%man/man8/qemu-nbd.8.gz
+%%PORTDOCS%%man/man8/qemu-pr-helper.8.gz
+%%PORTDOCS%%man/man7/qemu-qmp-ref.7.gz
+%%PORTDOCS%%man/man1/qemu-storage-daemon.1.gz
+%%PORTDOCS%%man/man7/qemu-storage-daemon-qmp-ref.7.gz
+@sample etc/qemu-ifup.sample
+@sample etc/qemu-ifdown.sample
+%%DATADIR%%/QEMU,tcx.bin
+%%DATADIR%%/QEMU,cgthree.bin
+%%DATADIR%%/bios-256k.bin
+%%DATADIR%%/bios-microvm.bin
+%%DATADIR%%/bios.bin
+%%DATADIR%%/canyonlands.dtb
+%%DATADIR%%/edk2-aarch64-code.fd
+%%DATADIR%%/edk2-arm-code.fd
+%%DATADIR%%/edk2-arm-vars.fd
+%%DATADIR%%/edk2-i386-code.fd
+%%DATADIR%%/edk2-i386-secure-code.fd
+%%DATADIR%%/edk2-i386-vars.fd
+%%DATADIR%%/edk2-licenses.txt
+%%DATADIR%%/edk2-x86_64-code.fd
+%%DATADIR%%/edk2-x86_64-secure-code.fd
+%%DATADIR%%/efi-e1000.rom
+%%DATADIR%%/efi-e1000e.rom
+%%DATADIR%%/efi-eepro100.rom
+%%DATADIR%%/efi-ne2k_pci.rom
+%%DATADIR%%/efi-pcnet.rom
+%%DATADIR%%/efi-rtl8139.rom
+%%DATADIR%%/efi-virtio.rom
+%%DATADIR%%/efi-vmxnet3.rom
+%%DATADIR%%/firmware/50-edk2-i386-secure.json
+%%DATADIR%%/firmware/50-edk2-x86_64-secure.json
+%%DATADIR%%/firmware/60-edk2-aarch64.json
+%%DATADIR%%/firmware/60-edk2-arm.json
+%%DATADIR%%/firmware/60-edk2-i386.json
+%%DATADIR%%/firmware/60-edk2-x86_64.json
+%%DATADIR%%/hppa-firmware.img
+%%DATADIR%%/keymaps/ar
+%%DATADIR%%/keymaps/bepo
+%%DATADIR%%/keymaps/cz
+%%DATADIR%%/keymaps/da
+%%DATADIR%%/keymaps/de
+%%DATADIR%%/keymaps/de-ch
+%%DATADIR%%/keymaps/en-gb
+%%DATADIR%%/keymaps/en-us
+%%DATADIR%%/keymaps/es
+%%DATADIR%%/keymaps/et
+%%DATADIR%%/keymaps/fi
+%%DATADIR%%/keymaps/fo
+%%DATADIR%%/keymaps/fr
+%%DATADIR%%/keymaps/fr-be
+%%DATADIR%%/keymaps/fr-ca
+%%DATADIR%%/keymaps/fr-ch
+%%DATADIR%%/keymaps/hr
+%%DATADIR%%/keymaps/hu
+%%DATADIR%%/keymaps/is
+%%DATADIR%%/keymaps/it
+%%DATADIR%%/keymaps/ja
+%%DATADIR%%/keymaps/lt
+%%DATADIR%%/keymaps/lv
+%%DATADIR%%/keymaps/mk
+%%DATADIR%%/keymaps/nl
+%%DATADIR%%/keymaps/no
+%%DATADIR%%/keymaps/pl
+%%DATADIR%%/keymaps/pt
+%%DATADIR%%/keymaps/pt-br
+%%DATADIR%%/keymaps/ru
+%%DATADIR%%/keymaps/sl
+%%DATADIR%%/keymaps/sv
+%%DATADIR%%/keymaps/th
+%%DATADIR%%/keymaps/tr
+%%DATADIR%%/linuxboot.bin
+%%LINUXBOOT_DMA%%%%DATADIR%%/linuxboot_dma.bin
+%%DATADIR%%/multiboot.bin
+%%DATADIR%%/multiboot_dma.bin
+%%DATADIR%%/npcm7xx_bootrom.bin
+%%DATADIR%%/openbios-ppc
+%%DATADIR%%/openbios-sparc32
+%%DATADIR%%/openbios-sparc64
+%%DATADIR%%/opensbi-riscv32-generic-fw_dynamic.bin
+%%DATADIR%%/opensbi-riscv64-generic-fw_dynamic.bin
+%%DATADIR%%/palcode-clipper
+%%DATADIR%%/petalogix-ml605.dtb
+%%DATADIR%%/pxe-e1000.rom
+%%DATADIR%%/pxe-eepro100.rom
+%%DATADIR%%/pxe-ne2k_pci.rom
+%%DATADIR%%/pxe-rtl8139.rom
+%%DATADIR%%/pxe-pcnet.rom
+%%DATADIR%%/pxe-virtio.rom
+%%DATADIR%%/qboot.rom
+%%DATADIR%%/qemu-nsis.bmp
+%%DATADIR%%/qemu_vga.ndrv
+%%DATADIR%%/s390-ccw.img
+%%DATADIR%%/s390-netboot.img
+%%DATADIR%%/slof.bin
+%%DATADIR%%/u-boot-sam460-20100605.bin
+%%DATADIR%%/vgabios.bin
+%%DATADIR%%/vgabios-ati.bin
+%%DATADIR%%/vgabios-cirrus.bin
+%%DATADIR%%/vgabios-qxl.bin
+%%DATADIR%%/vgabios-stdvga.bin
+%%DATADIR%%/vgabios-virtio.bin
+%%DATADIR%%/vgabios-vmware.bin
+%%DATADIR%%/sgabios.bin
+%%DATADIR%%/skiboot.lid
+%%DATADIR%%/trace-events-all
+%%DATADIR%%/petalogix-s3adsp1800.dtb
+%%DATADIR%%/bamboo.dtb
+%%DATADIR%%/kvmvapic.bin
+%%DATADIR%%/u-boot.e500
+%%DATADIR%%/pvh.bin
+%%DATADIR%%/vgabios-bochs-display.bin
+%%DATADIR%%/vgabios-ramfb.bin
+%%DATADIR%%/vof-nvram.bin
+%%DATADIR%%/vof.bin
+share/icons/hicolor/128x128/apps/qemu.png
+share/icons/hicolor/16x16/apps/qemu.png
+share/icons/hicolor/24x24/apps/qemu.png
+share/icons/hicolor/256x256/apps/qemu.png
+share/icons/hicolor/32x32/apps/qemu.bmp
+share/icons/hicolor/32x32/apps/qemu.png
+share/icons/hicolor/48x48/apps/qemu.png
+share/icons/hicolor/512x512/apps/qemu.png
+share/icons/hicolor/64x64/apps/qemu.png
+share/icons/hicolor/scalable/apps/qemu.svg
+share/applications/qemu.desktop
+%%GTK3%%share/locale/bg/LC_MESSAGES/qemu.mo
+%%GTK3%%share/locale/de_DE/LC_MESSAGES/qemu.mo
+%%GTK3%%share/locale/fr_FR/LC_MESSAGES/qemu.mo
+%%GTK3%%share/locale/hu/LC_MESSAGES/qemu.mo
+%%GTK3%%share/locale/it/LC_MESSAGES/qemu.mo
+%%GTK3%%share/locale/sv/LC_MESSAGES/qemu.mo
+%%GTK3%%share/locale/tr/LC_MESSAGES/qemu.mo
+%%GTK3%%share/locale/zh_CN/LC_MESSAGES/qemu.mo
diff --git a/emulators/qemu70/pkg-plist-tools b/emulators/qemu70/pkg-plist-tools
new file mode 100644
index 000000000000..42b2a0ee3aeb
--- /dev/null
+++ b/emulators/qemu70/pkg-plist-tools
@@ -0,0 +1,50 @@
+bin/qemu-edid
+bin/qemu-img
+bin/qemu-io
+bin/qemu-nbd
+bin/qemu-storage-daemon
+include/qemu-plugin.h
+%%PORTDOCS%%man/man1/qemu.1.gz
+%%PORTDOCS%%man/man1/qemu-img.1.gz
+%%PORTDOCS%%man/man7/qemu-block-drivers.7.gz
+%%PORTDOCS%%man/man7/qemu-cpu-models.7.gz
+%%PORTDOCS%%man/man8/qemu-nbd.8.gz
+%%PORTDOCS%%man/man8/qemu-pr-helper.8.gz
+%%PORTDOCS%%man/man7/qemu-qmp-ref.7.gz
+%%PORTDOCS%%man/man1/qemu-storage-daemon.1.gz
+%%PORTDOCS%%man/man7/qemu-storage-daemon-qmp-ref.7.gz
+%%DATADIR%%/keymaps/ar
+%%DATADIR%%/keymaps/bepo
+%%DATADIR%%/keymaps/cz
+%%DATADIR%%/keymaps/da
+%%DATADIR%%/keymaps/de
+%%DATADIR%%/keymaps/de-ch
+%%DATADIR%%/keymaps/en-gb
+%%DATADIR%%/keymaps/en-us
+%%DATADIR%%/keymaps/es
+%%DATADIR%%/keymaps/et
+%%DATADIR%%/keymaps/fi
+%%DATADIR%%/keymaps/fo
+%%DATADIR%%/keymaps/fr
+%%DATADIR%%/keymaps/fr-be
+%%DATADIR%%/keymaps/fr-ca
+%%DATADIR%%/keymaps/fr-ch
+%%DATADIR%%/keymaps/hr
+%%DATADIR%%/keymaps/hu
+%%DATADIR%%/keymaps/is
+%%DATADIR%%/keymaps/it
+%%DATADIR%%/keymaps/ja
+%%DATADIR%%/keymaps/lt
+%%DATADIR%%/keymaps/lv
+%%DATADIR%%/keymaps/mk
+%%DATADIR%%/keymaps/nl
+%%DATADIR%%/keymaps/no
+%%DATADIR%%/keymaps/pl
+%%DATADIR%%/keymaps/pt
+%%DATADIR%%/keymaps/pt-br
+%%DATADIR%%/keymaps/ru
+%%DATADIR%%/keymaps/sl
+%%DATADIR%%/keymaps/sv
+%%DATADIR%%/keymaps/th
+%%DATADIR%%/keymaps/tr
+%%DATADIR%%/trace-events-all