From db93321c5e23c737a4de002ac34fae0bc24706c2 Mon Sep 17 00:00:00 2001 From: Jerome Duval Date: Sun, 3 Sep 2017 10:15:17 +0200 Subject: [PATCH] qemu: add recipe for git version. --- .../qemu/patches/qemu-2.11.0~git.patchset | 238 ++++++++++++++++++ app-emulation/qemu/qemu-2.11.0~git.recipe | 134 ++++++++++ 2 files changed, 372 insertions(+) create mode 100644 app-emulation/qemu/patches/qemu-2.11.0~git.patchset create mode 100644 app-emulation/qemu/qemu-2.11.0~git.recipe diff --git a/app-emulation/qemu/patches/qemu-2.11.0~git.patchset b/app-emulation/qemu/patches/qemu-2.11.0~git.patchset new file mode 100644 index 000000000..4e34516e2 --- /dev/null +++ b/app-emulation/qemu/patches/qemu-2.11.0~git.patchset @@ -0,0 +1,238 @@ +From d4fab36828f7718ded418088518346100c480a67 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zolt=C3=A1n=20Mizsei?= +Date: Sun, 20 Nov 2016 14:04:51 +0100 +Subject: Haiku patches + + +diff --git a/os-posix.c b/os-posix.c +index 92e9d85..8047238 100644 +--- a/os-posix.c ++++ b/os-posix.c +@@ -42,6 +42,15 @@ + #include + #endif + ++#ifdef __HAIKU__ ++#ifndef MCL_CURRENT ++#define MCL_CURRENT 8192 ++#endif ++#ifndef MCL_FUTURE ++#define MCL_FUTURE 16384 ++#endif ++#endif ++ + static struct passwd *user_pwd; + static const char *chroot_dir; + static int daemonize; +@@ -328,11 +337,12 @@ bool is_daemonized(void) + int os_mlock(void) + { + int ret = 0; +- ++#ifndef __HAIKU__ + ret = mlockall(MCL_CURRENT | MCL_FUTURE); + if (ret < 0) { + perror("mlockall"); + } ++#endif + + return ret; + } +diff --git a/target/mips/mips-semi.c b/target/mips/mips-semi.c +index a7aefba..16c2336 100644 +--- a/target/mips/mips-semi.c ++++ b/target/mips/mips-semi.c +@@ -75,6 +75,7 @@ enum UHIOpenFlags { + + /* Errno values taken from asm-mips/errno.h */ + static uint16_t host_to_mips_errno[] = { ++#ifndef __HAIKU__ + [ENAMETOOLONG] = 78, + #ifdef EOVERFLOW + [EOVERFLOW] = 79, +@@ -82,6 +83,9 @@ static uint16_t host_to_mips_errno[] = { + #ifdef ELOOP + [ELOOP] = 90, + #endif ++#else ++NULL ++#endif + }; + + static int errno_mips(int err) +diff --git a/target/xtensa/xtensa-semi.c b/target/xtensa/xtensa-semi.c +index 7aa1d13..de7b7f5 100644 +--- a/target/xtensa/xtensa-semi.c ++++ b/target/xtensa/xtensa-semi.c +@@ -98,59 +98,53 @@ enum { + + static uint32_t errno_h2g(int host_errno) + { +- static const uint32_t guest_errno[] = { +- [EPERM] = TARGET_EPERM, +- [ENOENT] = TARGET_ENOENT, +- [ESRCH] = TARGET_ESRCH, +- [EINTR] = TARGET_EINTR, +- [EIO] = TARGET_EIO, +- [ENXIO] = TARGET_ENXIO, +- [E2BIG] = TARGET_E2BIG, +- [ENOEXEC] = TARGET_ENOEXEC, +- [EBADF] = TARGET_EBADF, +- [ECHILD] = TARGET_ECHILD, +- [EAGAIN] = TARGET_EAGAIN, +- [ENOMEM] = TARGET_ENOMEM, +- [EACCES] = TARGET_EACCES, +- [EFAULT] = TARGET_EFAULT, ++ switch (host_errno) { ++ case 0: return 0; ++ case EPERM: return TARGET_EPERM; ++ case ENOENT: return TARGET_ENOENT; ++ case ESRCH: return TARGET_ESRCH; ++ case EINTR: return TARGET_EINTR; ++ case EIO: return TARGET_EIO; ++ case ENXIO: return TARGET_ENXIO; ++ case E2BIG: return TARGET_E2BIG; ++ case ENOEXEC: return TARGET_ENOEXEC; ++ case EBADF: return TARGET_EBADF; ++ case ECHILD: return TARGET_ECHILD; ++ case EAGAIN: return TARGET_EAGAIN; ++ case ENOMEM: return TARGET_ENOMEM; ++ case EACCES: return TARGET_EACCES; ++ case EFAULT: return TARGET_EFAULT; + #ifdef ENOTBLK +- [ENOTBLK] = TARGET_ENOTBLK, ++ case ENOTBLK: return TARGET_ENOTBLK; + #endif +- [EBUSY] = TARGET_EBUSY, +- [EEXIST] = TARGET_EEXIST, +- [EXDEV] = TARGET_EXDEV, +- [ENODEV] = TARGET_ENODEV, +- [ENOTDIR] = TARGET_ENOTDIR, +- [EISDIR] = TARGET_EISDIR, +- [EINVAL] = TARGET_EINVAL, +- [ENFILE] = TARGET_ENFILE, +- [EMFILE] = TARGET_EMFILE, +- [ENOTTY] = TARGET_ENOTTY, ++ case EBUSY: return TARGET_EBUSY; ++ case EEXIST: return TARGET_EEXIST; ++ case EXDEV: return TARGET_EXDEV; ++ case ENODEV: return TARGET_ENODEV; ++ case ENOTDIR: return TARGET_ENOTDIR; ++ case EISDIR: return TARGET_EISDIR; ++ case EINVAL: return TARGET_EINVAL; ++ case ENFILE: return TARGET_ENFILE; ++ case EMFILE: return TARGET_EMFILE; ++ case ENOTTY: return TARGET_ENOTTY; + #ifdef ETXTBSY +- [ETXTBSY] = TARGET_ETXTBSY, ++ case ETXTBSY: return TARGET_ETXTBSY; + #endif +- [EFBIG] = TARGET_EFBIG, +- [ENOSPC] = TARGET_ENOSPC, +- [ESPIPE] = TARGET_ESPIPE, +- [EROFS] = TARGET_EROFS, +- [EMLINK] = TARGET_EMLINK, +- [EPIPE] = TARGET_EPIPE, +- [EDOM] = TARGET_EDOM, +- [ERANGE] = TARGET_ERANGE, +- [ENOSYS] = TARGET_ENOSYS, ++ case EFBIG: return TARGET_EFBIG; ++ case ENOSPC: return TARGET_ENOSPC; ++ case ESPIPE: return TARGET_ESPIPE; ++ case EROFS: return TARGET_EROFS; ++ case EMLINK: return TARGET_EMLINK; ++ case EPIPE: return TARGET_EPIPE; ++ case EDOM: return TARGET_EDOM; ++ case ERANGE: return TARGET_ERANGE; ++ case ENOSYS: return TARGET_ENOSYS; + #ifdef ELOOP +- [ELOOP] = TARGET_ELOOP, ++ case ELOOP: return TARGET_ELOOP; + #endif + }; + +- if (host_errno == 0) { +- return 0; +- } else if (host_errno > 0 && host_errno < ARRAY_SIZE(guest_errno) && +- guest_errno[host_errno]) { +- return guest_errno[host_errno]; +- } else { +- return TARGET_EINVAL; +- } ++ return TARGET_EINVAL; + } + + void xtensa_sim_open_console(Chardev *chr) +diff --git a/tests/Makefile.include b/tests/Makefile.include +index f08b741..8ad99cc 100644 +--- a/tests/Makefile.include ++++ b/tests/Makefile.include +@@ -810,7 +810,7 @@ tests/migration/initrd-stress.img: tests/migration/stress$(EXESUF) + rmdir $(INITRD_WORK_DIR) + + ifeq ($(CONFIG_POSIX),y) +-LIBS += -lutil ++LIBS += + endif + + # QTest rules +diff --git a/util/compatfd.c b/util/compatfd.c +index 980bd33..31e01d6 100644 +--- a/util/compatfd.c ++++ b/util/compatfd.c +@@ -17,7 +17,9 @@ + #include "qemu-common.h" + #include "qemu/thread.h" + ++#ifndef __HAIKU__ + #include ++#endif + + struct sigfd_compat_info + { +diff --git a/util/main-loop.c b/util/main-loop.c +index 2f48f41..e0350f6 100644 +--- a/util/main-loop.c ++++ b/util/main-loop.c +@@ -81,7 +81,9 @@ static int qemu_signal_init(void) + */ + sigemptyset(&set); + sigaddset(&set, SIG_IPI); ++#ifdef SIGIO + sigaddset(&set, SIGIO); ++#endif + sigaddset(&set, SIGALRM); + sigaddset(&set, SIGBUS); + /* SIGINT cannot be handled via signalfd, so that ^C can be used +diff --git a/util/oslib-posix.c b/util/oslib-posix.c +index 80086c5..09c3903 100644 +--- a/util/oslib-posix.c ++++ b/util/oslib-posix.c +@@ -36,7 +36,9 @@ + #include "qapi/error.h" + #include "qemu/sockets.h" + #include ++#ifndef __HAIKU__ + #include ++#endif + #include "qemu/cutils.h" + + #ifdef CONFIG_LINUX +diff --git a/util/qemu-openpty.c b/util/qemu-openpty.c +index 2e8b43b..adcc732 100644 +--- a/util/qemu-openpty.c ++++ b/util/qemu-openpty.c +@@ -35,7 +35,9 @@ + #include "qemu/osdep.h" + #include "qemu-common.h" + +-#if defined(__GLIBC__) ++#if defined(__HAIKU__) ++# include ++#elif defined(__GLIBC__) + # include + #elif defined CONFIG_BSD + # include +-- +2.13.1 + diff --git a/app-emulation/qemu/qemu-2.11.0~git.recipe b/app-emulation/qemu/qemu-2.11.0~git.recipe new file mode 100644 index 000000000..06c1a77cf --- /dev/null +++ b/app-emulation/qemu/qemu-2.11.0~git.recipe @@ -0,0 +1,134 @@ +SUMMARY="A generic and open source machine emulator and virtualizer" +DESCRIPTION="QEMU is a generic and open source machine emulator and virtualizer. + +QEMU can run OSes and programs made for one machine (e.g. an ARM board) on a \ +different machine (e.g. your own PC). By using dynamic translation, it \ +achieves very good performance." +HOMEPAGE="http://wiki.qemu.org/" +COPYRIGHT="2003-2017 Fabrice Bellard" +LICENSE="GNU GPL v2" +REVISION="1" +gitCommit="223cd0e13f2e46078d7b573f0b8402bfbee339be" +SOURCE_URI="https://github.com/qemu/qemu/archive/$gitCommit.tar.gz" +CHECKSUM_SHA256="0f78dd97a24b258692bba7e0234cadb6a77b0a0a122d8f6e7313fd635210168c" +SOURCE_DIR="qemu-$gitCommit" +PATCHES="qemu-$portVersion.patchset" + +ARCHITECTURES="!x86_gcc2 ?x86 ?x86_64" +SECONDARY_ARCHITECTURES="?x86" + +PROVIDES=" + qemu$secondaryArchSuffix = $portVersion + cmd:qemu$secondaryArchSuffix = $portVersion + cmd:qemu_img$secondaryArchSuffix = $portVersion + cmd:qemu_io$secondaryArchSuffix = $portVersion + cmd:qemu_system_aarch64$secondaryArchSuffix = $portVersion + cmd:qemu_system_alpha$secondaryArchSuffix = $portVersion + cmd:qemu_system_arm$secondaryArchSuffix = $portVersion + cmd:qemu_system_cris$secondaryArchSuffix = $portVersion + cmd:qemu_system_i386$secondaryArchSuffix = $portVersion + cmd:qemu_system_lm32$secondaryArchSuffix = $portVersion + cmd:qemu_system_m68k$secondaryArchSuffix = $portVersion + cmd:qemu_system_microblaze$secondaryArchSuffix = $portVersion + cmd:qemu_system_microblazeel$secondaryArchSuffix = $portVersion + cmd:qemu_system_mips$secondaryArchSuffix = $portVersion + cmd:qemu_system_mips64$secondaryArchSuffix = $portVersion + cmd:qemu_system_mips64el$secondaryArchSuffix = $portVersion + cmd:qemu_system_mipsel$secondaryArchSuffix = $portVersion + cmd:qemu_system_moxie$secondaryArchSuffix = $portVersion + cmd:qemu_system_or32$secondaryArchSuffix = $portVersion + cmd:qemu_system_ppc$secondaryArchSuffix = $portVersion + cmd:qemu_system_ppc64$secondaryArchSuffix = $portVersion + cmd:qemu_system_ppcemb$secondaryArchSuffix = $portVersion + cmd:qemu_system_s390x$secondaryArchSuffix = $portVersion + cmd:qemu_system_sh4$secondaryArchSuffix = $portVersion + cmd:qemu_system_sh4eb$secondaryArchSuffix = $portVersion + cmd:qemu_system_sparc$secondaryArchSuffix = $portVersion + cmd:qemu_system_sparc64$secondaryArchSuffix = $portVersion + cmd:qemu_system_unicore32$secondaryArchSuffix = $portVersion + cmd:qemu_system_x86_64$secondaryArchSuffix = $portVersion + cmd:qemu_system_xtensa$secondaryArchSuffix = $portVersion + cmd:qemu_system_xtensaeb$secondaryArchSuffix = $portVersion + " +REQUIRES=" + haiku$secondaryArchSuffix + lib:libbz2$secondaryArchSuffix + lib:libcurl$secondaryArchSuffix + lib:libfdt$secondaryArchSuffix + #lib:libgcrypt$secondaryArchSuffix + lib:libGL$secondaryArchSuffix + lib:libglib_2.0$secondaryArchSuffix + lib:libgnutls$secondaryArchSuffix + lib:libintl$secondaryArchSuffix + lib:libjpeg$secondaryArchSuffix + lib:liblzo2$secondaryArchSuffix + lib:libncursesw$secondaryArchSuffix + lib:libnettle$secondaryArchSuffix + lib:libpixman_1$secondaryArchSuffix + lib:libpng16$secondaryArchSuffix + lib:libsdl2$secondaryArchSuffix + lib:libsnappy$secondaryArchSuffix + lib:libssh2$secondaryArchSuffix + lib:libtasn1$secondaryArchSuffix + lib:libusb_1.0$secondaryArchSuffix + lib:libz$secondaryArchSuffix + " + +BUILD_REQUIRES=" + devel:libbz2$secondaryArchSuffix + devel:libcurl$secondaryArchSuffix + devel:libfdt$secondaryArchSuffix + #devel:libgcrypt$secondaryArchSuffix + devel:libGL$secondaryArchSuffix + devel:libglib_2.0$secondaryArchSuffix + devel:libgnutls$secondaryArchSuffix + devel:libintl$secondaryArchSuffix + devel:libjpeg$secondaryArchSuffix + devel:liblzo2$secondaryArchSuffix + devel:libncursesw$secondaryArchSuffix + devel:libnettle$secondaryArchSuffix + devel:libpixman_1$secondaryArchSuffix + devel:libpng16$secondaryArchSuffix + devel:libsdl2$secondaryArchSuffix + devel:libsnappy$secondaryArchSuffix + devel:libssh2$secondaryArchSuffix + devel:libtasn1$secondaryArchSuffix + devel:libusb_1.0$secondaryArchSuffix + devel:libz$secondaryArchSuffix + " +BUILD_PREREQUIRES=" + haiku${secondaryArchSuffix}_devel + cmd:awk + cmd:gcc$secondaryArchSuffix + cmd:gcov$secondaryArchSuffix + cmd:gprof$secondaryArchSuffix + cmd:ld$secondaryArchSuffix + cmd:make + cmd:find + cmd:pkg_config$secondaryArchSuffix + cmd:pod2man + cmd:python + " + +BUILD() +{ + export CFLAGS="-lbsd -lnetwork" + runConfigure --omit-buildspec ./configure \ + --disable-stack-protector \ + --target-list=i386-softmmu,x86_64-softmmu + # remove the line above to get all the supported targets + # aarch64-softmmu broken with --disable-stack-protector + make $jobArgs +} + +INSTALL() +{ + make install $jobArgs + + # provide convenience symlink to just "qemu" + if [ $effectiveTargetArchitecture == x86_64 ]; then + ln -s qemu-system-x86_64 $binDir/qemu + else + ln -s qemu-system-i386 $binDir/qemu + fi +}