aboutsummaryrefslogtreecommitdiff
path: root/emulators/qemu-user-static-devel
diff options
context:
space:
mode:
authorKyle Evans <kevans@FreeBSD.org>2019-12-02 03:40:49 +0000
committerKyle Evans <kevans@FreeBSD.org>2019-12-02 03:40:49 +0000
commit2f03a12d35cd39131f9771998d986929951b624c (patch)
tree5bd1265da0e7c94867cf0e709e3c7b9e11fed0ec /emulators/qemu-user-static-devel
parent1c9ba209f9f0c01bf548253d93986972f24af371 (diff)
downloadports-2f03a12d35cd39131f9771998d986929951b624c.tar.gz
ports-2f03a12d35cd39131f9771998d986929951b624c.zip
NEW PORT: emulators/qemu-user-static-devel: QEMU user-mode emulation
This port represents the to-be-released version of qemu-user-static for testing prior to unleashing it upon the community at large and the package building infrastructure. Currently, it is based on the bsd-user-rebase-3.1 branch that moves the base qemu version of this work forward. The main highlight of the update to 3.1 is initial riscv64 bsd-user support, submitted by Embecosm. This version of the port is also notably no longer based on the master port, qemu-sbruno, but repocopied from it due to reusing a good portion of it. As such, it's been severely reduced to eliminate all of the bits not relevant to building bsd-user/ (including the various port options), so much of the diff is eliminating the option-enabled checks and combining them all into a single CONFIGURE_ARGS/MAKE_ARGS, along with some additional --disable-flags for things that we certainly don't need. The python2.7 version restriction has been dropped as qemu's actually supported py3+ since at least the 2.x version we have over in qemu-sbruno, A follow-up commit will also drop the version restrictions in the other qemu ports that still have it to be proactive about this stuff as Python2 reaches EOL. Q/A: * portlint: looks fine * testport: 11.3, -CURRENT; amd64 PR: 242253 Reviewed by: koobs (ports) Approved by: koobs (ports)
Notes
Notes: svn path=/head/; revision=518822
Diffstat (limited to 'emulators/qemu-user-static-devel')
-rw-r--r--emulators/qemu-user-static-devel/Makefile91
-rw-r--r--emulators/qemu-user-static-devel/distinfo5
-rw-r--r--emulators/qemu-user-static-devel/files/qemu_user_static.in164
-rw-r--r--emulators/qemu-user-static-devel/pkg-descr22
-rw-r--r--emulators/qemu-user-static-devel/pkg-plist13
5 files changed, 295 insertions, 0 deletions
diff --git a/emulators/qemu-user-static-devel/Makefile b/emulators/qemu-user-static-devel/Makefile
new file mode 100644
index 000000000000..99491205f845
--- /dev/null
+++ b/emulators/qemu-user-static-devel/Makefile
@@ -0,0 +1,91 @@
+# $FreeBSD$
+
+PORTNAME= qemu
+PORTVERSION= 3.1.0
+CATEGORIES= emulators
+PKGNAMESUFFIX= -user-static-devel
+DIST_SUBDIR= qemu/${PORTVERSION}
+
+MAINTAINER= emulation@FreeBSD.org
+COMMENT= QEMU CPU Emulator (github bsd-user branch)
+
+LICENSE= GPLv2
+LICENSE_FILE= ${WRKSRC}/COPYING
+
+ONLY_FOR_ARCHS= amd64 powerpc powerpc64
+CONFLICTS_INSTALL= qemu-user-static-[0-9]*
+
+USES= bison compiler:c11 gmake perl5 pkgconfig python:build
+USE_GITHUB= yes
+GH_TUPLE= seanbruno:qemu-bsd-user:0337421f238 \
+ qemu:keycodemapdb:10739aa:keycodemapdb/ui/keycodemapdb
+HAS_CONFIGURE= yes
+USE_PERL5= build
+MAKE_ENV+= BSD_MAKE="${MAKE}" V=1
+
+USE_RC_SUBR= qemu_user_static
+SUB_LIST= NAME=qemu_user_static
+
+# When static linking we have a build dependency on libglib-2.0.a, otherwise
+# we use glib20 in the usual way (shared-lib runtime dependency).
+BUILD_DEPENDS+= ${LOCALBASE}/lib/libglib-2.0.a:devel/glib20
+
+.include <bsd.port.pre.mk>
+
+CONFIGURE_ARGS+= --localstatedir=/var
+CONFIGURE_ARGS+= --extra-ldflags=-L${LOCALBASE}/lib
+CONFIGURE_ARGS+= --extra-cflags=-I${LOCALBASE}/include
+CONFIGURE_ARGS+= --disable-libssh2
+
+QEMU_TARGETS= i386-bsd-user sparc-bsd-user arm-bsd-user mips-bsd-user mipsel-bsd-user ppc-bsd-user
+.if ${ARCH} == "amd64"
+QEMU_TARGETS+= x86_64-bsd-user riscv64-bsd-user sparc64-bsd-user mips64-bsd-user mips64el-bsd-user ppc64-bsd-user aarch64-bsd-user
+PLIST_SUB+= 64BIT=""
+.else
+PLIST_SUB+= 64BIT="@comment "
+.endif
+CONFIGURE_ARGS+= --target-list=${QEMU_TARGETS:ts,}
+
+SSP_CFLAGS?= -fstack-protector # XXX -strong crashes qemu-user-static
+WITHOUT_CPU_CFLAGS=yes #to avoid problems with register allocation
+CFLAGS:= ${CFLAGS:C/-fno-tree-vrp//}
+CFLAGS+= -Wno-address-of-packed-member
+CFLAGS+= -D_WANT_SEMUN
+CONFIGURE_ARGS+= --prefix=${PREFIX} --cc=${CC} --enable-docs \
+ --disable-linux-user --disable-linux-aio \
+ --disable-kvm --disable-xen \
+ --smbd=${LOCALBASE}/sbin/smbd \
+ --enable-debug \
+ --enable-debug-info \
+ --static \
+ --python=${PYTHON_CMD} \
+ --disable-sdl --disable-gtk --disable-vte --disable-gnutls --disable-vnc \
+ --disable-curl --disable-opengl --disable-usb-redir --disable-pcap \
+ --disable-docs --disable-tools --disable-system --disable-guest-agent \
+ --extra-cflags=-I${WRKSRC}\ -I${LOCALBASE}/include\ -DPREFIX=\\\"\"${PREFIX}\\\"\"
+
+QEMU_ARCH= ${ARCH:C/amd64/x86_64/:C/powerpc/ppc/}
+MAKE_ARGS+= ARCH=${QEMU_ARCH}
+
+post-patch:
+ @${REINPLACE_CMD} -E \
+ -e "s|^(CFLAGS=).*|\1${CFLAGS} -fno-strict-aliasing|" \
+ -e "s|^(LDFLAGS=).*|\1${LDFLAGS}|" \
+ ${WRKSRC}/Makefile.target
+ @${REINPLACE_CMD} -E \
+ -e "s|^(CFLAGS=).*|\1${CFLAGS} -fno-strict-aliasing -I.|" \
+ -e "s|^(LDFLAGS=).*|\1${LDFLAGS}|" \
+ ${WRKSRC}/Makefile
+
+post-install:
+ @${MV} ${STAGEDIR}${PREFIX}/etc/rc.d ${WRKDIR}
+ @${RM} -r ${STAGEDIR}${PREFIX}/etc
+ @${MKDIR} ${STAGEDIR}${PREFIX}/etc
+ @${MV} ${WRKDIR}/rc.d ${STAGEDIR}${PREFIX}/etc
+ @${RM} -r ${STAGEDIR}${PREFIX}/man
+ @${RM} -r ${STAGEDIR}${DATADIR}
+ @${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/qemu-*
+ @(cd ${STAGEDIR}${PREFIX}/bin && \
+ for i in qemu-*; do ${MV} -i $$i $$i-static; done)
+
+.include <bsd.port.post.mk>
diff --git a/emulators/qemu-user-static-devel/distinfo b/emulators/qemu-user-static-devel/distinfo
new file mode 100644
index 000000000000..17550974da8a
--- /dev/null
+++ b/emulators/qemu-user-static-devel/distinfo
@@ -0,0 +1,5 @@
+TIMESTAMP = 1574823953
+SHA256 (qemu/3.1.0/seanbruno-qemu-bsd-user-3.1.0-0337421f238_GH0.tar.gz) = 7ae7340a2b99e24e0d85b8d632ecef41ddd3ef76382af4dbe6dab082d3c4d16a
+SIZE (qemu/3.1.0/seanbruno-qemu-bsd-user-3.1.0-0337421f238_GH0.tar.gz) = 16903184
+SHA256 (qemu/3.1.0/qemu-keycodemapdb-10739aa_GH0.tar.gz) = ae43fb1e2b07b78be88a7882306b6e71383eb77472a35d7d78fed21e345d134a
+SIZE (qemu/3.1.0/qemu-keycodemapdb-10739aa_GH0.tar.gz) = 47895
diff --git a/emulators/qemu-user-static-devel/files/qemu_user_static.in b/emulators/qemu-user-static-devel/files/qemu_user_static.in
new file mode 100644
index 000000000000..4022421f8963
--- /dev/null
+++ b/emulators/qemu-user-static-devel/files/qemu_user_static.in
@@ -0,0 +1,164 @@
+#!/bin/sh
+#
+# $FreeBSD$
+#
+
+# PROVIDE: %%NAME%%
+# REQUIRE: LOGIN
+# KEYWORD: shutdown
+
+# Add the following lines to /etc/rc.conf to enable `%%NAME%%':
+#
+# %%NAME%%_enable="YES"
+#
+
+. /etc/rc.subr
+
+name=%%NAME%%
+rcvar=%%NAME%%_enable
+
+# read configuration and set defaults
+load_rc_config "$name"
+
+: ${%%NAME%%_enable:="NO"}
+
+BINMISCCTL=/usr/sbin/binmiscctl
+QEMU_DIR=%%PREFIX%%/bin
+QEMU_PREFIX=qemu-
+QEMU_SUFFIX=-static
+
+start_cmd=%%NAME%%_start
+stop_cmd=%%NAME%%_stop
+extra_commands=list
+list_cmd="${BINMISCCTL} list"
+
+%%NAME%%_start()
+{
+ # register arm interpreter styled 'arm'
+ interpreter=${QEMU_DIR}/${QEMU_PREFIX}arm${QEMU_SUFFIX}
+ if [ -x "${interpreter}" ]; then
+ ${BINMISCCTL} add arm --interpreter "${interpreter}" \
+ --magic "\x7f\x45\x4c\x46\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28\x00" \
+ --mask "\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff" \
+ --size 20 --set-enabled
+ else
+ echo "$0: interpreter ${interpreter} not found, cannot register."
+ fi
+ # register armv6 interpreter styled 'arm'
+ interpreter=${QEMU_DIR}/${QEMU_PREFIX}arm${QEMU_SUFFIX}
+ if [ -x "${interpreter}" ]; then
+ ${BINMISCCTL} add armv6 --interpreter "${interpreter}" \
+ --magic "\x7f\x45\x4c\x46\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28\x00" \
+ --mask "\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff" \
+ --size 20 --set-enabled
+ else
+ echo "$0: interpreter ${interpreter} not found, cannot register."
+ fi
+ # register armv7 interpreter styled 'arm'
+ interpreter=${QEMU_DIR}/${QEMU_PREFIX}arm${QEMU_SUFFIX}
+ if [ -x "${interpreter}" ]; then
+ ${BINMISCCTL} add armv7 --interpreter "${interpreter}" \
+ --magic "\x7f\x45\x4c\x46\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28\x00" \
+ --mask "\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff" \
+ --size 20 --set-enabled
+ else
+ echo "$0: interpreter ${interpreter} not found, cannot register."
+ fi
+ # register aarch64 interpreter styled 'aarch64'
+ interpreter=${QEMU_DIR}/${QEMU_PREFIX}aarch64${QEMU_SUFFIX}
+ if [ -x "${interpreter}" ]; then
+ ${BINMISCCTL} add aarch64 --interpreter "${interpreter}" \
+ --magic "\x7f\x45\x4c\x46\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xb7\x00" \
+ --mask "\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff" \
+ --size 20 --set-enabled
+ else
+ echo "$0: interpreter ${interpreter} not found, cannot register."
+ fi
+ # register mips interpreter styled 'mips'
+ interpreter=${QEMU_DIR}/${QEMU_PREFIX}mips${QEMU_SUFFIX}
+ if [ -x "${interpreter}" ]; then
+ ${BINMISCCTL} add mips --interpreter "${interpreter}" \
+ --magic "\x7f\x45\x4c\x46\x01\x02\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x08" \
+ --mask "\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff" \
+ --size 20 --set-enabled
+ else
+ echo "$0: interpreter ${interpreter} not found, cannot register."
+ fi
+ # register mipsle interpreter styled 'mipsel'
+ interpreter=${QEMU_DIR}/${QEMU_PREFIX}mipsel${QEMU_SUFFIX}
+ if [ -x "${interpreter}" ]; then
+ ${BINMISCCTL} add mipsel --interpreter "${interpreter}" \
+ --magic "\x7f\x45\x4c\x46\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x08\x00" \
+ --mask "\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff" \
+ --size 20 --set-enabled
+ else
+ echo "$0: interpreter ${interpreter} not found, cannot register."
+ fi
+ # register mips64 interpreter styled 'mips64'
+ interpreter=${QEMU_DIR}/${QEMU_PREFIX}mips64${QEMU_SUFFIX}
+ if [ -x "${interpreter}" ]; then
+ ${BINMISCCTL} add mips64 --interpreter "${interpreter}" \
+ --magic "\x7f\x45\x4c\x46\x02\x02\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x08" \
+ --mask "\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff" \
+ --size 20 --set-enabled
+ else
+ echo "$0: interpreter ${interpreter} not found, cannot register."
+ fi
+ # register powerpc interpreter styled 'ppc'
+ interpreter=${QEMU_DIR}/${QEMU_PREFIX}ppc${QEMU_SUFFIX}
+ if [ -x "${interpreter}" ]; then
+ ${BINMISCCTL} add powerpc --interpreter "${interpreter}" \
+ --magic "\x7f\x45\x4c\x46\x01\x02\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x14" \
+ --mask "\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff" \
+ --size 20 --set-enabled
+ else
+ echo "$0: interpreter ${interpreter} not found, cannot register."
+ fi
+ # register powerpc64 interpreter styled 'ppc64'
+ interpreter=${QEMU_DIR}/${QEMU_PREFIX}ppc64${QEMU_SUFFIX}
+ if [ -x "${interpreter}" ]; then
+ ${BINMISCCTL} add powerpc64 --interpreter "${interpreter}" \
+ --magic "\x7f\x45\x4c\x46\x02\x02\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x15" \
+ --mask "\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff" \
+ --size 20 --set-enabled
+ else
+ echo "$0: interpreter ${interpreter} not found, cannot register."
+ fi
+ # register riscv64 interpreter styled 'riscv64'
+ interpreter=${QEMU_DIR}/${QEMU_PREFIX}riscv64${QEMU_SUFFIX}
+ if [ -x "${interpreter}" ]; then
+ ${BINMISCCTL} add riscv64 --interpreter "${interpreter}" \
+ --magic "\x7f\x45\x4c\x46\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xf3\x00" \
+ --mask "\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff" \
+ --size 20 --set-enabled
+ else
+ echo "$0: interpreter ${interpreter} not found, cannot register."
+ fi
+ # register sparc64 interpreter styled 'sparc64'
+ interpreter=${QEMU_DIR}/${QEMU_PREFIX}sparc64${QEMU_SUFFIX}
+ if [ -x "${interpreter}" ]; then
+ ${BINMISCCTL} add sparc64 --interpreter "${interpreter}" \
+ --magic "\x7f\x45\x4c\x46\x02\x02\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x2b" \
+ --mask "\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff" \
+ --size 20 --set-enabled
+ else
+ echo "$0: interpreter ${interpreter} not found, cannot register."
+ fi
+}
+
+%%NAME%%_stop()
+{
+ ${BINMISCCTL} remove arm
+ ${BINMISCCTL} remove armv6
+ ${BINMISCCTL} remove armv7
+ ${BINMISCCTL} remove aarch64
+ ${BINMISCCTL} remove mips
+ ${BINMISCCTL} remove mips64
+ ${BINMISCCTL} remove mipsel
+ ${BINMISCCTL} remove powerpc
+ ${BINMISCCTL} remove powerpc64
+ ${BINMISCCTL} remove riscv64
+ ${BINMISCCTL} remove sparc64
+}
+
+run_rc_command "$1"
diff --git a/emulators/qemu-user-static-devel/pkg-descr b/emulators/qemu-user-static-devel/pkg-descr
new file mode 100644
index 000000000000..7bfc44d21531
--- /dev/null
+++ b/emulators/qemu-user-static-devel/pkg-descr
@@ -0,0 +1,22 @@
+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.
+
+This port builds static bsd-user targets named like qemu-mips-static. While
+still being experimental, people have already built many armv6/mips/mips64 ports
+using these and, e.g., poudriere. Some notes are also here:
+
+ http://wiki.freebsd.org/QemuUserModeHowTo
+
+WWW: http://wiki.qemu.org/Main_Page
diff --git a/emulators/qemu-user-static-devel/pkg-plist b/emulators/qemu-user-static-devel/pkg-plist
new file mode 100644
index 000000000000..4d2d53891d55
--- /dev/null
+++ b/emulators/qemu-user-static-devel/pkg-plist
@@ -0,0 +1,13 @@
+%%64BIT%%bin/qemu-aarch64-static
+bin/qemu-arm-static
+bin/qemu-i386-static
+bin/qemu-mips-static
+%%64BIT%%bin/qemu-mips64-static
+%%64BIT%%bin/qemu-mips64el-static
+bin/qemu-mipsel-static
+bin/qemu-ppc-static
+%%64BIT%%bin/qemu-ppc64-static
+%%64BIT%%bin/qemu-riscv64-static
+bin/qemu-sparc-static
+%%64BIT%%bin/qemu-sparc64-static
+%%64BIT%%bin/qemu-x86_64-static