diff --git a/recipes/wip/vm/qemu/recipe.toml b/recipes/wip/vm/qemu/recipe.toml
index 0ef0c8238d92bc08b4990019c52c8b96ae3091d0..6e79f0c679832251c482badee91bee70d13a36b7 100644
--- a/recipes/wip/vm/qemu/recipe.toml
+++ b/recipes/wip/vm/qemu/recipe.toml
@@ -1,13 +1,11 @@
-#TODO update the patch to match the current qemu version
 [source]
-tar = "https://download.qemu.org/qemu-9.0.1.tar.xz"
-patches = [
-    "redox.patch",
-]
+git = "https://github.com/jackpot51/qemu.git"
+
 [build]
-template = "configure"
+template = "custom"
 dependencies = [
     "curl",
+    "gettext",
     "glib",
     "libiconv",
     "libpng",
@@ -16,3 +14,13 @@ dependencies = [
     "sdl2",
     "zlib",
 ]
+script = """
+COOKBOOK_CONFIGURE_FLAGS=(
+    --host="${TARGET}"
+    --prefix="/usr"
+    --cross-prefix="${TARGET}"
+    --static
+    --disable-tpm
+)
+cookbook_configure
+"""
diff --git a/recipes/wip/vm/qemu/redox.patch b/recipes/wip/vm/qemu/redox.patch
deleted file mode 100644
index 9543ce1ca8b3b43ade8c89ee1e6b2613f6b7228b..0000000000000000000000000000000000000000
--- a/recipes/wip/vm/qemu/redox.patch
+++ /dev/null
@@ -1,308 +0,0 @@
-diff -ruwN source/block/file-posix.c source-new/block/file-posix.c
---- source/block/file-posix.c	2019-01-13 08:23:04.772397346 -0700
-+++ source-new/block/file-posix.c	2019-01-13 10:40:35.102453914 -0700
-@@ -258,6 +258,7 @@
-     int i;
- 
-     errno = ENOTSUP;
-+#if !defined(__redox__)
-     static const unsigned long ioctl_list[] = {
- #ifdef BLKSSZGET
-         BLKSSZGET,
-@@ -277,6 +278,7 @@
-             success = true;
-         }
-     }
-+#endif
- 
-     return success ? 0 : -errno;
- }
-@@ -1154,6 +1156,9 @@
- 
- static ssize_t handle_aiocb_ioctl(RawPosixAIOData *aiocb)
- {
-+#if defined(__redox__)
-+    return -ENOTSUP
-+#else
-     int ret;
- 
-     ret = ioctl(aiocb->aio_fildes, aiocb->aio_ioctl_cmd, aiocb->aio_ioctl_buf);
-@@ -1162,6 +1167,7 @@
-     }
- 
-     return 0;
-+#endif
- }
- 
- static ssize_t handle_aiocb_flush(RawPosixAIOData *aiocb)
-diff -ruwN source/configure source-new/configure
---- source/configure	2018-12-11 10:44:34.000000000 -0700
-+++ source-new/configure	2019-01-12 15:11:33.069669757 -0700
-@@ -649,6 +649,8 @@
-   targetos='NetBSD'
- elif check_define __APPLE__; then
-   targetos='Darwin'
-+elif check_define __redox__; then
-+  targetos='Redox'
- else
-   # This is a fatal error, but don't report it yet, because we
-   # might be going to just print the --help text, or it might
-@@ -3500,7 +3502,7 @@
- EOF
- 
- if ! compile_prog "$CFLAGS" "$LIBS" ; then
--    error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
-+    echo "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
-                "You probably need to set PKG_CONFIG_LIBDIR"\
- 	       "to point to the right pkg-config files for your"\
- 	       "build target"
-diff -ruwN source/include/qom/cpu.h source-new/include/qom/cpu.h
---- source/include/qom/cpu.h	2018-12-11 10:44:34.000000000 -0700
-+++ source-new/include/qom/cpu.h	2019-01-12 15:14:15.442350500 -0700
-@@ -30,6 +30,10 @@
- #include "qemu/queue.h"
- #include "qemu/thread.h"
- 
-+#if defined(__redox__)
-+#define sigjmp_buf jmp_buf
-+#endif
-+
- typedef int (*WriteCoreDumpFunction)(const void *buf, size_t size,
-                                      void *opaque);
- 
-diff -ruwN source/io/channel-socket.c source-new/io/channel-socket.c
---- source/io/channel-socket.c	2018-12-11 10:44:34.000000000 -0700
-+++ source-new/io/channel-socket.c	2019-01-13 08:54:26.951009516 -0700
-@@ -407,7 +407,7 @@
- }
- 
- 
--#ifndef WIN32
-+#if !defined(WIN32) && !defined(__redox__)
- static void qio_channel_socket_copy_fds(struct msghdr *msg,
-                                         int **fds, size_t *nfds)
- {
-@@ -554,7 +554,7 @@
-     }
-     return ret;
- }
--#else /* WIN32 */
-+#else /* WIN32 or __redox__ */
- static ssize_t qio_channel_socket_readv(QIOChannel *ioc,
-                                         const struct iovec *iov,
-                                         size_t niov,
-diff -ruwN source/util/compatfd.c source-new/util/compatfd.c
---- source/util/compatfd.c	2018-12-11 10:44:35.000000000 -0700
-+++ source-new/util/compatfd.c	2019-01-12 16:24:40.146857753 -0700
-@@ -17,7 +17,9 @@
- #include "qemu-common.h"
- #include "qemu/thread.h"
- 
-+#if defined(CONFIG_SIGNALFD)
- #include <sys/syscall.h>
-+#endif
- 
- struct sigfd_compat_info
- {
-diff -ruwN source/util/coroutine-sigaltstack.c source-new/util/coroutine-sigaltstack.c
---- source/util/coroutine-sigaltstack.c	2018-12-11 10:44:35.000000000 -0700
-+++ source-new/util/coroutine-sigaltstack.c	2019-01-13 10:38:32.279965167 -0700
-@@ -30,6 +30,12 @@
- #include "qemu-common.h"
- #include "qemu/coroutine_int.h"
- 
-+#if defined(__redox__)
-+#define sigjmp_buf jmp_buf
-+#define sigsetjmp(env, savesigs) setjmp(env)
-+#define siglongjmp longjmp
-+#endif
-+
- typedef struct {
-     Coroutine base;
-     void *stack;
-@@ -288,4 +294,3 @@
- 
-     return s && s->current->caller;
- }
--
-diff -ruwN source/util/iov.c source-new/util/iov.c
---- source/util/iov.c	2018-12-11 10:44:35.000000000 -0700
-+++ source-new/util/iov.c	2019-01-12 16:32:12.067228460 -0700
-@@ -95,7 +95,7 @@
- static ssize_t
- do_send_recv(int sockfd, struct iovec *iov, unsigned iov_cnt, bool do_send)
- {
--#ifdef CONFIG_POSIX
-+#if defined(CONFIG_POSIX) && !defined(__redox__)
-     ssize_t ret;
-     struct msghdr msg;
-     memset(&msg, 0, sizeof(msg));
-diff -ruwN source/util/main-loop.c source-new/util/main-loop.c
---- source/util/main-loop.c	2018-12-11 10:44:35.000000000 -0700
-+++ source-new/util/main-loop.c	2019-01-13 10:37:48.544674956 -0700
-@@ -35,6 +35,10 @@
- #include "block/aio.h"
- #include "qemu/error-report.h"
- 
-+#if defined(__redox__)
-+#define pthread_sigmask sigprocmask
-+#endif
-+
- #ifndef _WIN32
- 
- /* If we have signalfd, we mask out the signals we want to handle and then
-@@ -63,9 +67,12 @@
-         }
- 
-         sigaction(info.ssi_signo, NULL, &action);
-+#if !defined(__redox__)
-         if ((action.sa_flags & SA_SIGINFO) && action.sa_sigaction) {
-             sigaction_invoke(&action, &info);
--        } else if (action.sa_handler) {
-+        } else
-+#endif
-+        if (action.sa_handler) {
-             action.sa_handler(info.ssi_signo);
-         }
-     }
-diff -ruwN source/util/osdep.c source-new/util/osdep.c
---- source/util/osdep.c	2018-12-11 10:44:35.000000000 -0700
-+++ source-new/util/osdep.c	2019-01-13 09:31:50.920247468 -0700
-@@ -138,10 +138,12 @@
-         goto fail;
-     }
- 
-+#if !defined(__redox__)
-     if ((flags & O_SYNC) != (dup_flags & O_SYNC)) {
-         errno = EINVAL;
-         goto fail;
-     }
-+#endif
- 
-     /* Set/unset flags that we can with fcntl */
-     if (fcntl(ret, F_SETFL, flags) == -1) {
-@@ -236,6 +238,9 @@
- 
- static int qemu_lock_fcntl(int fd, int64_t start, int64_t len, int fl_type)
- {
-+#if defined(__redox__)
-+    return 0;
-+#else
-     int ret;
-     struct flock fl = {
-         .l_whence = SEEK_SET,
-@@ -248,6 +253,7 @@
-         ret = fcntl(fd, fcntl_op_setlk, &fl);
-     } while (ret == -1 && errno == EINTR);
-     return ret == -1 ? -errno : 0;
-+#endif
- }
- 
- int qemu_lock_fd(int fd, int64_t start, int64_t len, bool exclusive)
-@@ -262,6 +268,9 @@
- 
- int qemu_lock_fd_test(int fd, int64_t start, int64_t len, bool exclusive)
- {
-+#if defined(__redox__)
-+    return 0;
-+#else
-     int ret;
-     struct flock fl = {
-         .l_whence = SEEK_SET,
-@@ -276,6 +285,7 @@
-     } else {
-         return fl.l_type == F_UNLCK ? 0 : -EAGAIN;
-     }
-+#endif
- }
- #endif
- 
-diff -ruwN source/util/oslib-posix.c source-new/util/oslib-posix.c
---- source/util/oslib-posix.c	2018-12-11 10:44:35.000000000 -0700
-+++ source-new/util/oslib-posix.c	2019-01-12 16:34:05.703955117 -0700
-@@ -36,9 +36,17 @@
- #include "qapi/error.h"
- #include "qemu/sockets.h"
- #include <libgen.h>
-+#if !defined(__redox__)
- #include <sys/signal.h>
-+#endif
- #include "qemu/cutils.h"
- 
-+#if defined(__redox__)
-+#define pthread_sigmask sigprocmask
-+#define sigsetjmp(env, savesigs) setjmp(env)
-+#define siglongjmp longjmp
-+#endif
-+
- #ifdef CONFIG_LINUX
- #include <sys/syscall.h>
- #endif
-@@ -95,12 +103,13 @@
- 
-     while (1) {
-         struct stat a, b;
-+#if !defined(__redox__)
-         struct flock lock = {
-             .l_type = F_WRLCK,
-             .l_whence = SEEK_SET,
-             .l_len = 0,
-         };
--
-+#endif
-         fd = qemu_open(path, O_CREAT | O_WRONLY, S_IRUSR | S_IWUSR);
-         if (fd == -1) {
-             error_setg_errno(errp, errno, "Cannot open pid file");
-@@ -112,10 +121,12 @@
-             goto fail_close;
-         }
- 
-+#if !defined(__redox__)
-         if (fcntl(fd, F_SETLK, &lock)) {
-             error_setg_errno(errp, errno, "Cannot lock pid file");
-             goto fail_close;
-         }
-+#endif
- 
-         /*
-          * Now make sure the path we locked is the same one that now
-@@ -420,7 +431,11 @@
- 
- static inline int get_memset_num_threads(int smp_cpus)
- {
-+#if defined(__redox__)
-+    long host_procs = 1;
-+#else
-     long host_procs = sysconf(_SC_NPROCESSORS_ONLN);
-+#endif
-     int ret = 1;
- 
-     if (host_procs > 0) {
-@@ -682,6 +697,7 @@
- void sigaction_invoke(struct sigaction *action,
-                       struct qemu_signalfd_siginfo *info)
- {
-+#if !defined(__redox__)
-     siginfo_t si = {};
-     si.si_signo = info->ssi_signo;
-     si.si_errno = info->ssi_errno;
-@@ -708,4 +724,5 @@
-         si.si_uid = info->ssi_uid;
-     }
-     action->sa_sigaction(info->ssi_signo, &si, NULL);
-+#endif
- }
-diff -ruwN source/util/qemu-progress.c source-new/util/qemu-progress.c
---- source/util/qemu-progress.c	2018-12-11 10:44:35.000000000 -0700
-+++ source-new/util/qemu-progress.c	2019-01-13 10:34:53.704639662 -0700
-@@ -25,6 +25,10 @@
- #include "qemu/osdep.h"
- #include "qemu-common.h"
- 
-+#if defined(__redox__)
-+#define pthread_sigmask sigprocmask
-+#endif
-+
- struct progress_state {
-     float current;
-     float last_print;