tools: allow user to specify a system qemu-xen binary
authorIan Campbell <ian.campbell@citrix.com>
Wed, 15 May 2013 13:47:32 +0000 (14:47 +0100)
committerIan Campbell <ian.campbell@citrix.com>
Wed, 21 Aug 2013 09:39:20 +0000 (10:39 +0100)
If this option is given don't bother building qemu-xen ourselves. Likely to be
handy for distros who have an existing qemu package which they want to reuse.

Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
Makefile
config/Tools.mk.in
tools/Makefile
tools/config.h.in
tools/configure
tools/configure.ac
tools/libxl/libxl_dm.c

index a936fbe44112589aa2b23217b844c43c6faf5152..2b915374a8a2884bcc106a7d1253c9121ceb4c03 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -84,8 +84,19 @@ tools/qemu-xen-traditional-dir-force-update:
        $(MAKE) -C tools qemu-xen-traditional-dir-force-update
 endif
 
+ifeq ($(CONFIG_QEMU_XEN),y)
+QEMU_XEN_DIR_TGT := tools/qemu-xen-dir
+
+tools/qemu-xen-dir:
+       $(MAKE) -C tools qemu-xen-dir-find
+
+.PHONY: tools/qemu-xen-dir-force-update
+tools/qemu-xen-dir-force-update:
+       $(MAKE) -C tools qemu-xen-dir-force-update
+endif
+
 ifeq ($(CONFIG_IOEMU),y)
-install-tools: $(QEMU_TRAD_DIR_TARGET) tools/qemu-xen-dir
+install-tools: $(QEMU_TRAD_DIR_TARGET) $(QEMU_XEN_DIR_TARGET)
 endif
 
 .PHONY: install-kernels
@@ -99,13 +110,6 @@ ifeq (x86_64,$(XEN_TARGET_ARCH))
        XEN_TARGET_ARCH=x86_32 $(MAKE) -C stubdom install-grub
 endif
 
-tools/qemu-xen-dir:
-       $(MAKE) -C tools qemu-xen-dir-find
-
-.PHONY: tools/qemu-xen-dir-force-update
-tools/qemu-xen-dir-force-update:
-       $(MAKE) -C tools qemu-xen-dir-force-update
-
 .PHONY: tools/firmware/seabios-dir-force-update
 tools/firmware/seabios-dir-force-update:
        $(MAKE) -C tools/firmware seabios-dir-force-update
index 5ec96231f76e1de6ad5dd07054c80af94b77a601..e388e4289f71669f1c011df3397561d7b4fbbc23 100644 (file)
@@ -51,6 +51,7 @@ CONFIG_OVMF         := @ovmf@
 CONFIG_ROMBIOS      := @rombios@
 CONFIG_SEABIOS      := @seabios@
 CONFIG_QEMU_TRAD    := @qemu_traditional@
+CONFIG_QEMU_XEN     := @qemu_xen@
 CONFIG_XEND         := @xend@
 CONFIG_BLKTAP1      := @blktap1@
 
index 6fa589b09ceabfeb278c18f1139faec26583063d..0531f48a84f5baa972003b4186ca6c58475512f8 100644 (file)
@@ -29,7 +29,7 @@ SUBDIRS-$(CONFIG_Linux) += libvchan
 # do not recurse in to a dir we are about to delete
 ifneq "$(MAKECMDGOALS)" "distclean"
 SUBDIRS-$(CONFIG_QEMU_TRAD) += qemu-xen-traditional-dir
-SUBDIRS-$(CONFIG_IOEMU) += qemu-xen-dir
+SUBDIRS-$(CONFIG_QEMU_XEN) += qemu-xen-dir
 endif
 
 SUBDIRS-y += xenpmd
index f84422213fdce753c7df2b2dc2fcdfcabef047d5..aaa10275ecfd39555ac5ef416742f7a32f44566b 100644 (file)
@@ -75,6 +75,9 @@
 /* Define to the version of this package. */
 #undef PACKAGE_VERSION
 
+/* Qemu Xen path */
+#undef QEMU_XEN_PATH
+
 /* Define to 1 if you have the ANSI C header files. */
 #undef STDC_HEADERS
 
index 739842381ca1b7a42c5f8b0b2be4fe25cbabf799..4be39fca3444a91c7689903620c6b1e82558cbb8 100755 (executable)
@@ -654,6 +654,7 @@ APPEND_LIB
 APPEND_INCLUDES
 PREPEND_LIB
 PREPEND_INCLUDES
+qemu_xen
 qemu_traditional
 blktap1
 xend
@@ -736,6 +737,7 @@ enable_debug
 enable_xend
 enable_blktap1
 enable_qemu_traditional
+with_system_qemu
 '
       ac_precious_vars='build_alias
 host_alias
@@ -1400,6 +1402,14 @@ Optional Features:
                           Enable qemu traditional device model, (DEFAULT is on
                           for x86, otherwise off)
 
+Optional Packages:
+  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
+  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
+  --with-system-qemu[=PATH]
+                          Use system supplied qemu PATH or qemu (taken from
+                          $PATH) as qemu-xen device model instead of building
+                          and installing our own version
+
 Some influential environment variables:
   CC          C compiler command
   CFLAGS      C compiler flags
@@ -3686,6 +3696,37 @@ fi
 
 
 
+# Check whether --with-system-qemu was given.
+if test "${with_system_qemu+set}" = set; then :
+  withval=$with_system_qemu;
+    case $withval in
+    yes) qemu_xen=n ; qemu_xen_path=qemu ;;
+    no)  qemu_xen=y ; qemu_xen_path= ;;
+    *)   qemu_xen=n ; qemu_xen_path=$withval ;;
+    esac
+
+else
+
+    case "$host_cpu" in
+        i[3456]86|x86_64)
+           qemu_xen=y;;
+        *) qemu_xen=n;;
+    esac
+
+fi
+
+if test "x$qemu_xen" = "xn"; then :
+
+
+cat >>confdefs.h <<_ACEOF
+#define QEMU_XEN_PATH "$qemu_xen_path"
+_ACEOF
+
+
+fi
+
+
+
 
 
 
index 9b0547808307e5980c0dada494da7f894efd4ca6..1f576819a85d34315371c64bd5c904c53029bb8b 100644 (file)
@@ -76,6 +76,27 @@ AC_DEFINE([HAVE_QEMU_TRADITIONAL], [1], [Qemu traditional enabled])
 ])
 AC_SUBST(qemu_traditional)
 
+AC_ARG_WITH([system-qemu],
+    AS_HELP_STRING([--with-system-qemu@<:@=PATH@:>@],
+       [Use system supplied qemu PATH or qemu (taken from $PATH) as qemu-xen
+        device model instead of building and installing our own version]),[
+    case $withval in
+    yes) qemu_xen=n ; qemu_xen_path=qemu ;;
+    no)  qemu_xen=y ; qemu_xen_path= ;;
+    *)   qemu_xen=n ; qemu_xen_path=$withval ;;
+    esac
+],[
+    case "$host_cpu" in
+        i[[3456]]86|x86_64)
+           qemu_xen=y;;
+        *) qemu_xen=n;;
+    esac
+])
+AS_IF([test "x$qemu_xen" = "xn"], [
+    AC_DEFINE_UNQUOTED([QEMU_XEN_PATH], ["$qemu_xen_path"], [Qemu Xen path])
+])
+AC_SUBST(qemu_xen)
+
 AC_ARG_VAR([PREPEND_INCLUDES],
     [List of include folders to prepend to CFLAGS (without -I)])
 AC_ARG_VAR([PREPEND_LIB],
index 615dcf39457e22aab91ab76b5b0c91a8e6cac4a8..4035b6db62420976bb12ea7a84879b68f7935fb6 100644 (file)
@@ -33,6 +33,15 @@ const char *libxl__device_model_savefile(libxl__gc *gc, uint32_t domid)
     return libxl__sprintf(gc, "/var/lib/xen/qemu-save.%d", domid);
 }
 
+static const char *qemu_xen_path(libxl__gc *gc)
+{
+#ifdef QEMU_XEN_PATH
+    return QEMU_XEN_PATH;
+#else
+    return libxl__abs_path(gc, "qemu-system-i386", libxl__libexec_path());
+#endif
+}
+
 const char *libxl__domain_device_model(libxl__gc *gc,
                                        const libxl_domain_build_info *info)
 {
@@ -50,7 +59,7 @@ const char *libxl__domain_device_model(libxl__gc *gc,
             dm = libxl__abs_path(gc, "qemu-dm", libxl__libexec_path());
             break;
         case LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN:
-            dm = libxl__abs_path(gc, "qemu-system-i386", libxl__libexec_path());
+            dm = qemu_xen_path(gc);
             break;
         default:
             LIBXL__LOG(ctx, LIBXL__LOG_ERROR,