1PORTNAME=	qemu
2DISTVERSION=	8.2.5
3PORTREVISION=	1
4CATEGORIES=	emulators
5MASTER_SITES=	https://download.qemu.org/
6DIST_SUBDIR=	qemu/${PORTVERSION}
7
8MAINTAINER=	ports@MidnightBSD.org
9COMMENT=	QEMU CPU Emulator ${${FLAVOR}_COMMENT} - 8.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=		8
25default_CONFLICTS_INSTALL=	qemu-devel qemu-nox11 qemu-tools qemu-utils \
26				qemu7* qemu8*
27nox11_PKGNAMESUFFIX=		8-nox11
28nox11_CONFLICTS_INSTALL=	qemu qemu-devel qemu* qemu7* qemu-guest-agent
29nox11_COMMENT=			(without X11)
30
31USES=		cpe gmake gnome ninja perl5 pkgconfig python:build shebangfix tar:xz
32SHEBANG_FILES=	scripts/xml-preprocess.py
33USE_GNOME=	glib20
34USE_PERL5=	build
35USES+=		iconv:wchar_t
36.if ${FLAVOR:U} != nox11
37USE_GNOME+=	cairo
38.endif
39
40HAS_CONFIGURE=		yes
41CONFIGURE_ARGS+=	--cc=${CC} \
42			--disable-guest-agent \
43			--disable-kvm \
44			--disable-linux-aio \
45			--disable-linux-user \
46			--disable-xen \
47			--extra-cflags=-I${WRKSRC}\ -I${LOCALBASE}/include\ -DPREFIX=\\\"\"${PREFIX}\\\"\" \
48			--extra-ldflags=-L${LOCALBASE}/lib \
49			--extra-ldflags=-L/usr/lib \
50			--localstatedir=/var \
51			--mandir=${PREFIX}/share/man \
52			--prefix=${PREFIX} \
53			--python=${PYTHON_CMD}
54CONFIGURE_ARGS+=	--enable-fdt=system \
55			--enable-netmap
56
57CFLAGS:=	${CFLAGS:C/-fno-tree-vrp//}
58WITHOUT_CPU_CFLAGS=	yes #to avoid problems with register allocation
59
60PORTDOCS=	.buildinfo _static/* about/* dbus-dbusindex.html devel/* docs \
61		genindex.html index.html interop/* objects.inv search.html \
62		searchindex.js specs/* system/* tools/* user/*
63
64OPTIONS_DEFINE=			CAPSTONE CDROM_DMA CURL DEBUG DOCS GNUTLS GTK3 \
65				ISCSI JPEG OPENGL PNG SAMBA SASL STATIC_LINK \
66				STRIP USBREDIR VDE X11 X86_TARGETS
67OPTIONS_DEFAULT=		CDROM_DMA CURL GNUTLS GTK3 JPEG NCURSES_DEFAULT \
68				OPENGL PNG SASL VDE X11
69OPTIONS_SINGLE=			NCURSES
70OPTIONS_SINGLE_NCURSES=		NCURSES_BASE NCURSES_DEFAULT NCURSES_PORT
71.if ${FLAVOR:U} == nox11
72OPTIONS_EXCLUDE:=		GTK3 OPENGL X11
73.endif
74OPTIONS_SUB=			yes
75CAPSTONE_DESC=			Disassembly framework support
76CDROM_DMA_DESC=			IDE CDROM DMA
77GNUTLS_DESC=			gnutls dependency (vnc encryption)
78ISCSI_DESC=			libiscsi dependency (iSCSI client for emulated drives)
79JPEG_DESC=			jpeg dependency (vnc lossy compression)
80NCURSES_BASE_DESC=		Depend on ncurses in base
81NCURSES_DEFAULT_DESC=		Depend on ncurses (ports if installed, otherwise base)
82NCURSES_PORT_DESC=		Depend on devel/ncurses in ports
83PNG_DESC=			png dependency (vnc compression)
84SAMBA_DESC=			samba dependency (for -smb)
85SASL_DESC=			cyrus-sasl dependency (vnc encryption)
86STATIC_LINK_DESC=		Statically link the executables
87USBREDIR_DESC=			usb device network redirection (experimental!)
88VDE_DESC=			vde dependency (for vde networking)
89X86_TARGETS_DESC=		Build only x86 system targets
90CAPSTONE_LIB_DEPENDS=		libcapstone.so:devel/capstone
91CAPSTONE_CONFIGURE_ON=		--enable-capstone \
92				--extra-cflags=-I${LOCALBASE}/include/capstone
93CAPSTONE_CONFIGURE_OFF=		--disable-capstone
94CURL_LIB_DEPENDS=		libcurl.so:ftp/curl
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_LIB_DEPENDS_OFF=	libdw.so:devel/elfutils
140X86_TARGETS_USES_OFF=		xorg
141X86_TARGETS_USE_OFF=		XORG=pixman,x11
142X86_TARGETS_CONFIGURE_ON=	--target-list='i386-softmmu i386-bsd-user x86_64-softmmu x86_64-bsd-user'
143.endif
144
145.include <bsd.mport.options.mk>
146
147.if (empty(FLAVOR) || ${FLAVOR:U} == default || ${FLAVOR:U} == nox11)
148.if ${ARCH} == "amd64"
149MAKE_ARGS+=	ARCH=x86_64
150.endif
151
152#CONFIGURE_ARGS+=	--disable-bsd-user
153#PLIST_SUB+=	BSDUSER="@comment "
154PLIST_SUB+=	BSDUSER=""
155
156PLIST_SUB+=	LINUXBOOT_DMA=""
157.endif
158
159pre-patch:
160	${LN} -sf ${WRKSRC}/bsd-user/freebsd ${WRKSRC}/bsd-user/midnightbsd
161
162post-patch-CDROM_DMA-off:
163	@${REINPLACE_CMD} -e '/USE_DMA_CDROM/d' ${WRKSRC}/include/hw/ide/internal.h
164
165do-build:
166	cd ${WRKSRC} && ${SETENVI} ${WRK_ENV} ${GMAKE} -j${MAKE_JOBS_NUMBER}
167
168do-install:
169	cd ${WRKSRC} && ${SETENVI} ${WRK_ENV} DESTDIR=${FAKE_DESTDIR} gmake install
170
171.if !target(post-install)
172post-install:
173	${INSTALL_SCRIPT} ${FILESDIR}/qemu-ifup.sample ${PREFIX}/etc
174	${INSTALL_SCRIPT} ${FILESDIR}/qemu-ifdown.sample ${PREFIX}/etc
175	-${STRIP_CMD} ${PREFIX}/bin/qemu-*
176
177post-install-DOCS-on:
178	@(cd ${WRKSRC} && ${COPYTREE_SHARE} docs ${FAKE_DESTDIR}${DOCSDIR}/)
179.endif
180
181.include <bsd.port.mk>
182