Skip to content

Instantly share code, notes, and snippets.

@PedroHLC
Last active November 20, 2018 13:06
Show Gist options
  • Save PedroHLC/e91f5af53b2a671a1433d705ab9c09e5 to your computer and use it in GitHub Desktop.
Save PedroHLC/e91f5af53b2a671a1433d705ab9c09e5 to your computer and use it in GitHub Desktop.
Intel HAXM patch applied to QEMU
# Maintainer: Frederic Bezies <[email protected]>
# Contributor: ajs124 < aur at ajs124 dot de>
# Contributor: Devin Cofer <ranguvar{AT]archlinux[DOT}us>
# Contributor: Tobias Powalowski <[email protected]>
# Contributor: Sébastien "Seblu" Luttringer <[email protected]>
pkgbase=qemu-haxm-git
_gitname=qemu
pkgname=(qemu-haxm-git qemu-haxm-headless-git qemu-haxm-arch-extra-git qemu-haxm-headless-arch-extra-git qemu-haxm-block-{iscsi-git,rbd-git,gluster-git} qemu-haxm-guest-agent-git)
pkgdesc="A generic and open source machine emulator and virtualizer. Git version. Intel HAXM patch applied."
pkgver=v2.12.1.r1.g860b93ff0f
pkgrel=1
epoch=5
arch=(i686 x86_64)
license=(GPL2 LGPL2.1)
url="http://wiki.qemu.org/"
_headlessdeps=(seabios gnutls libpng libaio numactl jemalloc xfsprogs libnfs lzo snappy curl vde2 libcap-ng spice libcacard usbredir)
depends=(dtc virglrenderer sdl2 vte3 libpulse "${_headlessdeps[@]}")
makedepends=(spice-protocol python2 ceph libiscsi glusterfs git)
source=("${_gitname}::git+https://github.com/kryptoslogic/qemu.git#branch=haxm-linux"
qemu-ga.service
65-kvm.rules)
sha256sums=('SKIP'
'0b4f3283973bb3bc876735f051d8eaab68f0065502a3a5012141fad193538ea1'
'60dcde5002c7c0b983952746e6fb2cf06d6c5b425d64f340f819356e561e7fc7')
case $CARCH in
i?86) _corearch=i386 ;;
x86_64) _corearch=x86_64 ;;
esac
pkgver() {
cd "${srcdir}/${_gitname}"
git describe --long | sed 's/\([^-]*-g\)/r\1/;s/-/./g'
}
prepare() {
cd "${srcdir}/${_gitname}"
mkdir build-{full,headless}
mkdir -p extra-arch-{full,headless}/usr/{bin,share/qemu}
#cd "${srcdir}/${_gitname}"
sed -i 's/vte-2\.90/vte-2.91/g' configure
}
build() {
_build full \
--audio-drv-list="pa alsa sdl"
_build headless \
--audio-drv-list= \
--disable-bluez \
--disable-sdl \
--disable-gtk \
--disable-vte \
--disable-opengl \
--disable-virglrenderer
}
_build() (
cd ${srcdir}/${_gitname}/build-$1
# qemu vs. make 4 == bad
export ARFLAGS=rv
# http://permalink.gmane.org/gmane.comp.emulators.qemu/238740
export CFLAGS+=" -fPIC"
../configure \
--prefix=/usr \
--sysconfdir=/etc \
--localstatedir=/var \
--libexecdir=/usr/lib/qemu \
--python=/usr/bin/python2 \
--smbd=/usr/bin/smbd \
--with-sdlabi=2.0 \
--enable-hax \
--enable-modules \
--enable-jemalloc \
--disable-werror \
"${@:2}"
make
)
package_qemu-haxm-git() {
optdepends=('qemu-haxm-arch-extra-git: extra architectures support')
conflicts=('qemu-haxm-headless' 'qemu' 'kvm' 'kvm-git' 'qemu-spice')
provides=('qemu-headless' 'qemu' 'qemu-kvm' 'qemu-spice')
replaces=(qemu-kvm)
_package full
}
package_qemu-haxm-headless-git() {
pkgdesc="QEMU without GUI. Git version."
depends=("${_headlessdeps[@]}")
optdepends=('qemu-haxm-headless-arch-extra-git: extra architectures support')
conflicts=('qemu-headless')
_package headless
}
_package() {
optdepends+=('ovmf: Tianocore UEFI firmware for qemu'
'samba: SMB/CIFS server support'
'qemu-haxm-block-iscsi-git: iSCSI block support'
'qemu-haxm-block-rbd-git: RBD block support'
'qemu-haxm-block-gluster-git: glusterfs block support')
install=qemu.install
options=(!strip)
make -C ${srcdir}/${_gitname}/build-$1 DESTDIR="$pkgdir" install "${@:2}"
# systemd stuff
install -Dm644 65-kvm.rules "$pkgdir/usr/lib/udev/rules.d/65-kvm.rules"
# remove conflicting /var/run directory
cd "$pkgdir"
rm -r var
cd usr/lib
tidy_strip
# bridge_helper needs suid
# https://bugs.archlinux.org/task/32565
chmod u+s qemu/qemu-bridge-helper
# remove split block modules
rm qemu/block-{iscsi,rbd,gluster}.so
cd ../bin
tidy_strip
# remove extra arch
for _bin in qemu-*; do
[[ -f $_bin ]] || continue
case ${_bin#qemu-} in
# guest agent
ga) rm "$_bin"; continue ;;
# tools
img|io|nbd) continue ;;
# core emu
system-${_corearch}) continue ;;
esac
mv "$_bin" "$srcdir/$_gitname/extra-arch-$1/usr/bin"
done
cd ../share/qemu
for _blob in *; do
[[ -f $_blob ]] || continue
case $_blob in
# provided by seabios package
bios.bin|acpi-dsdt.aml|bios-256k.bin|vgabios-cirrus.bin|vgabios-qxl.bin|\
vgabios-stdvga.bin|vgabios-bochs-display.bin|vgabios-ramfb.bin|vgabios-vmware.bin|vgabios-virtio.bin) rm "$_blob"; continue ;;
# iPXE ROMs
efi-*|pxe-*) continue ;;
# core blobs
kvmvapic.bin|linuxboot*|multiboot.bin|sgabios.bin|vgabios*) continue ;;
# Trace events definitions
trace-events*) continue ;;
# Logos
*.bmp|*.svg) continue ;;
esac
mv "$_blob" "$srcdir/$_gitname/extra-arch-$1/usr/share/qemu"
done
}
package_qemu-haxm-arch-extra-git() {
pkgdesc="QEMU for foreign architectures. Git version."
depends=(qemu)
provides=(qemu-arch-extra)
conflicts=(qemu-arch-extra)
options=(!strip)
mv $srcdir/$_gitname/extra-arch-full/usr "$pkgdir"
}
package_qemu-haxm-headless-arch-extra-git() {
pkgdesc="QEMU without GUI, for foreign architectures. Git version."
depends=(qemu-headless)
options=(!strip)
conflicts=(qemu-headless-arch-extra)
provides=(qemu-headless-arch-extra)
mv $srcdir/$_gitname/extra-arch-headless/usr "$pkgdir"
}
package_qemu-haxm-block-iscsi-git() {
pkgdesc="QEMU iSCSI block module. Git version."
depends=(glib2 libiscsi jemalloc)
conflicts=(qemu-block-iscsi)
provides=(qemu-block-iscsi)
install -D $srcdir/$_gitname/build-full/block-iscsi.so "$pkgdir/usr/lib/qemu/block-iscsi.so"
}
package_qemu-haxm-block-rbd-git() {
pkgdesc="QEMU RBD block module. Git version."
depends=(glib2 ceph)
conflicts=(qemu-block-rbd)
provides=(qemu-block-rbd)
install -D $srcdir/$_gitname/build-full/block-rbd.so "$pkgdir/usr/lib/qemu/block-rbd.so"
}
package_qemu-haxm-block-gluster-git() {
pkgdesc="QEMU GlusterFS block module. Git version."
depends=(glib2 glusterfs)
conflicts=(qemu-block-gluster)
provides=(qemu-block-gluster)
install -D $srcdir/$_gitname/build-full/block-gluster.so "$pkgdir/usr/lib/qemu/block-gluster.so"
}
package_qemu-haxm-guest-agent-git() {
pkgdesc="QEMU Guest Agent. Git version."
depends=(gcc-libs glib2)
conflicts=(qemu-guest-agent)
provides=(qemu-guest-agent)
install -D $srcdir/$_gitname/build-full/qemu-ga "$pkgdir/usr/bin/qemu-ga"
install -Dm644 $srcdir/qemu-ga.service "$pkgdir/usr/lib/systemd/system/qemu-ga.service"
install -Dm755 "$srcdir/$_gitname/scripts/qemu-guest-agent/fsfreeze-hook" "$pkgdir/etc/qemu/fsfreeze-hook"
}
# vim:set ts=2 sw=2 et:
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment