From b0f69ec5c71de1248d915c193b57c43e786857dd Mon Sep 17 00:00:00 2001 From: Ian Campbell Date: Tue, 6 Aug 2013 11:32:32 +0100 Subject: 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 Acked-by: Ian Jackson [ ijc -- trivial conflicts in Tools.mk.in and tools/configure.ac. Reran autogen.sh ] --- 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 ++++++ 9 files changed, 233 insertions(+), 24 deletions(-) diff --git a/Makefile b/Makefile index 5a7107eb21..a936fbe441 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 1915295d50..5ec96231f7 100644 --- a/config/Tools.mk.in +++ b/config/Tools.mk.in @@ -50,6 +50,7 @@ FLASK_POLICY := @xsmpolicy@ CONFIG_OVMF := @ovmf@ CONFIG_ROMBIOS := @rombios@ CONFIG_SEABIOS := @seabios@ +CONFIG_QEMU_TRAD := @qemu_traditional@ CONFIG_XEND := @xend@ CONFIG_BLKTAP1 := @blktap1@ diff --git a/stubdom/Makefile b/stubdom/Makefile index 35295f0bce..19f2228951 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 3da267758b..81eff6d1c9 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 90fc94f591..6468203b63 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 381af04849..6fa589b09c 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -28,7 +28,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 8bda0bd259..f84422213f 100644 --- a/tools/config.h.in +++ b/tools/config.h.in @@ -18,6 +18,9 @@ /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H +/* Qemu traditional enabled */ +#undef HAVE_QEMU_TRADITIONAL + /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H diff --git a/tools/configure b/tools/configure index ad4b5feb42..739842381c 100755 --- a/tools/configure +++ b/tools/configure @@ -654,6 +654,7 @@ APPEND_LIB APPEND_INCLUDES PREPEND_LIB PREPEND_INCLUDES +qemu_traditional blktap1 xend debug @@ -734,6 +735,7 @@ enable_seabios enable_debug enable_xend enable_blktap1 +enable_qemu_traditional ' ac_precious_vars='build_alias host_alias @@ -1394,6 +1396,9 @@ Optional Features: --disable-debug Disable debug build of tools (default is ENABLED) --disable-xend Disable xend toolstack (default is ENABLED) --enable-blktap1 Disable blktap1 tools (default is DISABLED) + --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 @@ blktap1=$ax_cv_blktap1 +# 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 1b4625a299..9b05478083 100644 --- a/tools/configure.ac +++ b/tools/configure.ac @@ -60,6 +60,22 @@ AX_ARG_DEFAULT_ENABLE([debug], [Disable debug build of tools]) AX_ARG_DEFAULT_ENABLE([xend], [Disable xend toolstack]) AX_ARG_DEFAULT_DISABLE([blktap1], [Disable blktap1 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], -- cgit v1.2.3