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 versionI 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.