qemu-charm: an easy arm chroot setup for x86

qemu-kvm: cleaned up
This commit is contained in:
grimmlin 2011-01-21 16:23:16 +00:00
parent 29f355f527
commit 741134de86
11 changed files with 198 additions and 685 deletions

View file

@ -0,0 +1,4 @@
AUX charm 2640 RMD160 bd8d75bf02c8ae626768ef0acab6cf4b64a6e9e0 SHA1 6a41598896d5c476d3192b715e35367a9b2f8827 SHA256 dbd898abf8be5564abfa6d80eddfe55ec9ef374b98ad768c89d9d363ed56a5e0
AUX qemu-wrapper.c 406 RMD160 60add959b4970cfaa8a81cac9acf3f5936f2b79a SHA1 75e73c07e71af7773be26301d5767408357680fe SHA256 1caba8996cdd24a3e8584963f6a8df844a208a329478f88bc8b863b4df822453
DIST qemu-0.13.0.tar.gz 5184531 RMD160 4a6faaf38d5616fb7bedc1a6408de1dbb3ec360c SHA1 250bba1fdb505a787c48331b6b02f54282edfc76 SHA256 1e6f5851b05cea6e377c835f4668408d4124cfb845f9948d922808743c5fd877
EBUILD qemu-charm-0.13.0.ebuild 4725 RMD160 a0ae5f22e2f9ea1ae2e629928be985b27e03a9f4 SHA1 bf5036a2027a5431103925f1842ffff14383b61b SHA256 e7ae7daeafc74c485940564d8ed48485ec0ab8ff69bda2d84482800cd2528877

View file

@ -0,0 +1,30 @@
#!/bin/sh
[ -z $1 ] && exit 1
[ -d /proc/sys/fs/binfmt_misc ] || modprobe binfmt_misc
[ -f /proc/sys/fs/binfmt_misc/register ] || mount binfmt_misc -t binfmt_misc /proc/sys/fs/binfmt_misc
echo ':arm:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/qemu-wrapper:' > /proc/sys/fs/binfmt_misc/register
#echo ':armeb:M::\x7fELF\x01\x02\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff:/usr/bin/qemu-armeb:' > /proc/sys/fs/binfmt_misc/register
#echo ':alpha:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x26\x90:\xff\xff\xff\xff\xff\xfe\xfe\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-alpha:' > /proc/sys/fs/binfmt_misc/register
#echo ':mips:M::\x7fELF\x01\x02\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x08:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff:/usr/bin/qemu-mips:' > /proc/sys/fs/binfmt_misc/register
#echo ':mipsel:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x08\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-mipsel:' > /proc/sys/fs/binfmt_misc/register
#echo ':ppc:M::\x7fELF\x01\x02\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x14:\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff:/usr/bin/qemu-ppc:' > /proc/sys/fs/binfmt_misc/register
#echo ':sh4:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x2a\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfb\xff\xff\xff:/usr/bin/qemu-sh4:' >/proc/sys/fs/binfmt_misc/register
#echo ':sh4eb:M::\x7fELF\x01\x02\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x2a:\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff:/usr/bin/qemu-sh4eb:' >/proc/sys/fs/binfmt_misc/register
#echo ':sparc:M::\x7fELF\x01\x02\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x02:\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff:/usr/bin/qemu-sparc:' > /proc/sys/fs/binfmt_misc/register
mount --bind /usr/portage $1/usr/portage
[ -d /usr/local/portage ] && mount --bind /usr/local/portage $1/usr/local/portage
mount --bind /proc $1/proc
mount --bind /sys $1/sys
#mount -t tmpfs tmpfs $1/var/tmp/portage
chroot $1 /bin/busybox mdev -s
chroot $1 /bin/bash --login
# (Unmount stuff when not in use)
umount $1/usr/local/portage
#umount $1/var/tmp/portage
umount $1/usr/portage
umount $1/sys
umount $1/proc

View file

@ -0,0 +1,16 @@
#include <stdio.h>
#include <unistd.h>
#include <string.h>
int main(int argc, char **argv, char **envp) {
char *newargv[argc + 3];
newargv[0] = argv[0];
newargv[1] = "-cpu";
newargv[2] = "ARMCPU";
memcpy(&newargv[3], &argv[1], sizeof(*argv) * (argc - 1));
newargv[argc + 2] = NULL;
return execve("/usr/bin/qemu-arm", newargv, envp);
}

View file

@ -0,0 +1,148 @@
# Copyright 1999-2010 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/app-emulation/qemu/qemu-0.11.1.ebuild,v 1.2 2010/01/05 23:58:40 flameeyes Exp $
EAPI="2"
inherit eutils flag-o-matic toolchain-funcs
DESCRIPTION="QEMU arm user-land emulation for CHroot ARM setup on x86*"
HOMEPAGE="http://www.gentoo.org/proj/en/base/embedded/handbook/?part=1&chap=5"
SRC_URI="http://wiki.qemu.org/download/${P/-charm/}.tar.gz"
LICENSE="GPL-2"
SLOT="0"
KEYWORDS="-*"
IUSE="+static +cortex-a8 -cortex-a9"
S=${WORKDIR}/${P/-charm/}
# See the content of the configure script of QEmu
# Those in IUSE_USER_TARGETS are Linux specific
COMMON_TARGETS="arm"
IUSE_SOFTMMU_TARGETS=""
IUSE_USER_TARGETS="${COMMON_TARGETS}"
for target in ${IUSE_SOFTMMU_TARGETS}; do
IUSE="${IUSE} +qemu_softmmu_targets_${target}"
done
for target in ${IUSE_USER_TARGETS}; do
IUSE="${IUSE} +qemu_user_targets_${target}"
done
RDEPEND="!app-emulation/qemu-kvm[qemu_user_targets_arm]"
DEPEND="${RDEPEND}
sys-libs/zlib
app-text/texi2html"
src_prepare() {
cp "${FILESDIR}/qemu-wrapper.c" "${S}"
if use cortex-a8; then
if use cortex-a9; then
die "You must chose either cortex-a8 or a9 implementation"
fi
sed -e 's/ARMCPU/cortex-a8/' -i "${S}/qemu-wrapper.c"
elif use cortex-a9; then
sed -e 's/ARMCPU/cortex-a9/' -i "${S}/qemu-wrapper.c"
else
die "You must chose either cortex-a8 or a9 implementation"
fi
# avoid fdt till an updated release appears
sed -i -e 's:fdt="yes":fdt="no":' configure
# prevent docs to get automatically installed
sed -i '/$(DESTDIR)$(docdir)/d' Makefile
# Alter target makefiles to accept CFLAGS set via flag-o
sed -i 's/^\(C\|OP_C\|HELPER_C\)FLAGS=/\1FLAGS+=/' \
Makefile Makefile.target tests/Makefile
[[ -x /sbin/paxctl ]] && \
sed -i 's/^VL_LDFLAGS=$/VL_LDFLAGS=-Wl,-z,execheap/' \
Makefile.target
# Append CFLAGS while linking
sed -i 's/$(LDFLAGS)/$(QEMU_CFLAGS) $(CFLAGS) $(LDFLAGS)/' rules.mak
}
src_configure() {
local mycc conf_opts audio_opts softmmu_targets user_targets target_list
for target in ${IUSE_SOFTMMU_TARGETS} ; do
use "qemu_softmmu_targets_${target}" && \
softmmu_targets="${softmmu_targets} ${target}-softmmu"
done
for target in ${IUSE_USER_TARGETS} ; do
use "qemu_user_targets_${target}" && \
user_targets="${user_targets} ${target}-linux-user"
done
conf_opts="--disable-darwin-user --disable-bsd-user --disable-strip"
if test ! -z "${softmmu_targets}" ; then
einfo "Building following softmmu targets: ${softmmu_targets}"
use gnutls || conf_opts="$conf_opts --disable-vnc-tls"
use ncurses || conf_opts="$conf_opts --disable-curses"
use sasl || conf_opts="$conf_opts --disable-vnc-sasl"
use sdl || conf_opts="$conf_opts --disable-sdl"
use vde || conf_opts="$conf_opts --disable-vde"
use bluetooth || conf_opts="$conf_opts --disable-bluez"
use kvm || conf_opts="$conf_opts --disable-kvm"
audio_opts="oss"
use alsa && audio_opts="alsa $audio_opts"
use esd && audio_opts="esd $audio_opts"
use pulseaudio && audio_opts="pa $audio_opts"
use sdl && audio_opts="sdl $audio_opts"
else
einfo "Disabling softmmu emulation (no softmmu targets specified)"
conf_opts="$conf_opts --disable-system --disable-vnc-tls \
--disable-curses --disable-sdl --disable-vde \
--disable-kvm"
fi
if test ! -z "${user_targets}" ; then
einfo "Building following user targets: ${user_targets}"
conf_opts="$conf_opts --enable-linux-user"
else
einfo "Disabling usermode emulation (no usermode targets specified)"
conf_opts="$conf_opts --disable-linux-user"
fi
conf_opts="$conf_opts --prefix=/usr"
target_list="${softmmu_targets} ${user_targets}"
use static && conf_opts="${conf_opts} --static"
filter-flags -fPIE
./configure ${conf_opts} \
--audio-drv-list="$audio_opts" \
--cc=$(tc-getCC) --host-cc=$(tc-getCC) \
--target-list="${target_list}" \
|| die "configure failed"
gcc -static qemu-wrapper.c -o qemu-wrapper
}
src_install() {
cd "${S}"
dobin arm-linux-user/qemu-arm
insinto /
insopts -m755
doins qemu-wrapper
# dodoc Changelog MAINTAINERS TODO pci-ids.txt || die
}
pkg_postinst() {
elog "It is strongly encouraged to read"
elog "http://www.gentoo.org/proj/en/base/embedded/handbook/?part=1&chap=5"
elog "This package takes care of section 1.1 and 1.4"
elog ""
elog "Now you can download an arm stage3 and uncompress it somewhere."
elog "Build a binpkg from this one: quickpkg ${P}"
elog "And emerg eit to the unpacked arm stage3:"
elog "ROOT=path_to_arm_stage3/ emerge -K ${P}"
elog "There is a chroot script in ${FILESDIR}/charm to help chroot everytime"
elog "The chroot script takes care of 1.2 and part of 1.3"
echo
}

View file

@ -1,8 +0,0 @@
AUX qemu-0.11.0-mips64-user-fix.patch 313 RMD160 db016e0a48990a435dd6cf6e807145b33ada4908 SHA1 2ea913b1bcd29734a6d4011794bdb4aa3599a184 SHA256 b4173fc177bd0d0ba67f5551a3512047a19a9b2c0a122f968e32fbd834848d2f
AUX qemu-kvm 61 RMD160 83882e881a067065258f562ad1e60440666c85d3 SHA1 a965f19031e303d583bd541c9d8fff2214262e6b SHA256 211d51f0a7d3d2ba8c53016c75e2b483feadbb65e383b1eec81d9cebf6a22c29
AUX qemu-kvm-0.12.3-fix-crash-with-sdl.patch 4003 RMD160 1e8965e94537e24d0903a7a096c91e35f7013118 SHA1 a6a36da9613d90d45148aa133392bd342b83d1cd SHA256 aeca9f133c021726c0e3ce2a58843ee12d592669143d0b75e46b8e301b5cf102
AUX qemu-kvm-0.12.3-include-madvise-defines.patch 274 RMD160 2b2b454fabc3b5362c0479d581e5fb038e02aa97 SHA1 c34b51b9c0b5a69ab2ab7a8a64c804f7cbbbebf5 SHA256 0d33d22a853e9b1d19786c9ac53a515587a9753ff69a2f53e61c4764590e7821
DIST qemu-kvm-0.12.5-backports-1.tar.bz2 3668 RMD160 59e1d7e3d64377e2b77faf26c45206fbde4ee847 SHA1 5a4eb644243d11a96c2430546f7335c780ec9243 SHA256 c822969f0a86106d5cba97fae33c76eeea0bcc3ea13d617647474557ed0e4dbf
DIST qemu-kvm-0.12.5.tar.gz 4722351 RMD160 dc2686e70384a40601589cac2f2665254240710a SHA1 c316ac8a1b040e28275bf34911fbce14209c1563 SHA256 24c085aecbc784ea8b4837ca02bfe5086c7f91c8a88a0f607826692234af583f
EBUILD qemu-kvm-0.12.5-r1.ebuild 7911 RMD160 f78f0cf82f7d0f308d51150a83a6bba5daea851d SHA1 02b4a3ddda4d11a4e2893d403a7b6e2ec5b0713d SHA256 f3c8a721f106a28f679cd0bd920fd2920458dffe1d431dfb408537ced0182ec4
EBUILD qemu-kvm-9999.ebuild 7954 RMD160 4637e692e9df562f5db88b3c2561ca8a2ce9361f SHA1 76eaa4e457dc83602582c710cf86e8022edd1835 SHA256 80090bf54711b22278380ebe5a043583caa4a2db1676210020fe7e1b3098baa1

View file

@ -1,11 +0,0 @@
--- qemu-0.11.0.orig/linux-user/main.c 2009-10-23 02:19:57.000000000 +0200
+++ qemu-0.11.0/linux-user/main.c 2009-10-23 02:47:09.000000000 +0200
@@ -1469,6 +1469,8 @@
#ifdef TARGET_MIPS
+#define TARGET_QEMU_ESIGRETURN 255
+
#define MIPS_SYS(name, args) args,
static const uint8_t mips_syscall_args[] = {

View file

@ -1,2 +0,0 @@
#!/bin/sh
exec /usr/bin/qemu-system-x86_64 --enable-kvm "$@"

View file

@ -1,145 +0,0 @@
From ff5414990645653bf43bf64adfc1ca77ffb9edcb Mon Sep 17 00:00:00 2001
From: malc <av1474@comtv.ru>
Date: Sun, 17 Jan 2010 00:25:29 +0300
Subject: [PATCH] Revert "sdlaudio: make it suck less"
This reverts commit 4839abe78fd466a3cf06faa7c362154afd5404f1.
The commit was badly broken, Gentoo has sdl as the default driver,
consequently 5 gentoo users have hit the breakage and were kind enough
to report, so thank you:
Claes Gyllenswrd
vekin
Chris
But above all thanks to Toralf Foerster who actually provied enough
information to pinpoint the breakage to sdlaudio.
http://bugs.gentoo.org/show_bug.cgi?id=294269
---
audio/sdlaudio.c | 80 +++++++++++++++++++++++++++++++++--------------------
1 files changed, 50 insertions(+), 30 deletions(-)
diff --git a/audio/sdlaudio.c b/audio/sdlaudio.c
index aa39c33..8e7e5cb 100644
--- a/audio/sdlaudio.c
+++ b/audio/sdlaudio.c
@@ -41,8 +41,8 @@
typedef struct SDLVoiceOut {
HWVoiceOut hw;
int live;
+ int rpos;
int decr;
- int pending;
} SDLVoiceOut;
static struct {
@@ -225,10 +225,6 @@ static void sdl_callback (void *opaque, Uint8 *buf, int len)
HWVoiceOut *hw = &sdl->hw;
int samples = len >> hw->info.shift;
- if (sdl_lock (s, "sdl_callback")) {
- return;
- }
-
if (s->exit) {
return;
}
@@ -236,34 +232,49 @@ static void sdl_callback (void *opaque, Uint8 *buf, int len)
while (samples) {
int to_mix, decr;
- while (!sdl->pending) {
- if (sdl_unlock (s, "sdl_callback")) {
- return;
- }
-
- sdl_wait (s, "sdl_callback");
- if (s->exit) {
- return;
- }
-
- if (sdl_lock (s, "sdl_callback")) {
- return;
- }
- sdl->pending += sdl->live;
- sdl->live = 0;
+ /* dolog ("in callback samples=%d\n", samples); */
+ sdl_wait (s, "sdl_callback");
+ if (s->exit) {
+ return;
+ }
+
+ if (sdl_lock (s, "sdl_callback")) {
+ return;
+ }
+
+ if (audio_bug (AUDIO_FUNC, sdl->live < 0 || sdl->live > hw->samples)) {
+ dolog ("sdl->live=%d hw->samples=%d\n",
+ sdl->live, hw->samples);
+ return;
+ }
+
+ if (!sdl->live) {
+ goto again;
}
- to_mix = audio_MIN (samples, sdl->pending);
- decr = audio_pcm_hw_clip_out (hw, buf, to_mix, 0);
- buf += decr << hw->info.shift;
+ /* dolog ("in callback live=%d\n", live); */
+ to_mix = audio_MIN (samples, sdl->live);
+ decr = to_mix;
+ while (to_mix) {
+ int chunk = audio_MIN (to_mix, hw->samples - hw->rpos);
+ struct st_sample *src = hw->mix_buf + hw->rpos;
+
+ /* dolog ("in callback to_mix %d, chunk %d\n", to_mix, chunk); */
+ hw->clip (buf, src, chunk);
+ sdl->rpos = (sdl->rpos + chunk) % hw->samples;
+ to_mix -= chunk;
+ buf += chunk << hw->info.shift;
+ }
samples -= decr;
+ sdl->live -= decr;
sdl->decr += decr;
- sdl->pending -= decr;
- }
- if (sdl_unlock (s, "sdl_callback")) {
- return;
+ again:
+ if (sdl_unlock (s, "sdl_callback")) {
+ return;
+ }
}
+ /* dolog ("done len=%d\n", len); */
}
static int sdl_write_out (SWVoiceOut *sw, void *buf, int len)
@@ -281,9 +292,18 @@ static int sdl_run_out (HWVoiceOut *hw, int live)
return 0;
}
- sdl->live = live;
- decr = sdl->decr;
- sdl->decr = 0;
+ if (sdl->decr > live) {
+ ldebug ("sdl->decr %d live %d sdl->live %d\n",
+ sdl->decr,
+ live,
+ sdl->live);
+ }
+
+ decr = audio_MIN (sdl->decr, live);
+ sdl->decr -= decr;
+
+ sdl->live = live - decr;
+ hw->rpos = sdl->rpos;
if (sdl->live > 0) {
sdl_unlock_and_post (s, "sdl_run_out");
--
1.7.0.4

View file

@ -1,12 +0,0 @@
--- exec.c 2010-02-26 03:34:00.000000000 +0100
+++ exec.c.new 2010-04-03 15:31:53.000000000 +0200
@@ -22,6 +22,9 @@
#else
#include <sys/types.h>
#include <sys/mman.h>
+#ifndef MADV_MERGEABLE
+#include <asm/mman.h>
+#endif
#endif
#include <stdlib.h>
#include <stdio.h>

View file

@ -1,255 +0,0 @@
# Copyright 1999-2010 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/app-emulation/qemu-kvm/qemu-kvm-0.12.5-r1.ebuild,v 1.5 2010/09/06 10:56:40 jmbsvicetto Exp $
BACKPORTS=1
EAPI="2"
if [[ ${PV} = *9999* ]]; then
EGIT_REPO_URI="git://git.kernel.org/pub/scm/virt/kvm/qemu-kvm.git"
GIT_ECLASS="git"
fi
inherit eutils flag-o-matic ${GIT_ECLASS} linux-info toolchain-funcs
if [[ ${PV} = *9999* ]]; then
SRC_URI=""
KEYWORDS=""
else
SRC_URI="mirror://sourceforge/kvm/${PN}/${P}.tar.gz
${BACKPORTS:+mirror://gentoo/${P}-backports-${BACKPORTS}.tar.bz2}"
KEYWORDS="~amd64 ~arm ~ppc ~ppc64 ~x86"
fi
DESCRIPTION="QEMU + Kernel-based Virtual Machine userland tools"
HOMEPAGE="http://www.linux-kvm.org"
LICENSE="GPL-2"
SLOT="0"
# xen is disabled until the deps are fixed
# charm keeps only static-bins
IUSE="+aio alsa bluetooth brltty charm curl esd fdt hardened kvm-trace \
ncurses pulseaudio qemu-ifup sasl sdl ssl static vde"
COMMON_TARGETS="i386 x86_64 arm cris m68k microblaze mips mipsel ppc ppc64 sh4 sh4eb sparc sparc64"
IUSE_SOFTMMU_TARGETS="${COMMON_TARGETS} mips64 mips64el ppcemb"
IUSE_USER_TARGETS="${COMMON_TARGETS} alpha armeb ppc64abi32 sparc32plus"
for target in ${IUSE_SOFTMMU_TARGETS}; do
IUSE="${IUSE} +qemu_softmmu_targets_${target}"
done
for target in ${IUSE_USER_TARGETS}; do
IUSE="${IUSE} +qemu_user_targets_${target}"
done
RESTRICT="test"
RDEPEND="
!app-emulation/kqemu
!arm? ( !app-emulation/qemu )
!app-emulation/qemu-softmmu
!app-emulation/qemu-user
!app-emulation/qemu-kvm-spice
sys-apps/pciutils
>=sys-apps/util-linux-2.16.0
sys-libs/zlib
aio? ( dev-libs/libaio )
alsa? ( >=media-libs/alsa-lib-1.0.13 )
bluetooth? ( net-wireless/bluez )
brltty? ( app-accessibility/brltty )
curl? ( net-misc/curl )
esd? ( media-sound/esound )
fdt? ( sys-apps/dtc )
ncurses? ( sys-libs/ncurses )
pulseaudio? ( media-sound/pulseaudio )
qemu-ifup? ( sys-apps/iproute2 net-misc/bridge-utils )
sasl? ( dev-libs/cyrus-sasl )
sdl? ( >=media-libs/libsdl-1.2.11[X] )
ssl? ( net-libs/gnutls )
vde? ( net-misc/vde )
"
DEPEND="${RDEPEND}
app-text/texi2html
>=sys-kernel/linux-headers-2.6.29
ssl? ( dev-util/pkgconfig )
"
kvm_kern_warn() {
eerror "Please enable KVM support in your kernel, found at:"
eerror
eerror " Virtualization"
eerror " Kernel-based Virtual Machine (KVM) support"
eerror
}
pkg_setup() {
local counter="0" check
use qemu_softmmu_targets_x86_64 || ewarn "You disabled default target QEMU_SOFTMMU_TARGETS=x86_64"
for check in ${IUSE_SOFTMMU_TARGETS} ; do
use "qemu_softmmu_targets_${check}" && counter="1"
done
# [[ ${counter} == 0 ]] && die "You need to set at least 1 target in QEMU_SOFTMMU_TARGETS"
if kernel_is lt 2 6 25; then
eerror "This version of KVM requres a host kernel of 2.6.25 or higher."
eerror "Either upgrade your kernel"
else
if ! linux_config_exists; then
eerror "Unable to check your kernel for KVM support"
kvm_kern_warn
elif ! linux_chkconfig_present KVM; then
kvm_kern_warn
fi
fi
enewgroup kvm
}
src_prepare() {
# prevent docs to get automatically installed
sed -i '/$(DESTDIR)$(docdir)/d' Makefile || die
# Alter target makefiles to accept CFLAGS set via flag-o
sed -i 's/^\(C\|OP_C\|HELPER_C\)FLAGS=/\1FLAGS+=/' \
Makefile Makefile.target || die
# append CFLAGS while linking
sed -i 's/$(LDFLAGS)/$(QEMU_CFLAGS) $(CFLAGS) $(LDFLAGS)/' rules.mak || die
# remove part to make udev happy
sed -e 's~NAME="%k", ~~' -i kvm/scripts/65-kvm.rules || die
epatch "${FILESDIR}"/qemu-0.11.0-mips64-user-fix.patch \
"${FILESDIR}"/${PN}-0.12.3-fix-crash-with-sdl.patch \
"${FILESDIR}"/${PN}-0.12.3-include-madvise-defines.patch
[[ -n ${BACKPORTS} ]] && \
EPATCH_FORCE=yes EPATCH_SUFFIX="patch" EPATCH_SOURCE="${S}/patches" \
epatch
}
src_configure() {
local conf_opts audio_opts softmmu_targets user_targets
for target in ${IUSE_SOFTMMU_TARGETS} ; do
use "qemu_softmmu_targets_${target}" && \
softmmu_targets="${softmmu_targets} ${target}-softmmu"
done
for target in ${IUSE_USER_TARGETS} ; do
use "qemu_user_targets_${target}" && \
user_targets="${user_targets} ${target}-linux-user"
done
if [ ! -z "${softmmu_targets}" ]; then
einfo "Building the following softmmu targets: ${softmmu_targets}"
fi
if [ ! -z "${user_targets}" ]; then
einfo "Building the following user targets: ${user_targets}"
conf_opts="${conf_opts} --enable-linux-user"
else
conf_opts="${conf_opts} --disable-linux-user"
fi
# Fix QA issues. QEMU needs executable heaps and we need to mark it as such
conf_opts="${conf_opts} --extra-ldflags=-Wl,-z,execheap"
# Add support for static builds
use static && conf_opts="${conf_opts} --static"
#config options
conf_opts="${conf_opts} $(use_enable aio linux-aio)"
conf_opts="${conf_opts} $(use_enable bluetooth bluez)"
conf_opts="${conf_opts} $(use_enable brltty brlapi)"
conf_opts="${conf_opts} $(use_enable curl)"
conf_opts="${conf_opts} $(use_enable fdt)"
conf_opts="${conf_opts} $(use_enable hardened user-pie)"
use kvm-trace && conf_opts="${conf_opts} --with-kvm-trace"
conf_opts="${conf_opts} $(use_enable ncurses curses)"
conf_opts="${conf_opts} $(use_enable sasl vnc-sasl)"
conf_opts="${conf_opts} $(use_enable sdl)"
conf_opts="${conf_opts} $(use_enable ssl vnc-tls)"
conf_opts="${conf_opts} $(use_enable vde)"
# conf_opts="${conf_opts} $(use_enable xen)"
conf_opts="${conf_opts} --disable-xen"
conf_opts="${conf_opts} --disable-darwin-user --disable-bsd-user"
# audio options
audio_opts="oss"
use alsa && audio_opts="alsa ${audio_opts}"
use esd && audio_opts="esd ${audio_opts}"
use pulseaudio && audio_opts="pa ${audio_opts}"
use sdl && audio_opts="sdl ${audio_opts}"
./configure --prefix=/usr \
--disable-strip \
--enable-nptl \
--enable-uuid \
${conf_opts} \
--audio-drv-list="${audio_opts}" \
--target-list="${softmmu_targets} ${user_targets}" \
--cc="$(tc-getCC)" \
--host-cc="$(tc-getBUILD_CC)" \
|| die "configure failed"
# --enable-kvm \
# this is for qemu upstream's threaded support which is
# in development and broken
# the kvm project has its own support for threaded IO
# which is always on and works
# --enable-io-thread \
}
src_install() {
if use charm; then
dobin arm-linux-user/qemu-arm
return
else
emake DESTDIR="${D}" install || die "make install failed"
fi
insinto /etc/udev/rules.d/
doins kvm/scripts/65-kvm.rules || die
if use qemu-ifup; then
insinto /etc/qemu/
insopts -m0755
doins kvm/scripts/qemu-ifup || die
fi
dodoc Changelog MAINTAINERS TODO pci-ids.txt || die
newdoc pc-bios/README README.pc-bios || die
dohtml qemu-doc.html qemu-tech.html || die
if use qemu_softmmu_targets_x86_64 ; then
dobin "${FILESDIR}"/qemu-kvm
dosym /usr/bin/qemu-kvm /usr/bin/kvm
else
elog "You disabled QEMU_SOFTMMU_TARGETS=x86_64, this disables install"
elog "of /usr/bin/qemu-kvm and /usr/bin/kvm"
fi
}
pkg_postinst() {
elog "If you don't have kvm compiled into the kernel, make sure you have"
elog "the kernel module loaded before running kvm. The easiest way to"
elog "ensure that the kernel module is loaded is to load it on boot."
elog "For AMD CPUs the module is called 'kvm-amd'"
elog "For Intel CPUs the module is called 'kvm-intel'"
elog "Please review /etc/conf.d/modules for how to load these"
elog
elog "Make sure your user is in the 'kvm' group"
elog "Just run 'gpasswd -a <USER> kvm', then have <USER> re-login."
elog
elog "You will need the Universal TUN/TAP driver compiled into your"
elog "kernel or loaded as a module to use the virtual network device"
elog "if using -net tap. You will also need support for 802.1d"
elog "Ethernet Bridging and a configured bridge if using the provided"
elog "kvm-ifup script from /etc/kvm."
elog
elog "The gnutls use flag was renamed to ssl, so adjust your use flags."
echo
}

View file

@ -1,252 +0,0 @@
# Copyright 1999-2010 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/app-emulation/qemu-kvm/qemu-kvm-9999.ebuild,v 1.12 2010/09/06 11:07:09 jmbsvicetto Exp $
EAPI="2"
if [[ ${PV} = *9999* ]]; then
EGIT_REPO_URI="git://git.kernel.org/pub/scm/virt/kvm/qemu-kvm.git"
GIT_ECLASS="git"
fi
inherit eutils flag-o-matic ${GIT_ECLASS} linux-info toolchain-funcs
if [[ ${PV} = *9999* ]]; then
SRC_URI=""
KEYWORDS=""
else
SRC_URI="mirror://sourceforge/kvm/${PN}/${P}.tar.gz
${BACKPORTS:+mirror://gentoo/${P}-backports-${BACKPORTS}.tar.bz2}"
KEYWORDS="~amd64 ~ppc ~ppc64 ~x86"
fi
DESCRIPTION="QEMU + Kernel-based Virtual Machine userland tools"
HOMEPAGE="http://www.linux-kvm.org"
LICENSE="GPL-2"
SLOT="0"
# xen is disabled until the deps are fixed
IUSE="+aio alsa bluetooth brltty curl esd fdt hardened jpeg ncurses \
png pulseaudio qemu-ifup sasl sdl ssl static vde xen"
# Updated targets to use the only supported upstream target - x86_64-softmmu
COMMON_TARGETS=""
IUSE_SOFTMMU_TARGETS="${COMMON_TARGETS} x86_64"
IUSE_USER_TARGETS=""
#COMMON_TARGETS="i386 arm cris m68k microblaze mips mipsel ppc ppc64 sh4 sh4eb sparc sparc64"
#IUSE_SOFTMMU_TARGETS="${COMMON_TARGETS} x86_64 mips64 mips64el ppcemb"
#IUSE_USER_TARGETS="${COMMON_TARGETS} alpha armeb ppc64abi32 sparc32plus"
for target in ${IUSE_SOFTMMU_TARGETS}; do
IUSE="${IUSE} +qemu_softmmu_targets_${target}"
done
for target in ${IUSE_USER_TARGETS}; do
IUSE="${IUSE} +qemu_user_targets_${target}"
done
RESTRICT="test"
RDEPEND="
!app-emulation/kqemu
!app-emulation/qemu
!app-emulation/qemu-softmmu
!app-emulation/qemu-user
!app-emulation/qemu-kvm-spice
sys-apps/pciutils
>=sys-apps/util-linux-2.16.0
sys-libs/zlib
aio? ( dev-libs/libaio )
alsa? ( >=media-libs/alsa-lib-1.0.13 )
bluetooth? ( net-wireless/bluez )
brltty? ( app-accessibility/brltty )
curl? ( net-misc/curl )
esd? ( media-sound/esound )
fdt? ( sys-apps/dtc )
jpeg? ( media-libs/jpeg )
ncurses? ( sys-libs/ncurses )
png? ( media-libs/libpng )
pulseaudio? ( media-sound/pulseaudio )
qemu-ifup? ( sys-apps/iproute2 net-misc/bridge-utils )
sasl? ( dev-libs/cyrus-sasl )
sdl? ( >=media-libs/libsdl-1.2.11[X] )
ssl? ( net-libs/gnutls )
vde? ( net-misc/vde )
xen? ( app-emulation/xen )
"
DEPEND="${RDEPEND}
app-text/texi2html
>=sys-kernel/linux-headers-2.6.29
ssl? ( dev-util/pkgconfig )
"
kvm_kern_warn() {
eerror "Please enable KVM support in your kernel, found at:"
eerror
eerror " Virtualization"
eerror " Kernel-based Virtual Machine (KVM) support"
eerror
}
pkg_setup() {
local counter="0" check
use qemu_softmmu_targets_x86_64 || ewarn "You disabled default target QEMU_SOFTMMU_TARGETS=x86_64"
for check in ${IUSE_SOFTMMU_TARGETS} ; do
use "qemu_softmmu_targets_${check}" && counter="1"
done
[[ ${counter} == 0 ]] && die "You need to set at least 1 target in QEMU_SOFTMMU_TARGETS"
if kernel_is lt 2 6 25; then
eerror "This version of KVM requres a host kernel of 2.6.25 or higher."
eerror "Either upgrade your kernel"
die "qemu-kvm version not compatible"
else
if ! linux_config_exists; then
eerror "Unable to check your kernel for KVM support"
kvm_kern_warn
elif ! linux_chkconfig_present KVM; then
kvm_kern_warn
fi
fi
enewgroup kvm
}
src_prepare() {
# prevent docs to get automatically installed
sed -i '/$(DESTDIR)$(docdir)/d' Makefile || die
# Alter target makefiles to accept CFLAGS set via flag-o
sed -i 's/^\(C\|OP_C\|HELPER_C\)FLAGS=/\1FLAGS+=/' \
Makefile Makefile.target || die
# append CFLAGS while linking
sed -i 's/$(LDFLAGS)/$(QEMU_CFLAGS) $(CFLAGS) $(LDFLAGS)/' rules.mak || die
# remove part to make udev happy
sed -e 's~NAME="%k", ~~' -i kvm/scripts/65-kvm.rules || die
epatch "${FILESDIR}/qemu-0.11.0-mips64-user-fix.patch"
}
src_configure() {
local conf_opts audio_opts softmmu_targets user_targets
for target in ${IUSE_SOFTMMU_TARGETS} ; do
use "qemu_softmmu_targets_${target}" && \
softmmu_targets="${softmmu_targets} ${target}-softmmu"
done
for target in ${IUSE_USER_TARGETS} ; do
use "qemu_user_targets_${target}" && \
user_targets="${user_targets} ${target}-linux-user"
done
if [ ! -z "${softmmu_targets}" ]; then
einfo "Building the following softmmu targets: ${softmmu_targets}"
fi
if [ ! -z "${user_targets}" ]; then
einfo "Building the following user targets: ${user_targets}"
conf_opts="${conf_opts} --enable-linux-user"
else
conf_opts="${conf_opts} --disable-linux-user"
fi
# Fix QA issues. QEMU needs executable heaps and we need to mark it as such
conf_opts="${conf_opts} --extra-ldflags=-Wl,-z,execheap"
# Add support for static builds
use static && conf_opts="${conf_opts} --static"
# Fix the $(prefix)/etc issue
conf_opts="${conf_opts} --sysconfdir=/etc"
#config options
conf_opts="${conf_opts} $(use_enable aio linux-aio)"
conf_opts="${conf_opts} $(use_enable bluetooth bluez)"
conf_opts="${conf_opts} $(use_enable brltty brlapi)"
conf_opts="${conf_opts} $(use_enable curl)"
conf_opts="${conf_opts} $(use_enable fdt)"
conf_opts="${conf_opts} $(use_enable hardened user-pie)"
conf_opts="${conf_opts} $(use_enable jpeg vnc-jpeg)"
conf_opts="${conf_opts} $(use_enable ncurses curses)"
conf_opts="${conf_opts} $(use_enable png vnc-png)"
conf_opts="${conf_opts} $(use_enable sasl vnc-sasl)"
conf_opts="${conf_opts} $(use_enable sdl)"
conf_opts="${conf_opts} $(use_enable ssl vnc-tls)"
conf_opts="${conf_opts} $(use_enable vde)"
conf_opts="${conf_opts} $(use_enable xen)"
# conf_opts="${conf_opts} --disable-xen"
conf_opts="${conf_opts} --disable-darwin-user --disable-bsd-user"
# audio options
audio_opts="oss"
use alsa && audio_opts="alsa ${audio_opts}"
use esd && audio_opts="esd ${audio_opts}"
use pulseaudio && audio_opts="pa ${audio_opts}"
use sdl && audio_opts="sdl ${audio_opts}"
./configure --prefix=/usr \
--disable-strip \
--enable-kvm \
--enable-nptl \
--enable-uuid \
${conf_opts} \
--audio-drv-list="${audio_opts}" \
--target-list="${softmmu_targets} ${user_targets}" \
--cc="$(tc-getCC)" \
--host-cc="$(tc-getBUILD_CC)" \
|| die "configure failed"
# this is for qemu upstream's threaded support which is
# in development and broken
# the kvm project has its own support for threaded IO
# which is always on and works
# --enable-io-thread \
}
src_install() {
emake DESTDIR="${D}" install || die "make install failed"
insinto /etc/udev/rules.d/
doins kvm/scripts/65-kvm.rules || die
if use qemu-ifup; then
insinto /etc/qemu/
insopts -m0755
doins kvm/scripts/qemu-ifup || die
fi
dodoc Changelog MAINTAINERS TODO pci-ids.txt || die
newdoc pc-bios/README README.pc-bios || die
dohtml qemu-doc.html qemu-tech.html || die
if use qemu_softmmu_targets_x86_64 ; then
dobin "${FILESDIR}"/qemu-kvm
dosym /usr/bin/qemu-kvm /usr/bin/kvm
else
elog "You disabled QEMU_SOFTMMU_TARGETS=x86_64, this disables install"
elog "of /usr/bin/qemu-kvm and /usr/bin/kvm"
fi
}
pkg_postinst() {
elog "If you don't have kvm compiled into the kernel, make sure you have"
elog "the kernel module loaded before running kvm. The easiest way to"
elog "ensure that the kernel module is loaded is to load it on boot."
elog "For AMD CPUs the module is called 'kvm-amd'"
elog "For Intel CPUs the module is called 'kvm-intel'"
elog "Please review /etc/conf.d/modules for how to load these"
elog
elog "Make sure your user is in the 'kvm' group"
elog "Just run 'gpasswd -a <USER> kvm', then have <USER> re-login."
elog
elog "You will need the Universal TUN/TAP driver compiled into your"
elog "kernel or loaded as a module to use the virtual network device"
elog "if using -net tap. You will also need support for 802.1d"
elog "Ethernet Bridging and a configured bridge if using the provided"
elog "kvm-ifup script from /etc/kvm."
elog
elog "The gnutls use flag was renamed to ssl, so adjust your use flags."
echo
}