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)
This commit is contained in:
parent
1c9ba209f9
commit
2f03a12d35
Notes:
svn2git
2021-03-31 03:12:20 +00:00
svn path=/head/; revision=518822
@ -114,6 +114,7 @@
|
||||
SUBDIR += qemu-powernv
|
||||
SUBDIR += qemu-sbruno
|
||||
SUBDIR += qemu-user-static
|
||||
SUBDIR += qemu-user-static-devel
|
||||
SUBDIR += qemu-utils
|
||||
SUBDIR += qemu30
|
||||
SUBDIR += qemu31
|
||||
|
@ -40,6 +40,8 @@ OPTIONS_DEFAULT=X11 GTK2 OPENGL GNUTLS SASL JPEG PNG CDROM_DMA CURL PCAP
|
||||
|
||||
.if !defined(QEMU_USER_STATIC)
|
||||
CONFLICTS_INSTALL= qemu-[0-9]* qemu-devel-*
|
||||
.else
|
||||
CONFLICTS_INSTALL= qemu-user-static-devel-*
|
||||
.endif
|
||||
|
||||
.if defined(QEMU_USER_STATIC)
|
||||
|
91
emulators/qemu-user-static-devel/Makefile
Normal file
91
emulators/qemu-user-static-devel/Makefile
Normal file
@ -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>
|
5
emulators/qemu-user-static-devel/distinfo
Normal file
5
emulators/qemu-user-static-devel/distinfo
Normal file
@ -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
|
164
emulators/qemu-user-static-devel/files/qemu_user_static.in
Normal file
164
emulators/qemu-user-static-devel/files/qemu_user_static.in
Normal file
@ -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"
|
22
emulators/qemu-user-static-devel/pkg-descr
Normal file
22
emulators/qemu-user-static-devel/pkg-descr
Normal file
@ -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
|
13
emulators/qemu-user-static-devel/pkg-plist
Normal file
13
emulators/qemu-user-static-devel/pkg-plist
Normal file
@ -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
|
Loading…
Reference in New Issue
Block a user