1PORTNAME=	qemu
2PORTVERSION=	7.2.11
3PORTREVISION=	2
4CATEGORIES=	emulators
5MASTER_SITES=	https://download.qemu.org/
6DIST_SUBDIR=	qemu/${PORTVERSION}
7
8MAINTAINER=	ports@MidnightBSD.org
9COMMENT=	QEMU CPU Emulator ${${FLAVOR}_COMMENT} - 7.X.X
10WWW=		https://www.qemu.org/
11
12LICENSE=	gpl2
13
14BUILD_DEPENDS=	bash:shells/bash
15LIB_DEPENDS+=	libfdt.so:sysutils/dtc \
16		libzstd.so:archivers/zstd \
17		libslirp.so:net/libslirp
18.if ${FLAVOR:U} != nox11
19LIB_DEPENDS+=	libepoxy.so:graphics/libepoxy
20.endif
21
22FLAVORS=			default nox11
23FLAVOR?=			${FLAVORS:[1]}
24default_PKGNAMESUFFIX=		7
25default_CONFLICTS_INSTALL=	qemu-devel qemu-nox11 qemu-tools qemu-utils \
26				qemu8*
27nox11_PKGNAMESUFFIX=		7-nox11
28nox11_CONFLICTS_INSTALL=	qemu qemu-devel qemu7*
29nox11_COMMENT=			(without X11)
30
31USES=		cpe gmake gnome ninja perl5 pkgconfig python:build tar:xz
32USE_GNOME=	glib20
33USE_PERL5=	build
34USES+=		iconv:wchar_t
35.if ${FLAVOR:U} != nox11
36USE_GNOME+=	cairo
37.endif
38
39HAS_CONFIGURE=		yes
40CONFIGURE_ARGS+=	--cc=${CC} \
41			--disable-guest-agent \
42			--disable-kvm \
43			--disable-linux-aio \
44			--disable-linux-user \
45			--disable-xen \
46			--extra-cflags=-I${WRKSRC}\ -I${LOCALBASE}/include\ -DPREFIX=\\\"\"${PREFIX}\\\"\" \
47			--extra-ldflags=-L${LOCALBASE}/lib \
48			--extra-ldflags=-L/usr/lib \
49			--localstatedir=/var \
50			--mandir=${PREFIX}/share/man \
51			--prefix=${PREFIX} \
52			--python=${PYTHON_CMD}
53CONFIGURE_ARGS+=	--enable-fdt=system \
54			--enable-netmap
55
56CFLAGS:=	${CFLAGS:C/-fno-tree-vrp//}
57WITHOUT_CPU_CFLAGS=	yes #to avoid problems with register allocation
58
59PORTDOCS=	.buildinfo _static/* about/* dbus-dbusindex.html devel/* docs \
60		genindex.html index.html interop/* objects.inv search.html \
61		searchindex.js specs/* system/* tools/* user/*
62
63OPTIONS_DEFINE=			CAPSTONE CDROM_DMA CURL DEBUG DOCS GNUTLS GTK3 \
64				ISCSI JPEG OPENGL PNG SAMBA SASL STATIC_LINK \
65				STRIP USBREDIR VDE X11 X86_TARGETS
66OPTIONS_DEFAULT=		CDROM_DMA CURL GNUTLS GTK3 JPEG NCURSES_DEFAULT \
67				OPENGL PNG SASL VDE X11
68OPTIONS_SINGLE=			NCURSES
69OPTIONS_SINGLE_NCURSES=		NCURSES_BASE NCURSES_DEFAULT NCURSES_PORT
70.if ${FLAVOR:U} == nox11
71OPTIONS_EXCLUDE:=		GTK3 OPENGL X11
72.endif
73OPTIONS_SUB=			yes
74CAPSTONE_DESC=			Disassembly framework support
75CDROM_DMA_DESC=			IDE CDROM DMA
76GNUTLS_DESC=			gnutls dependency (vnc encryption)
77ISCSI_DESC=			libiscsi dependency (iSCSI client for emulated drives)
78JPEG_DESC=			jpeg dependency (vnc lossy compression)
79NCURSES_BASE_DESC=		Depend on ncurses in base
80NCURSES_DEFAULT_DESC=		Depend on ncurses (ports if installed, otherwise base)
81NCURSES_PORT_DESC=		Depend on devel/ncurses in ports
82PNG_DESC=			png dependency (vnc compression)
83SAMBA_DESC=			samba dependency (for -smb)
84SASL_DESC=			cyrus-sasl dependency (vnc encryption)
85STATIC_LINK_DESC=		Statically link the executables
86USBREDIR_DESC=			usb device network redirection (experimental!)
87VDE_DESC=			vde dependency (for vde networking)
88X86_TARGETS_DESC=		Build only x86 system targets
89CAPSTONE_LIB_DEPENDS=		libcapstone.so:devel/capstone4
90CAPSTONE_CONFIGURE_ON=		--enable-capstone \
91				--extra-cflags=-I${LOCALBASE}/include/capstone
92CAPSTONE_CONFIGURE_OFF=		--disable-capstone
93CURL_LIB_DEPENDS=		libcurl.so:ftp/curl
94CURL_USES=			ssl
95CURL_CONFIGURE_OFF=		--disable-curl
96DEBUG_CONFIGURE_ON=		--enable-debug
97DOCS_BUILD_DEPENDS=		${PYTHON_PKGNAMEPREFIX}sphinx_rtd_theme>0:textproc/py-sphinx_rtd_theme@${PY_FLAVOR} \
98				sphinx-build:textproc/py-sphinx@${PY_FLAVOR}
99DOCS_CONFIGURE_ENABLE=		docs
100GNUTLS_LIB_DEPENDS=		libgnutls.so:security/gnutls
101GNUTLS_CONFIGURE_OFF=		--disable-gnutls
102GTK3_LIB_DEPENDS=		libxkbcommon.so:x11/libxkbcommon
103GTK3_USES=			gettext gl
104GTK3_USE=			GNOME=gdkpixbuf,gtk30,vte3 \
105				XORG=x11,xext
106GTK3_CONFIGURE_OFF=		--disable-gtk \
107				--disable-vte
108ISCSI_LIB_DEPENDS=		libiscsi.so:net/libiscsi
109ISCSI_CONFIGURE_OFF=		--disable-libiscsi
110JPEG_USES=			jpeg
111JPEG_CONFIGURE_OFF=		--disable-vnc-jpeg
112NCURSES_BASE_USES=		ncurses:base
113NCURSES_DEFAULT_USES=		ncurses
114NCURSES_PORT_USES=		ncurses:port
115OPENGL_USES=			gl
116OPENGL_USE=			GL=gbm,gl
117OPENGL_CONFIGURE_OFF=		--disable-opengl
118PNG_LIB_DEPENDS=		libpng.so:graphics/png
119PNG_CONFIGURE_OFF=		--disable-png
120SAMBA_USES=			samba:run # smbd
121SAMBA_CONFIGURE_ON=		--smbd=${LOCALBASE}/sbin/smbd
122SASL_LIB_DEPENDS=		libsasl2.so:security/cyrus-sasl2
123SASL_CONFIGURE_OFF=		--disable-vnc-sasl
124STATIC_LINK_PREVENTS=		GTK3 X11
125STATIC_LINK_PREVENTS_MSG=	X11 ui cannot be built static
126STATIC_LINK_CONFIGURE_ON=	--static
127STRIP_CONFIGURE_OFF=		--disable-strip
128USBREDIR_BUILD_DEPENDS=		usbredir>=0.6:net/usbredir
129USBREDIR_RUN_DEPENDS=		usbredir>=0.6:net/usbredir
130USBREDIR_CONFIGURE_OFF=		--disable-usb-redir
131VDE_LIB_DEPENDS=		libvdeplug.so:net/vde2
132VDE_CONFIGURE_OFF=		--disable-vde
133X11_USES=			sdl
134X11_USE=			GNOME=gdkpixbuf \
135				SDL=sdl2 \
136				XORG=x11,xext
137X11_CONFIGURE_ENABLE=		sdl
138.if (empty(FLAVOR) || ${FLAVOR:U} == default || ${FLAVOR:U} == nox11)
139X86_TARGETS_USES_OFF=		xorg
140X86_TARGETS_USE_OFF=		XORG=pixman,x11
141X86_TARGETS_CONFIGURE_ON=	--target-list='i386-softmmu i386-bsd-user x86_64-softmmu x86_64-bsd-user'
142.endif
143
144.include <bsd.mport.options.mk>
145
146.if (empty(FLAVOR) || ${FLAVOR:U} == default || ${FLAVOR:U} == nox11)
147.if ${ARCH} == "amd64"
148MAKE_ARGS+=	ARCH=x86_64
149.endif
150
151CONFIGURE_ARGS+=	--disable-bsd-user
152PLIST_SUB+=	BSDUSER="@comment "
153#PLIST_SUB+=	BSDUSER=""
154
155PLIST_SUB+=	LINUXBOOT_DMA=""
156.endif
157
158post-patch-CDROM_DMA-off:
159	@${REINPLACE_CMD} -e '/USE_DMA_CDROM/d' ${WRKSRC}/include/hw/ide/internal.h
160
161pre-patch:
162	${LN} -sf ${WRKSRC}/bsd-user/freebsd ${WRKSRC}/bsd-user/midnightbsd
163
164do-build:
165	cd ${WRKSRC} && ${GMAKE} -j${MAKE_JOBS_NUMBER}
166
167do-install:
168	cd ${WRKSRC} && ${SETENV} ${FAKE_MAKEENV} gmake install
169
170.if !target(post-install)
171post-install:
172	${INSTALL_SCRIPT} ${FILESDIR}/qemu-ifup.sample ${PREFIX}/etc
173	${INSTALL_SCRIPT} ${FILESDIR}/qemu-ifdown.sample ${PREFIX}/etc
174	@${STRIP_CMD} ${PREFIX}/bin/qemu-*
175
176post-install-DOCS-on:
177	@(cd ${WRKSRC} && ${COPYTREE_SHARE} docs ${FAKE_DESTDIR}${DOCSDIR}/)
178.endif
179
180.include <bsd.port.mk>
181