aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--emulators/Makefile1
-rw-r--r--emulators/qemu70/Makefile246
-rw-r--r--emulators/qemu70/distinfo3
-rw-r--r--emulators/qemu70/files/patch-block_export_fuse.c60
-rw-r--r--emulators/qemu70/files/patch-bsd-user_host_i386_host-signal.h12
-rw-r--r--emulators/qemu70/files/patch-bsd-user_host_x86__64_host-signal.h12
-rw-r--r--emulators/qemu70/files/patch-meson.build20
-rw-r--r--emulators/qemu70/files/patch-util_meson.build14
-rw-r--r--emulators/qemu70/files/qemu-ifdown.sample2
-rw-r--r--emulators/qemu70/files/qemu-ifup.sample2
-rw-r--r--emulators/qemu70/pkg-descr14
-rw-r--r--emulators/qemu70/pkg-descr-tools7
-rw-r--r--emulators/qemu70/pkg-message103
-rw-r--r--emulators/qemu70/pkg-plist179
-rw-r--r--emulators/qemu70/pkg-plist-tools50
15 files changed, 725 insertions, 0 deletions
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