git: 9ef87f0830a3 - main - emulators/virtualbox-ose{,-kmod,-nox11}-70: Repocopy from emulators/virtualbox-ose{,-kmod,-nox11}

From: Vladimir Druzenko <vvd_at_FreeBSD.org>
Date: Sun, 02 Feb 2025 23:29:08 UTC
The branch main has been updated by vvd:

URL: https://cgit.FreeBSD.org/ports/commit/?id=9ef87f0830a3c0d08f51082592e84d2116726d6a

commit 9ef87f0830a3c0d08f51082592e84d2116726d6a
Author:     Vladimir Druzenko <vvd@FreeBSD.org>
AuthorDate: 2025-02-02 22:50:49 +0000
Commit:     Vladimir Druzenko <vvd@FreeBSD.org>
CommitDate: 2025-02-02 22:54:38 +0000

    emulators/virtualbox-ose{,-kmod,-nox11}-70: Repocopy from emulators/virtualbox-ose{,-kmod,-nox11}
    
    PR:     271146
---
 emulators/Makefile                                 |    3 +
 emulators/virtualbox-ose-70/Makefile               |  431 ++++++
 emulators/virtualbox-ose-70/distinfo               |    7 +
 .../virtualbox-ose-70/files/extrapatch-Config.kmk  |   11 +
 ...h-src-VBox-HostDrivers-Support-freebsd-Makefile |   11 +
 .../files/extrapatch-vboximg-Config.kmk            |   11 +
 emulators/virtualbox-ose-70/files/patch-Config.kmk |  234 +++
 emulators/virtualbox-ose-70/files/patch-configure  |  126 ++
 .../files/patch-include-iprt-x86.h                 |   19 +
 .../files/patch-include_VBox_com_array.h           |   36 +
 .../files/patch-include_iprt_string.h              |   14 +
 ...-Additions-common-VBoxGuest-VBoxGuest-freebsd.c |  290 ++++
 ...Box-Additions-common-VBoxGuest-freebsd-Makefile |   27 +
 ...itions-common-VBoxGuest-freebsd-files_vboxguest |   34 +
 ...-VBox-Additions-x11-Installer-98vboxadd-xclient |   17 +
 ...VBox-Additions-x11-Installer-vboxclient.desktop |   10 +
 ...h-src-VBox-Devices-Network-slirp-bsd-sys-mbuf.h |   12 +
 ...ch-src-VBox-HostDrivers-VBoxNetAdp-Makefile.kmk |   20 +
 ...HostDrivers-VBoxNetFlt-freebsd-files_vboxnetflt |   10 +
 .../files/patch-src-VBox-Installer-Makefile.kmk    |   14 +
 .../files/patch-src-VBox-Installer-freebsd-VBox.sh |   77 +
 ...h-src-VBox-Installer-freebsd-virtualbox.desktop |   10 +
 ...tch-src-VBox-Main-src-server-VirtualBoxImpl.cpp |   11 +
 .../patch-src-VBox-Main-webservice-Makefile.kmk    |   39 +
 .../files/patch-src-VBox-Runtime-Makefile.kmk      |   14 +
 ...untime-r0drv-freebsd-sleepqueue-r0drv-freebsd.h |   39 +
 ...itions_common_VBoxService_VBoxServiceVMInfo.cpp |   71 +
 ...tch-src_VBox_Additions_common_pam_pam__vbox.cpp |   20 +
 .../patch-src_VBox_Additions_freebsd_Makefile      |   38 +
 .../patch-src_VBox_Additions_freebsd_Makefile.kmk  |   31 +
 ...src_VBox_Additions_freebsd_drm_vboxvideo__drm.c |   17 +
 ...x_Additions_freebsd_mount__vboxvfs_Makefile.kmk |   26 +
 ...ditions_freebsd_mount__vboxvfs_mount__vboxvfs.8 |   56 +
 ...ditions_freebsd_mount__vboxvfs_mount__vboxvfs.c |  171 +++
 ...src_VBox_Additions_freebsd_vboxvfs_Makefile.kmk |   50 +
 ...patch-src_VBox_Additions_freebsd_vboxvfs_bcmp.c |   12 +
 ...ch-src_VBox_Additions_freebsd_vboxvfs_vboxvfs.h |  428 ++++++
 ..._VBox_Additions_freebsd_vboxvfs_vboxvfs__prov.c | 1015 +++++++++++++
 ...Box_Additions_freebsd_vboxvfs_vboxvfs__vfsops.c |  645 ++++++++
 ...VBox_Additions_freebsd_vboxvfs_vboxvfs__vnops.c | 1543 ++++++++++++++++++++
 ...h-src_VBox_Additions_x11_VBoxClient_logging.cpp |   10 +
 ...h-src_VBox_Additions_x11_vboxmouse_Makefile.kmk |   29 +
 ...h-src_VBox_Additions_x11_vboxvideo_Makefile.kmk |   15 +
 ...s_x11_x11include_xproto-7.0.18_X11_Xfuncproto.h |  230 +++
 .../files/patch-src_VBox_Debugger_Makefile.kmk     |   10 +
 ...c_VBox_Devices_Graphics_DevVGA-SVGA3d-glLdr.cpp |   29 +
 ...src_VBox_Devices_Graphics_DevVGA-SVGA3d-glLdr.h |   11 +
 ...src_VBox_Devices_Graphics_DevVGA-SVGA3d-ogl.cpp |   38 +
 .../files/patch-src_VBox_Devices_Makefile.kmk      |   44 +
 .../patch-src_VBox_Devices_PC_ipxe_Makefile.kmk    |   29 +
 ...src_VBox_Devices_USB_USBProxyDevice-freebsd.cpp |   11 +
 .../files/patch-src_VBox_ExtPacks_VNC_VBoxVNC.cpp  |   58 +
 ...rc_VBox_Frontends_VBoxManage_VBoxManageHelp.cpp |   43 +
 ...Box_Frontends_VBoxManage_VBoxManageModifyVM.cpp |   29 +
 ...atch-src_VBox_Frontends_VirtualBox_Makefile.kmk |   18 +
 .../patch-src_VBox_HostDrivers_Support_SUPDrv.cpp  |   11 +
 ...h-src_VBox_HostDrivers_Support_SUPDrvInternal.h |   11 +
 ...h-src_VBox_HostDrivers_Support_freebsd_Makefile |   30 +
 ...ox_HostDrivers_Support_freebsd_SUPDrv-freebsd.c |  224 +++
 ...VBox_HostDrivers_Support_freebsd_files__vboxdrv |   30 +
 ...rc_VBox_HostDrivers_VBoxNetAdp_freebsd_Makefile |   11 +
 ...Drivers_VBoxNetAdp_freebsd_VBoxNetAdp-freebsd.c |  147 ++
 ...ch-src_VBox_HostDrivers_VBoxNetFlt_Makefile.kmk |   11 +
 ...rc_VBox_HostDrivers_VBoxNetFlt_freebsd_Makefile |   11 +
 ...Drivers_VBoxNetFlt_freebsd_VBoxNetFlt-freebsd.c |  471 ++++++
 ...h-src_VBox_HostDrivers_adpctl_VBoxNetAdpCtl.cpp |   11 +
 .../files/patch-src_VBox_Main_Makefile.kmk         |   10 +
 .../files/patch-src_VBox_Main_include_HostPower.h  |   20 +
 .../patch-src_VBox_Main_src-server_HostImpl.cpp    |   11 +
 ..._Main_src-server_freebsd_PerformanceFreeBSD.cpp |   24 +
 ...src_VBox_NetworkServices_Dhcpd_VBoxNetDhcpd.cpp |   11 +
 .../patch-src_VBox_RDP_client-1.8.4_Makefile.kmk   |   13 +
 ...Box_Runtime_r0drv_freebsd_alloc-r0drv-freebsd.c |   73 +
 ...ox_Runtime_r0drv_freebsd_assert-r0drv-freebsd.c |   29 +
 ...ox_Runtime_r0drv_freebsd_memobj-r0drv-freebsd.c |  412 ++++++
 ...ime_r0drv_freebsd_memuserkernel-r0drv-freebsd.c |   22 +
 ...c_VBox_Runtime_r0drv_freebsd_mp-r0drv-freebsd.c |   92 ++
 ..._Runtime_r0drv_freebsd_semevent-r0drv-freebsd.c |   53 +
 ...ime_r0drv_freebsd_semeventmulti-r0drv-freebsd.c |   73 +
 ...time_r0drv_freebsd_semfastmutex-r0drv-freebsd.c |   59 +
 ..._Runtime_r0drv_freebsd_semmutex-r0drv-freebsd.c |   80 +
 ..._Runtime_r0drv_freebsd_spinlock-r0drv-freebsd.c |   30 +
 ...VBox_Runtime_r0drv_freebsd_the-freebsd-kernel.h |   47 +
 ...ox_Runtime_r0drv_freebsd_thread-r0drv-freebsd.c |   91 ++
 ...x_Runtime_r0drv_freebsd_thread2-r0drv-freebsd.c |   35 +
 ...VBox_Runtime_r0drv_freebsd_time-r0drv-freebsd.c |   43 +
 ...Box_Runtime_r0drv_freebsd_timer-r0drv-freebsd.c |   68 +
 ...c_VBox_Runtime_r3_freebsd_systemmem-freebsd.cpp |   39 +
 ...Box_Runtime_r3_posix_process-creation-posix.cpp |   38 +
 ...VBox_VMM_VMMR3_PDMAsyncCompletionFileNormal.cpp |   59 +
 .../files/patch-src_VBox_VMM_VMMR3_PGMPhys.cpp     |   11 +
 .../files/patch-src_libs_xpcom18a4_Makefile.kmk    |   11 +
 ...ibs_xpcom18a4_nsprpub_pr_src_pthreads_ptsynch.c |   20 +
 ...h-src_libs_xpcom18a4_xpcom_io_nsLocalFileUnix.h |   17 +
 emulators/virtualbox-ose-70/files/pkg-message.in   |  120 ++
 emulators/virtualbox-ose-70/files/vboxheadless.in  |  140 ++
 emulators/virtualbox-ose-70/files/vboxinit.in      |   91 ++
 emulators/virtualbox-ose-70/files/vboxwatchdog.in  |   51 +
 emulators/virtualbox-ose-70/files/vboxwebsrv.in    |   47 +
 emulators/virtualbox-ose-70/pkg-descr              |    8 +
 emulators/virtualbox-ose-70/pkg-plist              |  616 ++++++++
 emulators/virtualbox-ose-kmod-70/Makefile          |  112 ++
 emulators/virtualbox-ose-kmod-70/distinfo          |    3 +
 .../virtualbox-ose-kmod-70/files/pkg-message.in    |   10 +
 emulators/virtualbox-ose-kmod-70/files/vboxnet.in  |   67 +
 emulators/virtualbox-ose-kmod-70/pkg-descr         |    5 +
 emulators/virtualbox-ose-kmod-70/pkg-plist         |    6 +
 emulators/virtualbox-ose-nox11-70/Makefile         |   11 +
 108 files changed, 10000 insertions(+)

diff --git a/emulators/Makefile b/emulators/Makefile
index 6094d34a3f08..38474646ade9 100644
--- a/emulators/Makefile
+++ b/emulators/Makefile
@@ -156,14 +156,17 @@
     SUBDIR += vgba-bin
     SUBDIR += vice
     SUBDIR += virtualbox-ose
+    SUBDIR += virtualbox-ose-70
     SUBDIR += virtualbox-ose-additions
     SUBDIR += virtualbox-ose-additions-legacy
     SUBDIR += virtualbox-ose-additions-nox11
     SUBDIR += virtualbox-ose-additions-nox11-legacy
     SUBDIR += virtualbox-ose-kmod
+    SUBDIR += virtualbox-ose-kmod-70
     SUBDIR += virtualbox-ose-kmod-legacy
     SUBDIR += virtualbox-ose-legacy
     SUBDIR += virtualbox-ose-nox11
+    SUBDIR += virtualbox-ose-nox11-70
     SUBDIR += virtualbox-ose-nox11-legacy
     SUBDIR += visualboyadvance-m
     SUBDIR += vmips
diff --git a/emulators/virtualbox-ose-70/Makefile b/emulators/virtualbox-ose-70/Makefile
new file mode 100644
index 000000000000..fdd678179189
--- /dev/null
+++ b/emulators/virtualbox-ose-70/Makefile
@@ -0,0 +1,431 @@
+PORTNAME=	virtualbox-ose
+DISTVERSION=	6.1.50
+PORTREVISION?=	8
+CATEGORIES=	emulators
+MASTER_SITES=	https://download.virtualbox.org/virtualbox/${DISTVERSION}/:src \
+		LOCAL/bofh/emulators/virtualbox-ose:docs
+DISTFILES=	VirtualBox-${DISTVERSION}${EXTRACT_SUFX}:src \
+		VirtualBox-docs-${DISTVERSION}${EXTRACT_SUFX}:docs
+EXTRACT_ONLY=	VirtualBox-${DISTVERSION}${EXTRACT_SUFX} \
+		VirtualBox-docs-${DISTVERSION}${EXTRACT_SUFX}
+
+MAINTAINER=	vbox@FreeBSD.org
+COMMENT=	General-purpose full virtualizer for x86 hardware
+WWW=		https://www.virtualbox.org/
+
+LICENSE=	GPLv2
+LICENSE_FILE=	${WRKSRC}/COPYING
+
+ONLY_FOR_ARCHS=	amd64
+
+BUILD_DEPENDS=	gtar:archivers/gtar \
+		kmk:devel/kBuild \
+		libIDL-config-2:devel/libIDL \
+		yasm:devel/yasm \
+		xsltproc:textproc/libxslt
+LIB_DEPENDS=	libpng.so:graphics/png \
+		libcurl.so:ftp/curl
+RUN_DEPENDS=	${LOCALBASE}/etc/rc.d/vboxnet:emulators/virtualbox-ose-kmod
+
+USES=		compiler:c++14-lang cpe gnome iconv pkgconfig ssl tar:bzip2
+CPE_VENDOR=	oracle
+CPE_PRODUCT=	vm_virtualbox
+USE_GNOME=	libxml2
+USE_RC_SUBR=	vboxheadless vboxwatchdog
+
+HAS_CONFIGURE=		yes
+CONFIGURE_ARGS=		--disable-java --passive-mesa --disable-docs
+CONFIGURE_ARGS+=	--with-gcc="${CC}" --with-g++="${CXX}"
+
+CONFLICTS_INSTALL=	virtualbox-ose-legacy \
+			virtualbox-ose-nox11-legacy \
+			virtualbox-ose-70 \
+			virtualbox-ose-nox11-70
+
+PORTSCOUT=	limit:^6\.
+SUB_FILES=	pkg-message
+SUB_LIST=	VBOXDIR=${VBOX_DIR} \
+		VBOX_ETC=${VBOX_ETC} \
+		VBOXGROUP=${VBOXGROUP} \
+		VBOXUSER=${VBOXUSER} \
+		VBOXWSUSER=${VBOXWSUSER}
+
+WRKSRC=		${WRKDIR}/VirtualBox-${DISTVERSION}
+
+VBOXUSER?=	vboxusers
+VBOXWSUSER?=	vboxusers
+VBOXGROUP?=	vboxusers
+USERS=		${VBOXUSER}
+GROUPS=		${VBOXGROUP}
+VBOX_DIR=	${PREFIX}/${VBOX_DIR_REL}
+VBOX_DIR_REL=	lib/virtualbox
+VBOX_ETC=	${PREFIX}/etc/vbox
+VBOX_LINKS=	VBoxVRDP
+VBOX_PROGS=	VBoxAutostart VBoxBalloonCtrl VBoxBugReport VBoxHeadless \
+		VBoxManage
+VBOX_UTILS=	VBoxExtPackHelperApp VBoxNetAdpCtl VBoxNetDHCP VBoxNetNAT \
+		VBoxSVC VBoxXPCOMIPCD
+
+PLIST_SUB=	GUEST_VER=${DISTVERSION} \
+		PYTHON_VERU=${PYTHON_VER:S/./_/}${PYTHON_ABIVER} \
+		VBOXGROUP=${VBOXGROUP}
+
+SLAVE_PORT?=	no
+
+OPTIONS_DEFINE=		AIO ALSA DBUS DEBUG DOCS GUESTADDITIONS NLS OPUS PULSEAUDIO \
+			PYTHON QT5 R0LOGGING UDPTUNNEL VBOXIMG VDE VNC WEBSERVICE VPX X11
+OPTIONS_DEFAULT=	AIO DBUS QT5 UDPTUNNEL VNC WEBSERVICE X11
+.if ${SLAVE_PORT} == no
+OPTIONS_DEFAULT+=	PYTHON
+.endif
+# Since version 6.1.24 pulseaudio is broken at runtime, preventing
+# virtual machines from starting if configured to use it.
+OPTIONS_EXCLUDE+=	PULSEAUDIO
+OPTIONS_SUB=		yes
+
+AIO_DESC=		Enable Asyncronous IO support (check pkg-message)
+DEBUG_DESC=		Debug symbols, additional logs and assertions
+GUESTADDITIONS_DESC=	Build with Guest Additions
+NLS_DESC=		Native language support (requires QT5)
+OPUS_DESC=		Use libvpx for audio recording (requires VPX)
+QT5_DESC=		Build with QT5 frontend (requires X11)
+R0LOGGING_DESC=		Enable R0 logging (requires DEBUG)
+UDPTUNNEL_DESC=		Build with UDP tunnel support
+VBOXIMG_DESC=		Build vboximg-mount (requires fuse-libs)
+VDE_DESC=		Build with VDE support
+VNC_DESC=		Build with VNC support
+VPX_DESC=		Use libvpx for video recording
+WEBSERVICE_DESC=	Build Webservice
+
+ALSA_LIB_DEPENDS=	libasound.so:audio/alsa-lib
+ALSA_CONFIGURE_OFF=	--disable-alsa
+DBUS_LIB_DEPENDS=	libdbus-1.so:devel/dbus
+DBUS_CONFIGURE_OFF=	--disable-dbus
+DEBUG_CONFIGURE_ON=	--build-debug
+NLS_IMPLIES=		QT5
+OPUS_IMPLIES=		VPX
+OPUS_LIB_DEPENDS=	libopus.so:audio/opus
+OPUS_CONFIGURE_OFF=	--disable-libopus
+PULSEAUDIO_LIB_DEPENDS=	libpulse.so:audio/pulseaudio
+PULSEAUDIO_CONFIGURE_OFF=	--disable-pulse
+PYTHON_USES=		python
+PYTHON_USES_OFF=	python:build
+PYTHON_USE=		PYTHON=distutils,noegginfo,noflavors
+PYTHON_CONFIGURE_OFF=	--disable-python
+PYTHON_VARS=		pydistutils_pkgname=vboxapi pydistutils_pkgversion=1.0
+QT5_IMPLIES=		X11
+QT5_USES=		gl qmake:no_env qt:5 xorg
+QT5_USE=		QT=buildtools:build,core,dbus,gui,linguisttools:build,opengl \
+			QT=printsupport,widgets,x11extras XORG=xcb GL=gl
+QT5_CONFIGURE_ON=	--enable-qt5
+QT5_CONFIGURE_OFF=	--disable-qt
+R0LOGGING_IMPLIES=	DEBUG
+UDPTUNNEL_CONFIGURE_OFF=	--disable-udptunnel
+VBOXIMG_LIB_DEPENDS=	libfuse.so.2:filesystems/fusefs-libs
+VDE_RUN_DEPENDS=	vde_switch:net/vde2
+VDE_CONFIGURE_ON=	--enable-vde
+VNC_LIB_DEPENDS=	libvncserver.so:net/libvncserver
+VNC_CONFIGURE_ON=	--enable-vnc
+VPX_LIB_DEPENDS=	libvpx.so:multimedia/libvpx
+VPX_CONFIGURE_OFF=	--disable-libvpx
+WEBSERVICE_BUILD_DEPENDS=	soapcpp2:devel/gsoap
+X11_USES=		sdl xorg
+X11_USE=		SDL=sdl XORG=x11,xcursor,xext,xinerama,xmu,xorgproto,xt
+X11_CONFIGURE_OFF=	--build-headless
+
+ENV=
+.export ENV
+
+.include <bsd.port.options.mk>
+
+.if ${SLAVE_PORT} == no
+CONFLICTS_INSTALL+=	virtualbox-ose-nox11
+.else
+CONFLICTS_INSTALL+=	virtualbox-ose
+.endif
+
+.if ${PORT_OPTIONS:MDEBUG}
+KMK_BUILDTYPE=	debug
+KMK_FLAGS+=	BUILD_TYPE=debug
+.else
+KMK_BUILDTYPE=	release
+.endif
+
+.if ${PORT_OPTIONS:MGUESTADDITIONS}
+GUESTADDITIONS=			VBoxGuestAdditions_${DISTVERSION}.iso
+DISTFILES+=			${GUESTADDITIONS}:src
+LICENSE+=			Additions
+LICENSE_COMB=			multi
+LICENSE_NAME_Additions=		Guest Additions
+LICENSE_PERMS_Additions=	auto-accept
+LICENSE_DISTFILES_Additions=	${GUESTADDITIONS}
+.endif
+
+.if ${PORT_OPTIONS:MQT5}
+PLIST_SUB+=	QT=""
+VBOX_PROGS+=	VirtualBox VirtualBoxVM
+VBOX_UTILS+=	VBoxTestOGL
+VBOX_WITH_QT=	1
+.else
+PLIST_SUB+=	QT="@comment "
+.endif
+
+.if ${PORT_OPTIONS:MWEBSERVICE}
+USE_RC_SUBR+=	vboxinit vboxwebsrv
+VBOX_LINKS+=	vboxwebsrv
+VBOX_UTILS+=	vboxwebsrv webtest
+.endif
+
+.if ${PORT_OPTIONS:MX11}
+VBOX_PROGS+=	VBoxSDL
+.endif
+
+.if ${PORT_OPTIONS:MPYTHON} || ${PORT_OPTIONS:MWEBSERVICE}
+PLIST_SUB+=	SDK=""
+.else
+PLIST_SUB+=	SDK="@comment "
+.endif
+
+.if ${PORT_OPTIONS:MVBOXIMG}
+EXTRA_PATCHES+=	${PATCHDIR}/extrapatch-vboximg-Config.kmk
+VBOX_UTILS+=	vboximg-mount
+PLIST_SUB+=	VBOXIMG=""
+.else
+PLIST_SUB+=	VBOXIMG="@comment "
+.endif
+
+KMK_ARCH=	freebsd.${ARCH}
+PLIST_SUB+=	ARCH="${KMK_ARCH}"
+
+KMK_BUILDDIR=	${WRKSRC}/out/${KMK_ARCH}/${KMK_BUILDTYPE}
+KMK_CONFIG=	VBOX_LIBPATH_X11=${LOCALBASE} VBOX_FREEBSD_SRC=${SRC_BASE}/sys
+KMK_FLAGS+=	-j${MAKE_JOBS_NUMBER}
+
+.include <bsd.port.pre.mk>
+
+.if ${CHOSEN_COMPILER_TYPE} == clang
+# 1) llvm10 in FreeBSD before r364284 miscompiles virtualbox 6.1 causing errors.
+# 2) llvm15 in FreeBSD miscompiles virtualbox 6.1 causing errors: PR#270189.
+# Force llvm from ports.
+.if ${OPSYS} == FreeBSD
+# USES must be before .include <bsd.port.pre.mk>, but CHOSEN_COMPILER_TYPE must be after.
+# This is a workaround with possibility to define different llvm via VBOX_LLVM_VER in make.conf.
+#USES+=		llvm:min=11,max=14
+#CC=		clang${LLVM_VERSION}
+#CXX=		clang++${LLVM_VERSION}
+BUILD_DEPENDS+=	clang${VBOX_LLVM_VER}:devel/llvm${VBOX_LLVM_VER}
+CC=		clang${VBOX_LLVM_VER}
+CXX=		clang++${VBOX_LLVM_VER}
+.if ${LLVM_DEFAULT} < 11 || ${LLVM_DEFAULT} > 14
+VBOX_LLVM_VER?=	14
+.else
+VBOX_LLVM_VER?=	${LLVM_DEFAULT}
+.endif
+.endif
+PATCH_DEPENDS+=	${LOCALBASE}/share/kBuild/tools/GXX3.kmk:devel/kBuild
+.endif
+
+.if ${PYTHON_MAJOR_VER} >= 3
+PLIST_SUB+=	PYTHON_PYCDIR=/__pycache__/ \
+		PYTHON_PYCEXT=.cpython-${PYTHON_SUFFIX}.pyc
+.else
+PLIST_SUB+=	PYTHON_PYCDIR=/ \
+		PYTHON_PYCEXT=.pyc
+.endif
+
+.if ${SSL_DEFAULT} != base
+CONFIGURE_ARGS+=	--with-openssl-dir="${OPENSSLBASE}"
+.endif
+
+post-patch:
+	@${ECHO_CMD} 'VBOX_PATH_APP_PRIVATE_ARCH = ${VBOX_DIR}' > \
+	    ${WRKSRC}/LocalConfig.kmk
+	@${ECHO_CMD} 'VBOX_PATH_DOCBOOK = ${DBKXSLDIR}' >> \
+	    ${WRKSRC}/LocalConfig.kmk
+	@${ECHO_CMD} 'VBOX_PATH_DOCBOOK_DTD = ${DBKXMLDIR}' >> \
+	    ${WRKSRC}/LocalConfig.kmk
+	@${ECHO_CMD} 'VBOX_PATH_SHARED_LIBS = ${VBOX_DIR}' >> \
+	    ${WRKSRC}/LocalConfig.kmk
+	# Please keep this even if using Clang to avoid repeated regressions.
+	# PR 245048
+	@${ECHO_CMD} "VBOX_WITH_RUNPATH = ${_GCC_RUNTIME:D${_GCC_RUNTIME}\:}${VBOX_DIR}" >> \
+	    ${WRKSRC}/LocalConfig.kmk
+	@${ECHO_CMD} 'VBOX_PATH_APP_PRIVATE = ${DATADIR}' >> \
+	    ${WRKSRC}/LocalConfig.kmk
+	@${ECHO_CMD} 'VBOX_PATH_APP_DOCS = ${DOCSDIR}' >> ${WRKSRC}/LocalConfig.kmk
+.if ${SSL_DEFAULT} != base
+	@${ECHO_CMD} 'VBOX_WITH_ALT_HASH_CODE = 1' >> ${WRKSRC}/LocalConfig.kmk
+.endif
+	@${ECHO_CMD} 'VBOX_WITH_EXTPACK_VBOXDTRACE =' >> ${WRKSRC}/LocalConfig.kmk
+	@${ECHO_CMD} 'VBOX_WITH_INSTALLER = 1' >> ${WRKSRC}/LocalConfig.kmk
+	@${ECHO_CMD} 'VBOX_WITH_VBOXDRV =' >> ${WRKSRC}/LocalConfig.kmk
+	@${ECHO_CMD} 'VBOX_WITH_TESTCASES =' >> ${WRKSRC}/LocalConfig.kmk
+	@${ECHO_CMD} 'SDK_VBOX_LIBPNG_INCS = ${PREFIX}/include/libpng' >> \
+	    ${WRKSRC}/LocalConfig.kmk
+	@${ECHO_CMD} 'SDK_VBOX_LIBPNG_LIBS = png' >> ${WRKSRC}/LocalConfig.kmk
+	@${ECHO_CMD} 'VBOX_WITH_ADDITIONS =' >> ${WRKSRC}/LocalConfig.kmk
+	@${ECHO_CMD} 'VBOX_WITH_DRAG_AND_DROP = ${VBOX_WITH_QT}' >> \
+	    ${WRKSRC}/LocalConfig.kmk
+	@${ECHO_CMD} 'VBOX_WITH_DRAG_AND_DROP_GH = ${VBOX_WITH_QT}' >> \
+	    ${WRKSRC}/LocalConfig.kmk
+	@${ECHO_CMD} 'VBOX_WITH_VALIDATIONKIT =' >> ${WRKSRC}/LocalConfig.kmk
+	@${ECHO_CMD} 'VBOX_WITH_X11_ADDITIONS =' >> ${WRKSRC}/LocalConfig.kmk
+.if ${PORT_OPTIONS:MR0LOGGING}
+	@${ECHO_CMD} 'VBOX_WITH_R0_LOGGING = 1' >> ${WRKSRC}/LocalConfig.kmk
+.endif
+.if ${PORT_OPTIONS:MWEBSERVICE}
+	@${ECHO_CMD} 'VBOX_WITH_WEBSERVICES = 1' >> ${WRKSRC}/LocalConfig.kmk
+	@${ECHO_CMD} 'VBOX_GSOAP_INSTALLED = 1' >> ${WRKSRC}/LocalConfig.kmk
+	@${ECHO_CMD} 'VBOX_PATH_GSOAP = ${PREFIX}/lib/gsoap' >> \
+	    ${WRKSRC}/LocalConfig.kmk
+	@${ECHO_CMD} 'VBOX_PATH_GSOAP_BIN = ${PREFIX}/bin' >> \
+	    ${WRKSRC}/LocalConfig.kmk
+	@${ECHO_CMD} 'VBOX_PATH_GSOAP_IMPORT = ${PREFIX}/share/gsoap/import' >> \
+	    ${WRKSRC}/LocalConfig.kmk
+	@${ECHO_CMD} 'VBOX_GCC_PEDANTIC_CXX = -Wshadow $$(VBOX_GCC_WARN) -Wno-long-long' >> \
+	    ${WRKSRC}/LocalConfig.kmk
+.endif
+.if empty(PORT_OPTIONS:MX11)
+	@${ECHO} 'VBOX_WITH_VMSVGA3D =' >> ${WRKSRC}/LocalConfig.kmk
+.endif
+.if ${CHOSEN_COMPILER_TYPE} == clang
+	@${REINPLACE_CMD} -e 's| -finline-limit=8000||' \
+	    -e 's| -mpreferred-stack-boundary=2||' ${WRKSRC}/Config.kmk
+	@${REINPLACE_CMD} -e 's| -fpermissive||' ${WRKSRC}/Config.kmk \
+	    ${WRKSRC}/src/VBox/Main/webservice/Makefile.kmk
+	@${ECHO_CMD} 'TOOL_VBoxGccFreeBSD_LD = ${CXX}' >> ${WRKSRC}/LocalConfig.kmk
+	@${SED} -e 's|GXX3|VBoxGccFreeBSD|g' \
+	    ${LOCALBASE}/share/kBuild/tools/GXX3.kmk > \
+	    ${WRKSRC}/tools/kBuildTools/VBoxGccFreeBSD.kmk
+.endif
+	# Causes a "reinplace" QA warning with default LOCALBASE
+	@${REINPLACE_CMD} -e 's|/usr/local|${LOCALBASE}|g' \
+	    ${WRKSRC}/Config.kmk ${WRKSRC}/configure \
+	    ${WRKSRC}/kBuild/header.kmk ${WRKSRC}/kBuild/units/qt4.kmk \
+	    ${WRKSRC}/kBuild/units/qt5.kmk ${WRKSRC}/kBuild/sdks/LIBSDL.kmk \
+	    ${WRKSRC}/src/libs/xpcom18a4/python/gen_python_deps.py
+	@${REINPLACE_CMD} \
+	    -e 's|\$$KBUILDDIR_BIN/kmk_sed|${LOCALBASE}/bin/kmk_sed|g' \
+	    -e 's|SUPPYTHONLIBS=.*|SUPPYTHONLIBS="${PYTHON_VERSION}${PYTHON_ABIVER}"|' \
+	    ${WRKSRC}/configure
+.if empty(ICONV_LIB)
+	@${REINPLACE_CMD} -e 's|iconv||' ${WRKSRC}/Config.kmk \
+	    ${WRKSRC}/src/VBox/Runtime/Makefile.kmk
+	@${ECHO_CMD} 'VBOX_ICONV_DEFS = LIBICONV_PLUG' >> ${WRKSRC}/LocalConfig.kmk
+.endif
+	@${REINPLACE_CMD} -e 's|%%VBOX_DIR%%|${VBOX_DIR}|g' \
+	    -e 's|%%VBOX_ETC%%|${VBOX_ETC}|g' \
+	    -e 's|%%LOCALBASE%%|${LOCALBASE}|g' \
+	    ${WRKSRC}/src/VBox/Installer/freebsd/VBox.sh
+	@${REINPLACE_CMD} -e 's|%%VBOX_ETC%%|${VBOX_ETC}|g' \
+	    ${WRKSRC}/src/VBox/HostDrivers/adpctl/VBoxNetAdpCtl.cpp
+	@${REINPLACE_CMD} \
+	    -e 's|^versions =.*|versions = ["${PYTHON_VER}${PYTHON_ABIVER}"]|' \
+	    ${WRKSRC}/src/libs/xpcom18a4/python/gen_python_deps.py
+
+post-patch-AIO-off:
+	@${REINPLACE_CMD} 's|r3/freebsd/fileaio-freebsd.cpp|r3/posix/fileaio-posix.cpp|' \
+		${WRKSRC}/src/VBox/Runtime/Makefile.kmk
+
+do-build:
+	cd ${WRKSRC} && ${SH} -c '. ${WRKSRC}/env.sh && \
+	    ${SETENV} ${MAKE_ENV} ${KMK_CONFIG} ${LOCALBASE}/bin/kmk ${KMK_FLAGS}'
+.if ${PORT_OPTIONS:MPYTHON}
+	${PYTHON_CMD} -mcompileall \
+	    ${KMK_BUILDDIR}/bin/sdk/bindings/xpcom/python/xpcom
+.endif
+
+do-install:
+.if ${PORT_OPTIONS:MPYTHON} || ${PORT_OPTIONS:MWEBSERVICE}
+	${MKDIR} ${STAGEDIR}${DATADIR}/sdk
+.endif
+	cd ${KMK_BUILDDIR}/bin/sdk/bindings/xpcom && \
+	    ${COPYTREE_SHARE} "idl samples" ${STAGEDIR}${DATADIR}
+
+	${MKDIR} ${STAGEDIR}${PREFIX}/include/virtualbox
+	cd ${KMK_BUILDDIR}/bin/sdk/bindings/xpcom/include && \
+	    ${COPYTREE_SHARE} "*" ${STAGEDIR}${PREFIX}/include/virtualbox
+
+	${MKDIR} ${STAGEDIR}${VBOX_DIR}
+	cd ${KMK_BUILDDIR}/bin && ${COPYTREE_SHARE} \
+	    "*.fd *.r0 *.so components" ${STAGEDIR}${VBOX_DIR}
+.if ${PORT_OPTIONS:MPYTHON} || ${PORT_OPTIONS:MWEBSERVICE}
+	${RLN} ${STAGEDIR}${DATADIR}/sdk ${STAGEDIR}${VBOX_DIR}
+.endif
+
+	${INSTALL_SCRIPT} ${WRKSRC}/src/VBox/Installer/freebsd/VBox.sh \
+	    ${STAGEDIR}${VBOX_DIR}
+.for f in ${VBOX_PROGS} ${VBOX_UTILS}
+	${INSTALL_PROGRAM} ${KMK_BUILDDIR}/bin/${f} ${STAGEDIR}${VBOX_DIR}
+.endfor
+.for f in ${VBOX_PROGS} ${VBOX_LINKS}
+	${LN} -fs ../${VBOX_DIR_REL}/VBox.sh ${STAGEDIR}${PREFIX}/bin/${f}
+.endfor
+.for f in ${VBOX_PROGS}
+	${LN} -fs ../${VBOX_DIR_REL}/VBox.sh ${STAGEDIR}${PREFIX}/bin/${f:tl}
+.endfor
+
+.if ${PORT_OPTIONS:MGUESTADDITIONS}
+	${MKDIR} ${STAGEDIR}${VBOX_DIR}/additions
+	${INSTALL_DATA} ${DISTDIR}/${GUESTADDITIONS} \
+	    ${STAGEDIR}${VBOX_DIR}/additions/
+	${RLN} ${STAGEDIR}${VBOX_DIR}/additions/${GUESTADDITIONS} \
+	    ${STAGEDIR}${VBOX_DIR}/additions/VBoxGuestAdditions.iso
+.endif
+
+.if ${PORT_OPTIONS:MDOCS}
+	${MKDIR} ${STAGEDIR}${DOCSDIR}
+	${INSTALL_DATA} ${WRKDIR}/VirtualBox-docs-${DISTVERSION}/UserManual.pdf \
+	    ${STAGEDIR}${DOCSDIR}
+.endif
+
+.if ${PORT_OPTIONS:MNLS}
+	cd ${KMK_BUILDDIR}/obj/VirtualBox/qtnls && \
+	    ${COPYTREE_SHARE} "*.qm" ${STAGEDIR}${DATADIR}/nls
+.endif
+
+.if ${PORT_OPTIONS:MPYTHON}
+	cd ${KMK_BUILDDIR}/bin/sdk/installer && \
+	    ${SETENV} VBOX_INSTALL_PATH="${VBOX_DIR}" \
+	    ${PYTHON_CMD} vboxapisetup.py install --root=${STAGEDIR}
+
+	@${MKDIR} ${STAGEDIR}${PYTHON_SITELIBDIR}/xpcom
+	cd ${KMK_BUILDDIR}/bin/sdk/bindings/xpcom/python/xpcom && \
+	    ${COPYTREE_SHARE} "*" ${STAGEDIR}${PYTHON_SITELIBDIR}/xpcom
+	@${MKDIR} ${STAGEDIR}${DATADIR}/sdk/bindings/xpcom/python
+	${RLN} ${STAGEDIR}${PYTHON_SITELIBDIR}/xpcom \
+	    ${STAGEDIR}${DATADIR}/sdk/bindings/xpcom/python
+.endif
+
+.if ${PORT_OPTIONS:MQT5}
+	${INSTALL_DATA} \
+	    ${WRKSRC}/src/VBox/Frontends/VirtualBox/images/OSE/VirtualBox_48px.png \
+	    ${STAGEDIR}${PREFIX}/share/pixmaps/VBox.png
+	${INSTALL_DATA} \
+	    ${WRKSRC}/src/VBox/Installer/freebsd/virtualbox.desktop \
+	    ${STAGEDIR}${PREFIX}/share/applications/virtualbox.desktop
+.endif
+
+.if ${PORT_OPTIONS:MVNC}
+	${MKDIR} ${STAGEDIR}${VBOX_DIR}/ExtensionPacks/VNC/${KMK_ARCH}
+	${INSTALL_DATA} ${KMK_BUILDDIR}/bin/ExtensionPacks/VNC/ExtPack* \
+	    ${STAGEDIR}${VBOX_DIR}/ExtensionPacks/VNC/
+	${INSTALL_LIB} ${KMK_BUILDDIR}/bin/ExtensionPacks/VNC/${KMK_ARCH}/* \
+	    ${STAGEDIR}${VBOX_DIR}/ExtensionPacks/VNC/${KMK_ARCH}/
+.endif
+
+.if ${PORT_OPTIONS:MVBOXIMG}
+	${LN} -fs ../${VBOX_DIR_REL}/vboximg-mount ${STAGEDIR}${PREFIX}/bin/
+.endif
+
+.if ${PORT_OPTIONS:MWEBSERVICE}
+	${MKDIR} ${STAGEDIR}${DATADIR}/sdk/bindings/webservice
+	${INSTALL_DATA} ${KMK_BUILDDIR}/obj/webservice/vboxweb.wsdl \
+	    ${STAGEDIR}${DATADIR}/sdk/bindings/webservice/
+.endif
+
+post-install:
+	${STRIP_CMD} ${STAGEDIR}${PREFIX}/lib/virtualbox/*.so \
+		${STAGEDIR}${PREFIX}/lib/virtualbox/components/*.so
+
+.include <bsd.port.post.mk>
diff --git a/emulators/virtualbox-ose-70/distinfo b/emulators/virtualbox-ose-70/distinfo
new file mode 100644
index 000000000000..08ac88176444
--- /dev/null
+++ b/emulators/virtualbox-ose-70/distinfo
@@ -0,0 +1,7 @@
+TIMESTAMP = 1716920210
+SHA256 (VirtualBox-6.1.50.tar.bz2) = 73ff603842896cb8d86ac5a817eb5037d7d225d3c46ea238e39d7ba5aaf61a57
+SIZE (VirtualBox-6.1.50.tar.bz2) = 165959648
+SHA256 (VBoxGuestAdditions_6.1.50.iso) = af53e34c5a5ec143f3418ac01d00ed5f33f6b31bfdc92eb4714c99d9bccb6602
+SIZE (VBoxGuestAdditions_6.1.50.iso) = 64051200
+SHA256 (VirtualBox-docs-6.1.50.tar.bz2) = e5dc118e8bb8352c06d5359e4f75ceb339a3917f0727fd74ad02ff07251e67db
+SIZE (VirtualBox-docs-6.1.50.tar.bz2) = 4063302
diff --git a/emulators/virtualbox-ose-70/files/extrapatch-Config.kmk b/emulators/virtualbox-ose-70/files/extrapatch-Config.kmk
new file mode 100644
index 000000000000..775508d23b1b
--- /dev/null
+++ b/emulators/virtualbox-ose-70/files/extrapatch-Config.kmk
@@ -0,0 +1,11 @@
+--- Config.kmk.orig	2021-04-28 16:21:25 UTC
++++ Config.kmk
+@@ -4931,7 +4931,7 @@ define TOOL_FREEBSDKMODLD_LINK_SYSMOD_CMDS
+ 		| xargs -J% objcopy % $(out)
+ 
+ ## Strip debug info (comment out if debugging or something).
+-	objcopy --strip-debug $(out)
++#	objcopy --strip-debug $(out)
+ endef
+  else # x86
+ TOOL_FREEBSDKMODLD_LINK_SYSMOD_OUTPUT = $(outbase).kld
diff --git a/emulators/virtualbox-ose-70/files/extrapatch-src-VBox-HostDrivers-Support-freebsd-Makefile b/emulators/virtualbox-ose-70/files/extrapatch-src-VBox-HostDrivers-Support-freebsd-Makefile
new file mode 100644
index 000000000000..67361da543f7
--- /dev/null
+++ b/emulators/virtualbox-ose-70/files/extrapatch-src-VBox-HostDrivers-Support-freebsd-Makefile
@@ -0,0 +1,11 @@
+--- src/VBox/HostDrivers/Support/freebsd/Makefile.orig	2012-10-18 16:23:16.000000000 +0200
++++ src/VBox/HostDrivers/Support/freebsd/Makefile	2012-10-20 08:13:07.301179212 +0200
+@@ -27,7 +27,7 @@
+ 
+ KMOD = vboxdrv
+ 
+-CFLAGS += -DRT_OS_FREEBSD -DIN_RING0 -DIN_RT_R0 -DIN_SUP_R0 -DSUPDRV_WITH_RELEASE_LOGGER -DVBOX -DRT_WITH_VBOX -Iinclude -I. -Ir0drv -w -DVBOX_WITH_HARDENING -DVBOX_WITH_64_BITS_GUESTS
++CFLAGS += -DRT_OS_FREEBSD -DIN_RING0 -DIN_RT_R0 -DIN_SUP_R0 -DSUPDRV_WITH_RELEASE_LOGGER -DVBOX -DRT_WITH_VBOX -Iinclude -I. -Ir0drv -w -DVBOX_WITH_HARDENING -DVBOX_WITH_64_BITS_GUESTS -DDEBUG
+ 
+ .if (${MACHINE_ARCH} == "i386")
+  CFLAGS += -DRT_ARCH_X86
diff --git a/emulators/virtualbox-ose-70/files/extrapatch-vboximg-Config.kmk b/emulators/virtualbox-ose-70/files/extrapatch-vboximg-Config.kmk
new file mode 100644
index 000000000000..d84209faa8cd
--- /dev/null
+++ b/emulators/virtualbox-ose-70/files/extrapatch-vboximg-Config.kmk
@@ -0,0 +1,11 @@
+--- Config.kmk.orig	2023-10-12 15:43:35.000000000 +0700
++++ Config.kmk	2023-10-30 22:11:09.119922000 +0700
+@@ -869,7 +869,7 @@
+ # windows versions (only define when buildling win.x86).
+ #VBOX_WITH_MORE_NT4_COMPAT_BINARIES = 1
+ # Set this to enable building of the vboximg-mount FUSE mounting utility.
+-if1of ($(KBUILD_TARGET), darwin linux)
++if1of ($(KBUILD_TARGET), darwin freebsd linux)
+  VBOX_WITH_VBOXIMGMOUNT = 1
+ endif
+ # Set this to enable packaging the fuse related bits into our installer.
diff --git a/emulators/virtualbox-ose-70/files/patch-Config.kmk b/emulators/virtualbox-ose-70/files/patch-Config.kmk
new file mode 100644
index 000000000000..119926c9e025
--- /dev/null
+++ b/emulators/virtualbox-ose-70/files/patch-Config.kmk
@@ -0,0 +1,234 @@
+--- Config.kmk.orig	2021-01-07 15:31:21 UTC
++++ Config.kmk
+@@ -469,11 +469,11 @@ ifn1of ($(KBUILD_TARGET), win darwin)
+  # Enable OSS audio support.
+  VBOX_WITH_AUDIO_OSS = 1
+ endif
+-if1of ($(KBUILD_TARGET), linux)
++if1of ($(KBUILD_TARGET), freebsd linux)
+  # Enable ALSA audio support.
+  VBOX_WITH_AUDIO_ALSA = 1
+ endif
+-if1of ($(KBUILD_TARGET), linux)
++if1of ($(KBUILD_TARGET), freebsd linux)
+  # Enable PulseAudio audio support.
+  VBOX_WITH_AUDIO_PULSE = 1
+ endif
+@@ -489,11 +489,11 @@ VBOX_WITH_AUDIO_MMNOTIFICATION_CLIENT = 1
+ # (disabled with 6.1, since it's not complete/useful enough)
+ VBOX_WITH_PCI_PASSTHROUGH =
+ # Enable statically linked dbus support.
+-if1of ($(KBUILD_TARGET), linux solaris)
++if1of ($(KBUILD_TARGET), freebsd linux solaris)
+  VBOX_WITH_DBUS = 1
+ endif
+ # Enable building PAM modules.
+-if1of ($(KBUILD_TARGET), linux solaris)
++if1of ($(KBUILD_TARGET), freebsd linux solaris)
+  VBOX_WITH_PAM = 1
+ endif
+ # Enable internal networking.
+@@ -501,7 +501,7 @@ VBOX_WITH_INTERNAL_NETWORKING = 1
+ # Enable vmsvga (svga2) graphics device variant, 2D part
+ VBOX_WITH_VMSVGA = 1
+ # Enable vmsvga (svga2) graphics device variant, 3D part
+-if1of ($(KBUILD_TARGET), darwin linux win)
++if1of ($(KBUILD_TARGET), darwin freebsd linux win)
+  VBOX_WITH_VMSVGA3D = 1
+ endif
+ # Enable the generic 3D settings support if at least one 3D capable solution is enabled
+@@ -647,7 +647,7 @@ VBOX_WITH_MAIN_USB_ID_DATABASE = 1
+ #endif
+ # Set this to prefix all C symbols in XPCOM, to avoid dynamic linking problems
+ # caused by our XPCOM library polluting the symbol namespace for system libs.
+-if1of ($(KBUILD_TARGET), linux solaris)
++if1of ($(KBUILD_TARGET), freebsd linux solaris)
+  VBOX_WITH_XPCOM_NAMESPACE_CLEANUP = 1
+ endif
+ # The webservices api.
+@@ -1064,10 +1064,6 @@ ifeq ($(KBUILD_TARGET),darwin)
+  VBOX_WITH_VBOXSDL=
+ endif
+ 
+-ifeq ($(KBUILD_TARGET),freebsd)
+- VBOX_WITH_DOCS=
+-endif
+-
+ ifeq ($(KBUILD_TARGET),haiku)
+  # Don't bother with SDL ttf for now.
+  VBOX_WITH_SECURELABEL=
+@@ -1228,7 +1224,7 @@ ifdef VBOX_OSE
+  VBOX_WITH_KCHMVIEWER=
+  VBOX_WITH_PLUGIN_CRYPT=
+  VBOX_WITH_DRAG_AND_DROP_PROMISES=
+- ifn1of ($(KBUILD_TARGET), linux)
++ ifn1of ($(KBUILD_TARGET), freebsd linux)
+   VBOX_WITH_DOCS=
+   VBOX_WITH_DOCS_PACKING=
+  endif
+@@ -4928,7 +4924,7 @@ define TOOL_FREEBSDKMODLD_LINK_SYSMOD_CMDS
+ 		| xargs -J% objcopy % $(outbase).kld
+ 
+ # Link the final .ko (a shared object).
+-	ld $(flags) -Bshareable -o $(out) $(outbase).kld
++    ld $(flags) -Bshareable -znotext -o $(out) $(outbase).kld
+ endef
+  endif # x86
+ 
+@@ -5205,6 +5201,7 @@ TEMPLATE_VBOXR3EXE_LDFLAGS.x86         = -m32
+ TEMPLATE_VBOXR3EXE_LDFLAGS.amd64       = -m64
+ TEMPLATE_VBOXR3EXE_LDFLAGS.sparc32     = -m32
+ TEMPLATE_VBOXR3EXE_LDFLAGS.sparc64     = -m64
++TEMPLATE_VBOXR3EXE_LDFLAGS.freebsd     = -Wl,-z,noexecstack,-z,relro $(VBOX_LD_as_needed)
+ TEMPLATE_VBOXR3EXE_LDFLAGS.linux       = -Wl,-z,noexecstack,-z,relro $(VBOX_LD_as_needed)
+ TEMPLATE_VBOXR3EXE_LDFLAGS.solaris     = -Wl,-z,ignore # same as VBOX_LD_as_needed
+ TEMPLATE_VBOXR3EXE_LDFLAGS.debug       = $(VBOX_GCC_SANITIZER_FLAGS) $(VBOX_GCC_SANITIZER_LDFLAGS)
+@@ -5238,10 +5235,18 @@ TEMPLATE_VBOXR3EXE_LIBPATH            += \
+ TEMPLATE_VBOXR3EXE_CFLAGS             += -fno-pic
+ TEMPLATE_VBOXR3EXE_CXXFLAGS           += -fno-pic
+ TEMPLATE_VBOXR3EXE_LDFLAGS            += -fno-pic
+- else if1of ($(KBUILD_TARGET), freebsd openbsd)
++ else ifeq ($(KBUILD_TARGET),freebsd)
+ TEMPLATE_VBOXR3EXE_TOOL                = GXX3
+ TEMPLATE_VBOXR3EXE_LIBS                = pthread
++TEMPLATE_VBOXR3EXE_LDFLAGS.freebsd.x86 = -Wl,-z,notext
+ TEMPLATE_VBOXR3EXE_INCS               += \
++	/usr/local/include
++TEMPLATE_VBOXR3EXE_LIBPATH            += \
++	/usr/local/lib
++ else ifeq ($(KBUILD_TARGET),openbsd)
++TEMPLATE_VBOXR3EXE_TOOL                = GXX3
++TEMPLATE_VBOXR3EXE_LIBS                = pthread
++TEMPLATE_VBOXR3EXE_INCS               += \
+ 	/usr/include \
+ 	/usr/X11R6/include \
+ 	/usr/local/include
+@@ -5273,6 +5278,7 @@ TEMPLATE_VBOXR3EXE_CXXFLAGS.kprofile   = $(TEMPLATE_VB
+   TEMPLATE_VBOXR3EXE_LDFLAGS          += '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)'
+  endif
+  ifdef VBOX_WITH_ORIGIN
++  TEMPLATE_VBOXR3EXE_LDFLAGS.freebsd  += $(VBOX_GCC_ORIGIN_OPT)
+   TEMPLATE_VBOXR3EXE_LDFLAGS.linux    += $(VBOX_GCC_ORIGIN_OPT)
+  endif
+ endif
+@@ -5412,7 +5418,7 @@ ifeq ($(KBUILD_TARGET),win)
+  	$(PATH_TOOL_$(TEMPLATE_VBOXR3STATIC_TOOL.win.amd64)_LIB)/libcmt$(VBOX_VCC_CRT_TYPE).lib \
+  	$(PATH_TOOL_$(TEMPLATE_VBOXR3STATIC_TOOL.win.amd64)_LIB)/libcpmt$(VBOX_VCC_CRT_TYPE).lib \
+  	$(PATH_TOOL_$(TEMPLATE_VBOXR3STATIC_TOOL.win.amd64)_LIB)/oldnames.lib
+-else ifn1of ($(KBUILD_TARGET), darwin linux solaris)
++else ifn1of ($(KBUILD_TARGET), darwin freebsd linux solaris)
+  # The gcc guys sans darwin, linux and solaris (don't depend on statically compiled system libs there)
+  TEMPLATE_VBOXR3STATIC_CFLAGS          = $(TEMPLATE_VBOXR3EXE_CFLAGS) -static
+  TEMPLATE_VBOXR3STATIC_CXXFLAGS        = $(TEMPLATE_VBOXR3EXE_CXXFLAGS) -static
+@@ -5557,6 +5563,7 @@ ifeq ($(KBUILD_TARGET),win) # No CRT!
+ else ifn1of ($(KBUILD_TARGET), os2 solaris)
+  # We want to keep the RPATH on Solaris to be able to find libgcc_1/libstdc++ within $(VBOX_WITH_RUNPATH)
+  TEMPLATE_VBOXR3HARDENEDEXE_LDFLAGS       = $(filter-out '$(VBOX_GCC_RPATH_OPT)%,$(TEMPLATE_VBOXR3EXE_LDFLAGS))
++ TEMPLATE_VBoxR3HardenedTstDll_LDFLAGS.freebsd = $(filter-out $(VBOX_GCC_ORIGIN_OPT),$(TEMPLATE_VBoxR3TstDll_LDFLAGS.freebsd))
+  TEMPLATE_VBOXR3HARDENEDEXE_LDFLAGS.linux = $(filter-out $(VBOX_GCC_ORIGIN_OPT),$(TEMPLATE_VBOXR3EXE_LDFLAGS.linux))
+ endif
+ 
+@@ -5584,6 +5591,7 @@ TEMPLATE_VBoxR3HardenedTstDll_INST = $(INST_TESTCASE)
+  TEMPLATE_VBoxR3HardenedTstDll_LDFLAGS.win = $(TEMPLATE_VBoxR3TstDll_LDFLAGS.win) -IntegrityCheck
+ ifn1of ($(KBUILD_TARGET), win os2)
+  TEMPLATE_VBoxR3HardenedTstDll_LDFLAGS       = $(filter-out '$(VBOX_GCC_RPATH_OPT)%,$(TEMPLATE_VBoxR3TstDll_LDFLAGS))
++ TEMPLATE_VBoxR3HardenedTstDll_LDFLAGS.freebsd = $(filter-out $(VBOX_GCC_ORIGIN_OPT),$(TEMPLATE_VBoxR3TstDll_LDFLAGS.freebsd))
+  TEMPLATE_VBoxR3HardenedTstDll_LDFLAGS.linux = $(filter-out $(VBOX_GCC_ORIGIN_OPT),$(TEMPLATE_VBoxR3TstDll_LDFLAGS.linux))
+ endif
+ 
+@@ -5606,6 +5614,7 @@ ifndef VBOX_WITH_HARDENING
+   TEMPLATE_VBoxR3SetUidToRoot_LDFLAGS += '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)'
+  endif
+  ifdef VBOX_WITH_ORIGIN
++  TEMPLATE_VBoxR3SetUidToRoot_LDFLAGS.freebsd += $(VBOX_GCC_ORIGIN_OPT)
+   TEMPLATE_VBoxR3SetUidToRoot_LDFLAGS.linux += $(VBOX_GCC_ORIGIN_OPT)
+  endif
+ endif
+@@ -6132,10 +6141,19 @@ TEMPLATE_VBOXMAINEXE_LIBS                = $(LIB_RUNTI
+  else ifeq ($(KBUILD_TARGET),haiku)
+ TEMPLATE_VBOXMAINEXE_TOOL                = GXX3
+ TEMPLATE_VBOXMAINEXE_LIBS                = $(LIB_RUNTIME) network stdc++ supc++
+- else if1of ($(KBUILD_TARGET), freebsd openbsd)
++ else ifeq ($(KBUILD_TARGET),freebsd)
+ TEMPLATE_VBOXMAINEXE_TOOL                = GXX3
+ TEMPLATE_VBOXMAINEXE_LIBS                = $(LIB_RUNTIME)
++TEMPLATE_VBOXMAINEXE_LDFLAGS.freebsd     = -Wl,-z,noexecstack,-z,relro $(VBOX_LD_as_needed)
++TEMPLATE_VBOXMAINEXE_LDFLAGS.freebsd.x86 = -Wl,-z,notext
+ TEMPLATE_VBOXMAINEXE_INCS               += \
++	/usr/local/include
++TEMPLATE_VBOXMAINEXE_LIBPATH            += \
++	/usr/local/lib
++ else ifeq ($(KBUILD_TARGET),openbsd)
++TEMPLATE_VBOXMAINEXE_TOOL                = GXX3
++TEMPLATE_VBOXMAINEXE_LIBS                = $(LIB_RUNTIME)
++TEMPLATE_VBOXMAINEXE_INCS               += \
+ 	/usr/include \
+ 	/usr/X11R6/include \
+ 	/usr/local/include
+@@ -6167,6 +6185,7 @@ TEMPLATE_VBOXMAINEXE_LDFLAGS            += '$(VBOX_GCC
+ TEMPLATE_VBOXMAINEXE_LDFLAGS            += '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)'
+  endif
+  ifdef VBOX_WITH_ORIGIN
++TEMPLATE_VBOXMAINEXE_LDFLAGS.freebsd    += $(VBOX_GCC_ORIGIN_OPT)
+ TEMPLATE_VBOXMAINEXE_LDFLAGS.linux      += $(VBOX_GCC_ORIGIN_OPT)
+  endif
+ 
+@@ -6735,13 +6754,11 @@ ifdef VBOX_WITH_QTGUI
+    TEMPLATE_VBOXQTGUIEXE_LIBPATH += \
+ 	$(VBOX_LIBPATH_X11)
+    ifeq ($(KBUILD_TARGET),freebsd)
++    TEMPLATE_VBOXQTGUIEXE_LDFLAGS += -Wl,-z,noexecstack,-z,relro $(VBOX_LD_as_needed)
++    TEMPLATE_VBOXQTGUIEXE_LDFLAGS.freebsd.x86 = -Wl,-z,notext
+     TEMPLATE_VBOXQTGUIEXE_INCS += \
+-	/usr/include \
+-	/usr/X11R6/include \
+ 	/usr/local/include
+     TEMPLATE_VBOXQTGUIEXE_LIBPATH += \
+-	/usr/lib \
+-	/usr/X11R6/lib \
+ 	/usr/local/lib
+    endif
+    ifeq ($(KBUILD_TARGET),solaris)
+@@ -6988,10 +7005,17 @@ TEMPLATE_VBoxBldProg_TOOL                = GXX3
+ TEMPLATE_VBoxBldProg_LIBS                = network iconv
+ TEMPLATE_VBoxBldProg_LIBPATH            += \
+ 	/boot/common/lib
+- else if1of ($(KBUILD_HOST), freebsd openbsd)
++ else ifeq ($(KBUILD_HOST),freebsd)
+ TEMPLATE_VBoxBldProg_TOOL                = GXX3
+ TEMPLATE_VBoxBldProg_LIBS                = pthread
+ TEMPLATE_VBoxBldProg_INCS               += \
++	/usr/local/include
++TEMPLATE_VBoxBldProg_LIBPATH            += \
++	/usr/local/lib
++ else ifeq ($(KBUILD_HOST),openbsd)
++TEMPLATE_VBoxBldProg_TOOL                = GXX3
++TEMPLATE_VBoxBldProg_LIBS                = pthread
++TEMPLATE_VBoxBldProg_INCS               += \
+ 	/usr/include \
+ 	/usr/X11R6/include \
+ 	/usr/local/include
+@@ -7115,6 +7139,7 @@ else # the gcc guys
+  # Do not inherit sanitizer flags from VBOXR3EXE in guest executables.  Deal with them separately.
+  TEMPLATE_VBOXGUESTR3EXE_CXXFLAGS.debug = $(NO_SUCH_VARIABLE)
+  TEMPLATE_VBOXGUESTR3EXE_CFLAGS.debug = $(NO_SUCH_VARIABLE)
++ TEMPLATE_VBOXGUESTR3EXE_LDFLAGS.freebsd = $(filter-out $(VBOX_GCC_ORIGIN_OPT),$(TEMPLATE_VBOXR3EXE_LDFLAGS.freebsd))
+  TEMPLATE_VBOXGUESTR3EXE_LDFLAGS.linux = $(filter-out $(VBOX_GCC_ORIGIN_OPT),$(TEMPLATE_VBOXR3EXE_LDFLAGS.linux))
+  TEMPLATE_VBOXGUESTR3EXE_LDFLAGS.debug = $(NO_SUCH_VARIABLE)
+  TEMPLATE_VBOXGUESTR3EXE_LDFLAGS  = $(filter-out '$(VBOX_GCC_RPATH_OPT)%,$(TEMPLATE_VBOXR3EXE_LDFLAGS))
+@@ -7138,6 +7163,7 @@ TEMPLATE_VBOXGUESTR3EXE_CXXFLAGS.linux    = \
+ 	$(VBOX_GCC_fno-stack-protector)
+ TEMPLATE_VBOXGUESTR3EXE_CFLAGS.linux      = $(TEMPLATE_VBOXGUESTR3EXE_CXXFLAGS.linux)
+ # The GNU_HASH ELF tag is not supported by older systems.
++TEMPLATE_VBOXGUESTR3EXE_LDFLAGS.freebsd    += $(VBOX_LD_hash_style_sysv)
+ TEMPLATE_VBOXGUESTR3EXE_LDFLAGS.linux      += $(VBOX_LD_hash_style_sysv)
+ 
+ #
+@@ -7345,6 +7371,7 @@ TEMPLATE_VBOXGUESTR3XF86MOD_LIBS.$(KBUILD_TYPE)      =
+ TEMPLATE_VBOXGUESTR3XF86MOD_LIBS.$(KBUILD_TARGET)    = $(NO_SUCH_VARIABLE)
+ TEMPLATE_VBOXGUESTR3XF86MOD_LDFLAGS.$(KBUILD_TARGET) = $(NO_SUCH_VARIABLE)
+ # The GNU_HASH ELF tag is not supported by older glibc dynamic linkers.
++TEMPLATE_VBOXGUESTR3XF86MOD_LDFLAGS.freebsd = $(subst -Wl$(COMMA),,$(VBOX_LD_hash_style_sysv))
+ TEMPLATE_VBOXGUESTR3XF86MOD_LDFLAGS.linux = $(subst -Wl$(COMMA),,$(VBOX_LD_hash_style_sysv))
+ TEMPLATE_VBOXGUESTR3XF86MOD_LDFLAGS.$(KBUILD_TYPE)   = $(NO_SUCH_VARIABLE)
+ TEMPLATE_VBOXGUESTR3XF86MOD_LDFLAGS          = -r
diff --git a/emulators/virtualbox-ose-70/files/patch-configure b/emulators/virtualbox-ose-70/files/patch-configure
new file mode 100644
index 000000000000..25015e642bc1
--- /dev/null
+++ b/emulators/virtualbox-ose-70/files/patch-configure
@@ -0,0 +1,126 @@
+--- configure.orig	2021-10-18 17:47:25 UTC
++++ configure
+@@ -139,10 +139,14 @@ CXX_FLAGS=""
+ if [ "$OS" = "freebsd" ]; then
+   INCCURL="-I/usr/local/include"
+   LIBCURL="-L/usr/local/lib -lcurl"
++  INCALSA="-I/usr/local/include"
++  LIBALSA="-L/usr/local/lib"
+   INCPULSE="-I/usr/local/include"
+   LIBPULSE="-L/usr/local/lib"
+   INCPNG="-I/usr/local/include"
+   LIBPNG="-L/usr/local/lib -lpng"
++  INCVNCSERVER="-I/usr/local/include"
++  LIBVNCSERVER="-L/usr/local/lib"
+ else
+   INCCURL=""
+   LIBCURL="-lcurl"
+@@ -1173,6 +1177,9 @@ extern "C" int main(int argc, char** arg
+   printf("found version %d.%d.%d",
+          SDL_MAJOR_VERSION, SDL_MINOR_VERSION, SDL_PATCHLEVEL);
+ #if SDL_VERSION_ATLEAST(1,2,7)
++#if !defined(SDL_VIDEO_DRIVER_X11)
++#error SDL must be compiled with X11 support
++#endif
+   printf(", OK.\n");
+   return 0;
+ #else
+@@ -1257,7 +1264,7 @@ extern "C" int main(void)
+ #endif
+ }
+ EOF
+-  if test_compile "-lasound" asound asound; then
++  if test_compile "$INCALSA $LIBALSA -lasound" asound asound; then
+     test_execute
+   fi
+ }
+@@ -1564,6 +1571,7 @@ EOF
+           FLGQT5=`pkg-config Qt5Core --cflags`
+           # gcc 4.8 is able to compile with C++11 (see also VBOX_GCC_std in Config.kmk)
+           [ $(($cc_maj * 100 + $cc_min)) -ge 408 ] && FLGQT5="$FLGQT5 -std=c++11"
++          FLGQT5="$FLGQT5 -std=c++11"
+           INCQT5=`strip_I "$FLGQT5"`
+           LIBDIR5=`pkg-config Qt5Core --variable=libdir`
+           LIBQT5=`pkg-config Qt5Core Qt5Gui --libs`
+@@ -1702,7 +1710,7 @@ check_libopus()
+       fi
+       cat > $ODIR.tmp_src.cc << EOF
+ #include <cstdio>
+-#include <opus/opus.h>
++#include <opus.h>
+ extern "C" int main(void)
+ {
+   OpusEncoder *test;
+@@ -2034,8 +2042,8 @@ EOF
+         echo "compiling the following source file:" >> $LOG
+         cat $ODIR.tmp_src.cc >> $LOG
+         echo "using the following command line:" >> $LOG
+-        echo "$CXX -O -Wall -o $ODIR.tmp_out $ODIR.tmp_src.cc -I$p/include/$d $p/$b/lib$d.so" >> $LOG
+-        $CXX -O -Wall -o $ODIR.tmp_out $ODIR.tmp_src.cc -I$p/include/$d $p/$b/lib$d.so >> $LOG 2>&1
++        echo "$CXX -O -Wall -o $ODIR.tmp_out $ODIR.tmp_src.cc -I$p/include/$d $p/$b/lib$d.so -pthread" >> $LOG
++        $CXX -O -Wall -o $ODIR.tmp_out $ODIR.tmp_src.cc -I$p/include/$d $p/$b/lib$d.so -pthread >> $LOG 2>&1
+         if [ $? -eq 0 ]; then
+           found=1
+           break
+@@ -2151,7 +2159,7 @@ check_gsoap()
+         else
+           cnf_append "VBOX_GSOAP_CXX_SOURCES" ""
+         fi
+-        cnf_append "VBOX_GSOAP_CXX_LIBS"    "`strip_l "$GSOAP_CXX_LIBS"`"
++        cnf_append "VBOX_GSOAP_CXX_LIBS"    "`strip_l "$GSOAP_CXX_LIBS"` z"
+         gsoap_version=`pkg-config gsoapssl++ --modversion`
+         log_success "found version $gsoap_version"
+         return
+@@ -2519,7 +2527,7 @@ for option in "$@"; do
+     --with-openssl-dir=*)
+       OPENSSLDIR=`echo $option | cut -d'=' -f2`
+       INCCRYPTO="-I${OPENSSLDIR}/include"
+-      LIBCRYPTO="${OPENSSLDIR}/lib/libssl.a ${OPENSSLDIR}/lib/libcrypto.a"
++      LIBCRYPTO="-L${OPENSSLDIR}/lib -lssl -lcrypto"
+       # On Linux static OpenSSL typically needs a few additional libraries.
+       [ "$OS" = "linux" ] && LIBCRYPTO="-ldl $LIBPTHREAD -lm"
+       ;;
+@@ -2865,12 +2873,22 @@ if [ $ONLY_ADDITIONS -eq 0 ]; then
+   [ $WITH_JAVA   -eq 1 ] && check_java
+ 
+   # PulseAudio
+-  if [ $WITH_PULSE -eq 1 ]; then
+-    check_pulse
+-  elif [ $WITH_PULSE -eq 0 ]; then # Force disabling PulseAudio.
+-    cnf_append "VBOX_WITH_AUDIO_PULSE" ""
+-  elif [ $WITH_PULSE -eq 2 ]; then # --enable-pulse was passed, force PulseAudio.
+-    cnf_append "VBOX_WITH_AUDIO_PULSE" "1"
*** 9800 LINES SKIPPED ***