Ian Campbell
2013-Aug-06 10:31 UTC
[PATCH 0/3] tools: build: allow disabling qemu-trad and selecting system qemu-xen
depends on "autoconf: regenerate configure scripts with 4.4 version"
Make qemu-xen-trad optional:
Although we intend to support this code for the foreseeable
users and or distros may wish to exclude this large body of code
and reduce security/support/etc implications.
Allow use of system supplied upstream qemu:
Makes it easier for distros to do what they are very probably
going to do anyway.
Ian
Ian Campbell
2013-Aug-06 10:32 UTC
[PATCH 1/3] tools: Make qemu-xen-traditional build optional.
Now that we have upstream qemu people may want to avoid building this extra
code.
There is a little bit of trickery in stubdom/configure.ac to ensure that the
ioemu stubdom is only built if qemu-traditional is enabled.
libxl will return an error if a caller tries to build a domain using
qemu-xen-traditional when this support was disabled at build time. Since
qemu-xen-traditional has been historically tightly bound to the Xen releases I
don''t see any value in supporting "3rd party" provision of
qemu-xen-traditional.
We also do not want/need this on ARM therefore default is on for x86 and off
otherwise.
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Cc: roger.pau@citrix.com
Cc: ian.jackson@citrix.com
---
Makefile | 22 ++++---
config/Tools.mk.in | 1 +
stubdom/Makefile | 6 ++-
stubdom/configure | 152 ++++++++++++++++++++++++++++++++++++++++----
stubdom/configure.ac | 24 +++++++-
tools/Makefile | 2 +-
tools/config.h.in | 3 +
tools/configure | 31 +++++++++
tools/configure.ac | 16 +++++
tools/libxl/libxl_create.c | 14 ++++
10 files changed, 247 insertions(+), 24 deletions(-)
diff --git a/Makefile b/Makefile
index 5a7107e..a936fbe 100644
--- a/Makefile
+++ b/Makefile
@@ -73,8 +73,19 @@ install-xen:
install-tools:
$(MAKE) -C tools install
+ifeq ($(CONFIG_QEMU_TRAD),y)
+QEMU_TRAD_DIR_TGT := tools/qemu-xen-traditional-dir
+
+tools/qemu-xen-traditional-dir:
+ $(MAKE) -C tools qemu-xen-traditional-dir-find
+
+.PHONY: tools/qemu-xen-traditional-dir-force-update
+tools/qemu-xen-traditional-dir-force-update:
+ $(MAKE) -C tools qemu-xen-traditional-dir-force-update
+endif
+
ifeq ($(CONFIG_IOEMU),y)
-install-tools: tools/qemu-xen-traditional-dir tools/qemu-xen-dir
+install-tools: $(QEMU_TRAD_DIR_TARGET) tools/qemu-xen-dir
endif
.PHONY: install-kernels
@@ -82,19 +93,12 @@ install-kernels:
for i in $(XKERNELS) ; do $(MAKE) $$i-install || exit 1; done
.PHONY: install-stubdom
-install-stubdom: tools/qemu-xen-traditional-dir install-tools
+install-stubdom: $(QEMU_TRAD_DIR_TARGET) install-tools
$(MAKE) -C stubdom install
ifeq (x86_64,$(XEN_TARGET_ARCH))
XEN_TARGET_ARCH=x86_32 $(MAKE) -C stubdom install-grub
endif
-tools/qemu-xen-traditional-dir:
- $(MAKE) -C tools qemu-xen-traditional-dir-find
-
-.PHONY: tools/qemu-xen-traditional-dir-force-update
-tools/qemu-xen-traditional-dir-force-update:
- $(MAKE) -C tools qemu-xen-traditional-dir-force-update
-
tools/qemu-xen-dir:
$(MAKE) -C tools qemu-xen-dir-find
diff --git a/config/Tools.mk.in b/config/Tools.mk.in
index 5e2c6d8..2e80a93 100644
--- a/config/Tools.mk.in
+++ b/config/Tools.mk.in
@@ -52,6 +52,7 @@ CONFIG_LOMOUNT := @lomount@
CONFIG_OVMF := @ovmf@
CONFIG_ROMBIOS := @rombios@
CONFIG_SEABIOS := @seabios@
+CONFIG_QEMU_TRAD := @qemu_traditional@
#System options
CONFIG_SYSTEM_LIBAIO:= @system_aio@
diff --git a/stubdom/Makefile b/stubdom/Makefile
index 35295f0..19f2228 100644
--- a/stubdom/Makefile
+++ b/stubdom/Makefile
@@ -264,6 +264,10 @@ $(CROSS_ROOT): cross-newlib cross-zlib cross-libpci
QEMU_ROOT := $(shell if [ -d "$(CONFIG_QEMU)" ]; then echo
"$(CONFIG_QEMU)"; else echo .; fi)
+ifneq ($(filter ioemu,$(STUBDOM_TARGETS)),)
+IOEMU_LINKFARM_TARGET := ioemu/linkfarm.stamp
+endif
+
ifeq ($(QEMU_ROOT),.)
$(XEN_ROOT)/tools/qemu-xen-traditional-dir:
$(MAKE) DESTDIR= -C $(XEN_ROOT)/tools qemu-xen-traditional-dir-find
@@ -289,7 +293,7 @@ ioemu/linkfarm.stamp:
touch ioemu/linkfarm.stamp
endif
-mk-headers-$(XEN_TARGET_ARCH): ioemu/linkfarm.stamp
+mk-headers-$(XEN_TARGET_ARCH): $(IOEMU_LINKFARM_TARGET)
mkdir -p include/xen && \
ln -sf $(wildcard $(XEN_ROOT)/xen/include/public/*.h) include/xen
&& \
ln -sf $(addprefix $(XEN_ROOT)/xen/include/public/,arch-x86 hvm io
xsm) include/xen && \
diff --git a/stubdom/configure b/stubdom/configure
index 3da2677..81eff6d 100755
--- a/stubdom/configure
+++ b/stubdom/configure
@@ -562,6 +562,7 @@ LIBOBJS
STUBDOM_INSTALL
STUBDOM_BUILD
STUBDOM_TARGETS
+ioemu
vtpmmgr
vtpm
TPMEMU_VERSION
@@ -603,7 +604,14 @@ xenstore
grub
caml
c
-ioemu
+host_os
+host_vendor
+host_cpu
+host
+build_os
+build_vendor
+build_cpu
+build
target_alias
host_alias
build_alias
@@ -652,6 +660,7 @@ enable_pv_grub
enable_xenstore_stubdom
enable_vtpm_stubdom
enable_vtpmmgr_stubdom
+enable_qemu_traditional
enable_debug
enable_extfiles
''
@@ -1271,6 +1280,10 @@ Fine tuning of the installation directories:
_ACEOF
cat <<\_ACEOF
+
+System types:
+ --build=BUILD configure for building on BUILD [guessed]
+ --host=HOST cross-compile to build programs to run on HOST [BUILD]
_ACEOF
fi
@@ -1284,7 +1297,7 @@ Optional Features:
--disable-option-checking ignore unrecognized --enable/--with options
--disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
--enable-FEATURE[=ARG] include FEATURE [ARG=yes]
- --disable-ioemu-stubdom Build and install ioemu-stubdom (default is ENABLED)
+ --enable-ioemu-stubdom Build and install ioemu-stubdom
--enable-c-stubdom Build and install c-stubdom (default is DISABLED)
--enable-caml-stubdom Build and install caml-stubdom (default is DISABLED)
--disable-pv-grub Build and install pv-grub (default is ENABLED)
@@ -1294,6 +1307,7 @@ Optional Features:
--enable-vtpm-stubdom Build and install vtpm-stubdom
--enable-vtpmmgr-stubdom
Build and install vtpmmgr-stubdom
+
--disable-debug Disable debug build of stubdom (default is ENABLED)
--disable-extfiles Use xen extfiles repository for libraries (default
is ENABLED)
@@ -1821,6 +1835,78 @@ ac_configure="$SHELL $ac_aux_dir/configure" #
Please don''t use this var.
+# Make sure we can run config.sub.
+$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
+ as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub"
"$LINENO" 5
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type"
>&5
+$as_echo_n "checking build system type... " >&6; }
+if test "${ac_cv_build+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_build_alias=$build_alias
+test "x$ac_build_alias" = x &&
+ ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+test "x$ac_build_alias" = x &&
+ as_fn_error $? "cannot guess build type; you must specify one"
"$LINENO" 5
+ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
+ as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias
failed" "$LINENO" 5
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build"
>&5
+$as_echo "$ac_cv_build" >&6; }
+case $ac_cv_build in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical build"
"$LINENO" 5 ;;
+esac
+build=$ac_cv_build
+ac_save_IFS=$IFS; IFS=''-''
+set x $ac_cv_build
+shift
+build_cpu=$1
+build_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+build_os=$*
+IFS=$ac_save_IFS
+case $build_os in *\ *) build_os=`echo "$build_os" | sed ''s/
/-/g''`;; esac
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type"
>&5
+$as_echo_n "checking host system type... " >&6; }
+if test "${ac_cv_host+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test "x$host_alias" = x; then
+ ac_cv_host=$ac_cv_build
+else
+ ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
+ as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed"
"$LINENO" 5
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host"
>&5
+$as_echo "$ac_cv_host" >&6; }
+case $ac_cv_host in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical host"
"$LINENO" 5 ;;
+esac
+host=$ac_cv_host
+ac_save_IFS=$IFS; IFS=''-''
+set x $ac_cv_host
+shift
+host_cpu=$1
+host_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+host_os=$*
+IFS=$ac_save_IFS
+case $host_os in *\ *) host_os=`echo "$host_os" | sed ''s/
/-/g''`;; esac
+
+
+
# M4 Macro includes
@@ -1887,20 +1973,10 @@ fi
fi
-else
-
-
-ioemu=y
-STUBDOM_TARGETS="$STUBDOM_TARGETS ioemu"
-STUBDOM_BUILD="$STUBDOM_BUILD ioemu-stubdom"
-STUBDOM_INSTALL="$STUBDOM_INSTALL install-ioemu"
-
-
fi
-
# Check whether --enable-c-stubdom was given.
if test "${enable_c_stubdom+set}" = set; then :
enableval=$enable_c_stubdom;
@@ -2115,6 +2191,39 @@ fi
+# Check whether --enable-qemu-traditional was given.
+if test "${enable_qemu_traditional+set}" = set; then :
+ enableval=$enable_qemu_traditional;
+else
+
+ case "$host_cpu" in
+ i[3456]86|x86_64)
+ enable_qemu_traditional="yes";;
+ *) enable_qemu_traditional="no";;
+ esac
+
+fi
+
+if test "x$enable_qemu_traditional" = "xyes"; then :
+
+ qemu_traditional=y
+else
+
+ qemu_traditional=n
+
+fi
+if test "x$ioemu" = "x"; then :
+
+ ioemu=$qemu_traditional
+
+fi
+echo "x$ioemu$qemu_traditional"
+if test "x$ioemu$qemu_traditional" = "xyn"; then :
+
+ as_fn_error $? "IOEMU stubdomain requires qemu-traditional"
"$LINENO" 5
+
+fi
+
# Check whether --enable-debug was given.
if test "${enable_debug+set}" = set; then :
@@ -3474,6 +3583,25 @@ fi
+if test "x$ioemu" = "xy" || test "x$ioemu" =
"x"; then :
+
+
+ioemu=y
+STUBDOM_TARGETS="$STUBDOM_TARGETS ioemu"
+STUBDOM_BUILD="$STUBDOM_BUILD ioemu-stubdom"
+STUBDOM_INSTALL="$STUBDOM_INSTALL install-ioemu"
+
+
+else
+
+
+ioemu=n
+
+
+fi
+
+
+
diff --git a/stubdom/configure.ac b/stubdom/configure.ac
index 90fc94f..6468203 100644
--- a/stubdom/configure.ac
+++ b/stubdom/configure.ac
@@ -8,6 +8,8 @@ AC_CONFIG_SRCDIR([../extras/mini-os/kernel.c])
AC_CONFIG_FILES([../config/Stubdom.mk])
AC_CONFIG_AUX_DIR([../])
+AC_CANONICAL_HOST
+
# M4 Macro includes
m4_include([../m4/stubdom.m4])
m4_include([../m4/features.m4])
@@ -16,7 +18,7 @@ m4_include([../m4/depends.m4])
m4_include([../m4/fetcher.m4])
# Enable/disable stub domains
-AX_STUBDOM_DEFAULT_ENABLE([ioemu-stubdom], [ioemu])
+AX_STUBDOM_CONDITIONAL([ioemu-stubdom], [ioemu])
AX_STUBDOM_DEFAULT_DISABLE([c-stubdom], [c])
AX_STUBDOM_DEFAULT_DISABLE([caml-stubdom], [caml])
AX_STUBDOM_DEFAULT_ENABLE([pv-grub], [grub])
@@ -24,6 +26,25 @@ AX_STUBDOM_DEFAULT_ENABLE([xenstore-stubdom], [xenstore])
AX_STUBDOM_CONDITIONAL([vtpm-stubdom], [vtpm])
AX_STUBDOM_CONDITIONAL([vtpmmgr-stubdom], [vtpmmgr])
+AC_ARG_ENABLE([qemu-traditional],,,[
+ case "$host_cpu" in
+ i[[3456]]86|x86_64)
+ enable_qemu_traditional="yes";;
+ *) enable_qemu_traditional="no";;
+ esac
+])
+AS_IF([test "x$enable_qemu_traditional" = "xyes"], [
+ qemu_traditional=y],[
+ qemu_traditional=n
+])
+AS_IF([test "x$ioemu" = "x"], [
+ ioemu=$qemu_traditional
+])
+echo "x$ioemu$qemu_traditional"
+AS_IF([test "x$ioemu$qemu_traditional" = "xyn"], [
+ AC_MSG_ERROR(IOEMU stubdomain requires qemu-traditional)
+])
+
AX_ARG_DEFAULT_ENABLE([debug], [Disable debug build of stubdom])
AX_ARG_DEFAULT_ENABLE([extfiles], [Use xen extfiles repository for libraries])
@@ -55,6 +76,7 @@ AX_STUBDOM_AUTO_DEPENDS([vtpmmgr], [vtpm])
#Conditionally enable these stubdoms based on the presense of dependencies
AX_STUBDOM_CONDITIONAL_FINISH([vtpm-stubdom], [vtpm])
AX_STUBDOM_CONDITIONAL_FINISH([vtpmmgr-stubdom], [vtpmmgr])
+AX_STUBDOM_CONDITIONAL_FINISH([ioemu-stubdom], [ioemu])
AX_STUBDOM_FINISH
AC_OUTPUT()
diff --git a/tools/Makefile b/tools/Makefile
index e44a3e9..cee4229 100644
--- a/tools/Makefile
+++ b/tools/Makefile
@@ -34,7 +34,7 @@ SUBDIRS-$(CONFIG_Linux) += libvchan
# do not recurse in to a dir we are about to delete
ifneq "$(MAKECMDGOALS)" "distclean"
-SUBDIRS-$(CONFIG_IOEMU) += qemu-xen-traditional-dir
+SUBDIRS-$(CONFIG_QEMU_TRAD) += qemu-xen-traditional-dir
SUBDIRS-$(CONFIG_IOEMU) += qemu-xen-dir
endif
diff --git a/tools/config.h.in b/tools/config.h.in
index a67910b..1f91319 100644
--- a/tools/config.h.in
+++ b/tools/config.h.in
@@ -15,6 +15,9 @@
/* Define to 1 if you have the <memory.h> header file. */
#undef HAVE_MEMORY_H
+/* Qemu traditional enabled */
+#undef HAVE_QEMU_TRADITIONAL
+
/* Define to 1 if you have the <stdint.h> header file. */
#undef HAVE_STDINT_H
diff --git a/tools/configure b/tools/configure
index 079646c..8638210 100755
--- a/tools/configure
+++ b/tools/configure
@@ -654,6 +654,7 @@ APPEND_LIB
APPEND_INCLUDES
PREPEND_LIB
PREPEND_INCLUDES
+qemu_traditional
debug
seabios
rombios
@@ -734,6 +735,7 @@ enable_ovmf
enable_rombios
enable_seabios
enable_debug
+enable_qemu_traditional
''
ac_precious_vars=''build_alias
host_alias
@@ -1394,6 +1396,9 @@ Optional Features:
--disable-rombios Disable ROM BIOS (default is ENABLED)
--disable-seabios Disable SeaBIOS (default is ENABLED)
--disable-debug Disable debug build of tools (default is ENABLED)
+ --enable-qemu-traditional
+ Enable qemu traditional device model, (DEFAULT is on
+ for x86, otherwise off)
Some influential environment variables:
CC C compiler command
@@ -3654,6 +3659,32 @@ debug=$ax_cv_debug
+# Check whether --enable-qemu-traditional was given.
+if test "${enable_qemu_traditional+set}" = set; then :
+ enableval=$enable_qemu_traditional;
+else
+
+ case "$host_cpu" in
+ i[3456]86|x86_64)
+ enable_qemu_traditional="yes";;
+ *) enable_qemu_traditional="no";;
+ esac
+
+fi
+
+if test "x$enable_qemu_traditional" = "xyes"; then :
+
+
+$as_echo "#define HAVE_QEMU_TRADITIONAL 1" >>confdefs.h
+
+ qemu_traditional=y
+else
+
+ qemu_traditional=n
+
+fi
+
+
diff --git a/tools/configure.ac b/tools/configure.ac
index 4f5e688..5b5f7f6 100644
--- a/tools/configure.ac
+++ b/tools/configure.ac
@@ -60,6 +60,22 @@ AX_ARG_DEFAULT_ENABLE([rombios], [Disable ROM BIOS])
AX_ARG_DEFAULT_ENABLE([seabios], [Disable SeaBIOS])
AX_ARG_DEFAULT_ENABLE([debug], [Disable debug build of tools])
+AC_ARG_ENABLE([qemu-traditional],
+ AS_HELP_STRING([--enable-qemu-traditional],
+ [Enable qemu traditional device model, (DEFAULT is on for
x86, otherwise off)]),,[
+ case "$host_cpu" in
+ i[[3456]]86|x86_64)
+ enable_qemu_traditional="yes";;
+ *) enable_qemu_traditional="no";;
+ esac
+])
+AS_IF([test "x$enable_qemu_traditional" = "xyes"], [
+AC_DEFINE([HAVE_QEMU_TRADITIONAL], [1], [Qemu traditional enabled])
+ qemu_traditional=y],[
+ qemu_traditional=n
+])
+AC_SUBST(qemu_traditional)
+
AC_ARG_VAR([PREPEND_INCLUDES],
[List of include folders to prepend to CFLAGS (without -I)])
AC_ARG_VAR([PREPEND_LIB],
diff --git a/tools/libxl/libxl_create.c b/tools/libxl/libxl_create.c
index 0c32d0b..e4c614b 100644
--- a/tools/libxl/libxl_create.c
+++ b/tools/libxl/libxl_create.c
@@ -107,8 +107,14 @@ int libxl__domain_build_info_setdefault(libxl__gc *gc,
if (!b_info->device_model_version) {
if (b_info->type == LIBXL_DOMAIN_TYPE_HVM) {
if (libxl_defbool_val(b_info->device_model_stubdomain)) {
+#ifdef HAVE_QEMU_TRADITIONAL
b_info->device_model_version
LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN_TRADITIONAL;
+#else
+ LOG(ERROR, "device model stubdomains require
\"qemu-xen-traditional\", "
+ "but they were disabled at compile time");
+ return ERROR_INVAL;
+#endif
} else {
b_info->device_model_version =
libxl__default_device_model(gc);
}
@@ -138,6 +144,14 @@ int libxl__domain_build_info_setdefault(libxl__gc *gc,
}
}
+#ifndef HAVE_QEMU_TRADITIONAL
+ if (b_info->device_model_version
+ == LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN_TRADITIONAL) {
+ LOG(ERROR, "\"qemu-xen-traditional\" disabled at compile
time");
+ return ERROR_INVAL;
+ }
+#endif
+
if (b_info->blkdev_start == NULL)
b_info->blkdev_start = libxl__strdup(NOGC, "xvda");
--
1.7.2.5
Ian Campbell
2013-Aug-06 10:32 UTC
[PATCH 2/3] tools: allow user to specify a system qemu-xen binary
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>
---
Makefile | 20 ++++++++++++--------
config/Tools.mk.in | 1 +
tools/Makefile | 2 +-
tools/config.h.in | 3 +++
tools/configure | 41 +++++++++++++++++++++++++++++++++++++++++
tools/configure.ac | 21 +++++++++++++++++++++
tools/libxl/libxl_dm.c | 11 ++++++++++-
7 files changed, 89 insertions(+), 10 deletions(-)
diff --git a/Makefile b/Makefile
index a936fbe..2b91537 100644
--- 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
diff --git a/config/Tools.mk.in b/config/Tools.mk.in
index 2e80a93..3700e6d 100644
--- a/config/Tools.mk.in
+++ b/config/Tools.mk.in
@@ -53,6 +53,7 @@ CONFIG_OVMF := @ovmf@
CONFIG_ROMBIOS := @rombios@
CONFIG_SEABIOS := @seabios@
CONFIG_QEMU_TRAD := @qemu_traditional@
+CONFIG_QEMU_XEN := @qemu_xen@
#System options
CONFIG_SYSTEM_LIBAIO:= @system_aio@
diff --git a/tools/Makefile b/tools/Makefile
index cee4229..5ce839f 100644
--- a/tools/Makefile
+++ b/tools/Makefile
@@ -35,7 +35,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
diff --git a/tools/config.h.in b/tools/config.h.in
index 1f91319..8d5615b 100644
--- a/tools/config.h.in
+++ b/tools/config.h.in
@@ -72,6 +72,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
diff --git a/tools/configure b/tools/configure
index 8638210..1d9f2c8 100755
--- a/tools/configure
+++ b/tools/configure
@@ -654,6 +654,7 @@ APPEND_LIB
APPEND_INCLUDES
PREPEND_LIB
PREPEND_INCLUDES
+qemu_xen
qemu_traditional
debug
seabios
@@ -736,6 +737,7 @@ enable_rombios
enable_seabios
enable_debug
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 /usr/bin/qemu 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=/usr/bin/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
+
+
+
diff --git a/tools/configure.ac b/tools/configure.ac
index 5b5f7f6..e7e25c9 100644
--- a/tools/configure.ac
+++ b/tools/configure.ac
@@ -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 /usr/bin/qemu as qemu-xen device model
instead of building
+ and installing our own version]),[
+ case $withval in
+ yes) qemu_xen=n ; qemu_xen_path=/usr/bin/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],
diff --git a/tools/libxl/libxl_dm.c b/tools/libxl/libxl_dm.c
index 7e54c02..22b0aed 100644
--- a/tools/libxl/libxl_dm.c
+++ b/tools/libxl/libxl_dm.c
@@ -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,
--
1.7.2.5
Signed-off-by: Ian Campbell <ian.campbell@citrix.com> --- Makefile | 8 ++------ config/x86_32.mk | 1 - config/x86_64.mk | 1 - 3 files changed, 2 insertions(+), 8 deletions(-) diff --git a/Makefile b/Makefile index 2b91537..d915660 100644 --- a/Makefile +++ b/Makefile @@ -69,10 +69,6 @@ prep-kernels: install-xen: $(MAKE) -C xen install -.PHONY: install-tools -install-tools: - $(MAKE) -C tools install - ifeq ($(CONFIG_QEMU_TRAD),y) QEMU_TRAD_DIR_TGT := tools/qemu-xen-traditional-dir @@ -95,9 +91,9 @@ tools/qemu-xen-dir-force-update: $(MAKE) -C tools qemu-xen-dir-force-update endif -ifeq ($(CONFIG_IOEMU),y) +.PHONY: install-tools install-tools: $(QEMU_TRAD_DIR_TARGET) $(QEMU_XEN_DIR_TARGET) -endif + $(MAKE) -C tools install .PHONY: install-kernels install-kernels: diff --git a/config/x86_32.mk b/config/x86_32.mk index df52bd6..7f76b25 100644 --- a/config/x86_32.mk +++ b/config/x86_32.mk @@ -5,7 +5,6 @@ CONFIG_X86_$(XEN_OS) := y CONFIG_HVM := y CONFIG_MIGRATE := y CONFIG_XCUTILS := y -CONFIG_IOEMU ?= y CFLAGS += -m32 -march=i686 diff --git a/config/x86_64.mk b/config/x86_64.mk index 70c0d8d..d29eeda 100644 --- a/config/x86_64.mk +++ b/config/x86_64.mk @@ -6,7 +6,6 @@ CONFIG_COMPAT := y CONFIG_HVM := y CONFIG_MIGRATE := y CONFIG_XCUTILS := y -CONFIG_IOEMU ?= y CONFIG_XEN_INSTALL_SUFFIX := .gz -- 1.7.2.5
Jan Beulich
2013-Aug-06 11:50 UTC
Re: [PATCH 1/3] tools: Make qemu-xen-traditional build optional.
>>> On 06.08.13 at 12:32, Ian Campbell <ian.campbell@citrix.com> wrote: > Now that we have upstream qemu people may want to avoid building this extra > code. > > There is a little bit of trickery in stubdom/configure.ac to ensure that the > ioemu stubdom is only built if qemu-traditional is enabled. > > libxl will return an error if a caller tries to build a domain using > qemu-xen-traditional when this support was disabled at build time. Since > qemu-xen-traditional has been historically tightly bound to the Xen releases I > don''t see any value in supporting "3rd party" provision of > qemu-xen-traditional. > > We also do not want/need this on ARM therefore default is on for x86 and off > otherwise.Shouldn''t turning qemu-trad off imply also turning off xend/xm? Jan
Ian Campbell
2013-Aug-06 13:04 UTC
Re: [PATCH 1/3] tools: Make qemu-xen-traditional build optional.
On Tue, 2013-08-06 at 12:50 +0100, Jan Beulich wrote:> >>> On 06.08.13 at 12:32, Ian Campbell <ian.campbell@citrix.com> wrote: > > Now that we have upstream qemu people may want to avoid building this extra > > code. > > > > There is a little bit of trickery in stubdom/configure.ac to ensure that the > > ioemu stubdom is only built if qemu-traditional is enabled. > > > > libxl will return an error if a caller tries to build a domain using > > qemu-xen-traditional when this support was disabled at build time. Since > > qemu-xen-traditional has been historically tightly bound to the Xen releases I > > don''t see any value in supporting "3rd party" provision of > > qemu-xen-traditional. > > > > We also do not want/need this on ARM therefore default is on for x86 and off > > otherwise. > > Shouldn''t turning qemu-trad off imply also turning off xend/xm?You could still use PV domains without qemu-trad. Ian.
Ian Jackson
2013-Aug-07 15:19 UTC
Re: [PATCH 1/3] tools: Make qemu-xen-traditional build optional.
Ian Campbell writes ("[PATCH 1/3] tools: Make qemu-xen-traditional build
optional."):> Now that we have upstream qemu people may want to avoid building this extra
> code.
>
> There is a little bit of trickery in stubdom/configure.ac to ensure that
the
> ioemu stubdom is only built if qemu-traditional is enabled.
>
> libxl will return an error if a caller tries to build a domain using
> qemu-xen-traditional when this support was disabled at build time. Since
> qemu-xen-traditional has been historically tightly bound to the Xen
releases I
> don''t see any value in supporting "3rd party" provision
of
> qemu-xen-traditional.
>
> We also do not want/need this on ARM therefore default is on for x86 and
off
> otherwise.
Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
Ian Jackson
2013-Aug-07 15:21 UTC
Re: [PATCH 2/3] tools: allow user to specify a system qemu-xen binary
Ian Campbell writes ("[PATCH 2/3] tools: allow user to specify a system
qemu-xen binary"):
> + --with-system-qemu[=PATH]
> + Use system supplied qemu PATH or /usr/bin/qemu
as
> + qemu-xen device model instead of building and
> + installing our own version
I think that if you say "yes" you ought to get "qemu" from
the
ordinary search PATH, not necessarily /usr/bin/qemu. (eg,
/usr/local/bin/qemu)
Ian.
Ian Campbell writes ("[PATCH 3/3] build: CONFIG_IOEMU is now
obsolete"):> Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
(supposing the other patches go in first)
Ian Campbell
2013-Aug-08 08:39 UTC
Re: [PATCH 2/3] tools: allow user to specify a system qemu-xen binary
On Wed, 2013-08-07 at 16:21 +0100, Ian Jackson wrote:> Ian Campbell writes ("[PATCH 2/3] tools: allow user to specify a system qemu-xen binary"): > > > + --with-system-qemu[=PATH] > > + Use system supplied qemu PATH or /usr/bin/qemu as > > + qemu-xen device model instead of building and > > + installing our own version > > I think that if you say "yes" you ought to get "qemu" from the > ordinary search PATH, not necessarily /usr/bin/qemu. (eg, > /usr/local/bin/qemu)Good idea. Ian.
Ian Campbell
2013-Aug-08 14:16 UTC
Re: [PATCH 2/3] tools: allow user to specify a system qemu-xen binary
On Thu, 2013-08-08 at 09:39 +0100, Ian Campbell wrote:> On Wed, 2013-08-07 at 16:21 +0100, Ian Jackson wrote: > > Ian Campbell writes ("[PATCH 2/3] tools: allow user to specify a system qemu-xen binary"): > > > > > + --with-system-qemu[=PATH] > > > + Use system supplied qemu PATH or /usr/bin/qemu as > > > + qemu-xen device model instead of building and > > > + installing our own version > > > > I think that if you say "yes" you ought to get "qemu" from the > > ordinary search PATH, not necessarily /usr/bin/qemu. (eg, > > /usr/local/bin/qemu) > > Good idea.Rather than resend the whole series here is v2 of that one patch: 8<-------- From 620a0ba3721c2f991581b74814cab890264a45ee Mon Sep 17 00:00:00 2001 From: Ian Campbell <ian.campbell@citrix.com> Date: Wed, 15 May 2013 14:47:32 +0100 Subject: [PATCH] tools: allow user to specify a system qemu-xen binary 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> --- v2: --with-system-qemu defaults to qemu rather than /usr/bin/qemu. --- Makefile | 20 ++++++++++++-------- config/Tools.mk.in | 1 + tools/Makefile | 2 +- tools/config.h.in | 3 +++ tools/configure | 41 +++++++++++++++++++++++++++++++++++++++++ tools/configure.ac | 21 +++++++++++++++++++++ tools/libxl/libxl_dm.c | 11 ++++++++++- 7 files changed, 89 insertions(+), 10 deletions(-) diff --git a/Makefile b/Makefile index a936fbe..2b91537 100644 --- 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 diff --git a/config/Tools.mk.in b/config/Tools.mk.in index 2e80a93..3700e6d 100644 --- a/config/Tools.mk.in +++ b/config/Tools.mk.in @@ -53,6 +53,7 @@ CONFIG_OVMF := @ovmf@ CONFIG_ROMBIOS := @rombios@ CONFIG_SEABIOS := @seabios@ CONFIG_QEMU_TRAD := @qemu_traditional@ +CONFIG_QEMU_XEN := @qemu_xen@ #System options CONFIG_SYSTEM_LIBAIO:= @system_aio@ diff --git a/tools/Makefile b/tools/Makefile index cee4229..5ce839f 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -35,7 +35,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 diff --git a/tools/config.h.in b/tools/config.h.in index 1f91319..8d5615b 100644 --- a/tools/config.h.in +++ b/tools/config.h.in @@ -72,6 +72,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 diff --git a/tools/configure b/tools/configure index 8638210..ae8a877 100755 --- a/tools/configure +++ b/tools/configure @@ -654,6 +654,7 @@ APPEND_LIB APPEND_INCLUDES PREPEND_LIB PREPEND_INCLUDES +qemu_xen qemu_traditional debug seabios @@ -736,6 +737,7 @@ enable_rombios enable_seabios enable_debug 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 + + + diff --git a/tools/configure.ac b/tools/configure.ac index 5b5f7f6..06cffdf 100644 --- a/tools/configure.ac +++ b/tools/configure.ac @@ -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], diff --git a/tools/libxl/libxl_dm.c b/tools/libxl/libxl_dm.c index 7e54c02..22b0aed 100644 --- a/tools/libxl/libxl_dm.c +++ b/tools/libxl/libxl_dm.c @@ -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, -- 1.7.2.5
Ian Jackson
2013-Aug-19 13:45 UTC
Re: [PATCH 2/3] tools: allow user to specify a system qemu-xen binary
Ian Campbell writes ("Re: [Xen-devel] [PATCH 2/3] tools: allow user to
specify a system qemu-xen binary"):> On Thu, 2013-08-08 at 09:39 +0100, Ian Campbell wrote:
> > On Wed, 2013-08-07 at 16:21 +0100, Ian Jackson wrote:
> > > I think that if you say "yes" you ought to get
"qemu" from the
> > > ordinary search PATH, not necessarily /usr/bin/qemu. (eg,
> > > /usr/local/bin/qemu)
> >
> > Good idea.
>
> Rather than resend the whole series here is v2 of that one patch:
Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
Ian Campbell
2013-Aug-21 10:04 UTC
Re: [PATCH 0/3] tools: build: allow disabling qemu-trad and selecting system qemu-xen
On Tue, 2013-08-06 at 11:31 +0100, Ian Campbell wrote:> depends on "autoconf: regenerate configure scripts with 4.4 version"There were some trivial conflicts with the "cruft removal" patch series I committed yesterday. I have fixed these up and committed. Ian.