--- qemu/configure 2018/04/24 16:37:52 1.1 +++ qemu/configure 2018/04/24 17:27:58 1.1.1.10 @@ -15,6 +15,10 @@ TMPC="${TMPDIR1}/qemu-conf-${RANDOM}-$$- TMPO="${TMPDIR1}/qemu-conf-${RANDOM}-$$-${RANDOM}.o" TMPE="${TMPDIR1}/qemu-conf-${RANDOM}-$$-${RANDOM}" TMPS="${TMPDIR1}/qemu-conf-${RANDOM}-$$-${RANDOM}.S" +TMPI="${TMPDIR1}/qemu-conf-${RANDOM}-$$-${RANDOM}.i" +TMPSDLLOG="${TMPDIR1}/qemu-conf-sdl-$$-${RANDOM}.log" + +trap "rm -f $TMPC $TMPO $TMPE $TMPS $TMPI $TMPSDLLOG; exit" 0 2 3 15 # default parameters prefix="" @@ -22,148 +26,371 @@ interp_prefix="/usr/gnemul/qemu-%M" static="no" cross_prefix="" cc="gcc" +audio_drv_list="" +audio_card_list="ac97 es1370 sb16" +audio_possible_cards="ac97 es1370 sb16 cs4231a adlib gus" host_cc="gcc" ar="ar" make="make" +install="install" strip="strip" -cpu=`uname -m` +objcopy="objcopy" +ld="ld" + +# parse CC options first +for opt do + optarg=`expr "x$opt" : 'x[^=]*=\(.*\)'` + case "$opt" in + --cross-prefix=*) cross_prefix="$optarg" + ;; + --cc=*) cc="$optarg" + ;; + esac +done + +# OS specific +# Using uname is really, really broken. Once we have the right set of checks +# we can eliminate it's usage altogether + +cc="${cross_prefix}${cc}" +ar="${cross_prefix}${ar}" +strip="${cross_prefix}${strip}" +objcopy="${cross_prefix}${objcopy}" +ld="${cross_prefix}${ld}" + +# check that the C compiler works. +cat > $TMPC < /dev/null 2> /dev/null ; then + : C compiler works ok +else + echo "ERROR: \"$cc\" either does not exist or does not work" + exit 1 +fi + +check_define() { +cat > $TMPC < /dev/null 2> /dev/null +} + +if check_define __i386__ ; then + cpu="i386" +elif check_define __x86_64__ ; then + cpu="x86_64" +elif check_define __sparc__ ; then + # We can't check for 64 bit (when gcc is biarch) or V8PLUSA + # They must be specified using --sparc_cpu + if check_define __arch64__ ; then + cpu="sparc64" + else + cpu="sparc" + fi +elif check_define _ARCH_PPC ; then + if check_define _ARCH_PPC64 ; then + cpu="ppc64" + else + cpu="ppc" + fi +else + cpu=`uname -m` +fi + target_list="" case "$cpu" in i386|i486|i586|i686|i86pc|BePC) cpu="i386" ;; + x86_64|amd64) + cpu="x86_64" + ;; + alpha) + cpu="alpha" + ;; armv*b) cpu="armv4b" ;; armv*l) cpu="armv4l" ;; - alpha) - cpu="alpha" + cris) + cpu="cris" ;; - "Power Macintosh"|ppc|ppc64) - cpu="powerpc" + parisc|parisc64) + cpu="hppa" + ;; + ia64) + cpu="ia64" + ;; + m68k) + cpu="m68k" + ;; + microblaze) + cpu="microblaze" ;; mips) cpu="mips" ;; - s390) + mips64) + cpu="mips64" + ;; + ppc) + cpu="ppc" + ;; + ppc64) + cpu="ppc64" + ;; + s390*) cpu="s390" ;; - sparc) + sparc|sun4[cdmuv]) cpu="sparc" ;; sparc64) cpu="sparc64" ;; - ia64) - cpu="ia64" - ;; - m68k) - cpu="m68k" - ;; - x86_64|amd64) - cpu="x86_64" - ;; *) cpu="unknown" ;; esac gprof="no" +debug_tcg="no" +debug="no" +sparse="no" +strip_opt="yes" bigendian="no" mingw32="no" EXESUF="" -gdbstub="yes" slirp="yes" -adlib="no" -oss="no" -fmod="no" +vde="yes" fmod_lib="" fmod_inc="" +oss_lib="" +vnc_tls="yes" +vnc_sasl="yes" +bsd="no" linux="no" +solaris="no" kqemu="no" -kernel_path="" +profiler="no" cocoa="no" -check_gfx="yes" +softmmu="yes" +linux_user="no" +darwin_user="no" +bsd_user="no" +build_docs="yes" +uname_release="" +curses="yes" +curl="yes" +pthread="yes" +aio="yes" +io_thread="no" +nptl="yes" +mixemu="no" +bluez="yes" +kvm="no" +kerneldir="" +aix="no" +blobs="yes" +fdt="yes" +sdl="yes" +sdl_x11="no" +xen="yes" +pkgversion="" # OS specific -targetos=`uname -s` +if check_define __linux__ ; then + targetos="Linux" +elif check_define _WIN32 ; then + targetos='MINGW32' +elif check_define __OpenBSD__ ; then + targetos='OpenBSD' +elif check_define __sun__ ; then + targetos='SunOS' +else + targetos=`uname -s` +fi case $targetos in CYGWIN*) mingw32="yes" -CFLAGS="-O2 -mno-cygwin" +OS_CFLAGS="-mno-cygwin" +if [ "$cpu" = "i386" ] ; then + kqemu="yes" +fi +audio_possible_drivers="sdl" ;; MINGW32*) mingw32="yes" +if [ "$cpu" = "i386" ] ; then + kqemu="yes" +fi +audio_possible_drivers="dsound sdl fmod" +;; +GNU/kFreeBSD) +audio_drv_list="oss" +audio_possible_drivers="oss sdl esd pa" +if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then + kqemu="yes" +fi ;; FreeBSD) bsd="yes" -oss="yes" +audio_drv_list="oss" +audio_possible_drivers="oss sdl esd pa" if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then kqemu="yes" fi ;; +DragonFly) +bsd="yes" +audio_drv_list="oss" +audio_possible_drivers="oss sdl esd pa" +if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then + kqemu="yes" +fi +aio="no" +;; NetBSD) bsd="yes" -oss="yes" +audio_drv_list="oss" +audio_possible_drivers="oss sdl esd" +oss_lib="-lossaudio" ;; OpenBSD) bsd="yes" -oss="yes" +openbsd="yes" +audio_drv_list="oss" +audio_possible_drivers="oss sdl esd" +oss_lib="-lossaudio" ;; Darwin) bsd="yes" darwin="yes" +# on Leopard most of the system is 32-bit, so we have to ask the kernel it if we can run 64-bit userspace code +if [ "$cpu" = "i386" ] ; then + is_x86_64=`sysctl -n hw.optional.x86_64` + [ "$is_x86_64" = "1" ] && cpu=x86_64 +fi +if [ "$cpu" = "x86_64" ] ; then + OS_CFLAGS="-arch x86_64" + LDFLAGS="-arch x86_64" +else + OS_CFLAGS="-mdynamic-no-pic" +fi +darwin_user="yes" +cocoa="yes" +audio_drv_list="coreaudio" +audio_possible_drivers="coreaudio sdl fmod" +OS_LDFLAGS="-framework CoreFoundation -framework IOKit" +;; +SunOS) + solaris="yes" + make="gmake" + install="ginstall" + needs_libsunmath="no" + solarisrev=`uname -r | cut -f2 -d.` + # have to select again, because `uname -m` returns i86pc + # even on an x86_64 box. + solariscpu=`isainfo -k` + if test "${solariscpu}" = "amd64" ; then + cpu="x86_64" + fi + if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then + if test "$solarisrev" -le 9 ; then + if test -f /opt/SUNWspro/prod/lib/libsunmath.so.1; then + needs_libsunmath="yes" + else + echo "QEMU will not link correctly on Solaris 8/X86 or 9/x86 without" + echo "libsunmath from the Sun Studio compilers tools, due to a lack of" + echo "C99 math features in libm.so in Solaris 8/x86 and Solaris 9/x86" + echo "Studio 11 can be downloaded from www.sun.com." + exit 1 + fi + fi + if test "$solarisrev" -ge 9 ; then + kqemu="yes" + fi + fi + if test -f /usr/include/sys/soundcard.h ; then + audio_drv_list="oss" + fi + audio_possible_drivers="oss sdl" + OS_CFLAGS=-std=gnu99 ;; -*) -oss="yes" +AIX) +aix="yes" +make="gmake" +;; +*) +audio_drv_list="oss" +audio_possible_drivers="oss alsa sdl esd pa" linux="yes" +linux_user="yes" +usb="linux" +kvm="yes" if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then kqemu="yes" + audio_possible_drivers="$audio_possible_drivers fmod" fi ;; esac if [ "$bsd" = "yes" ] ; then - if [ ! "$darwin" = "yes" ] ; then + if [ "$darwin" != "yes" ] ; then make="gmake" + usb="bsd" fi + bsd_user="yes" fi # find source path -# XXX: we assume an absolute path is given when launching configure, -# except in './configure' case. -source_path=${0%configure} -source_path=${source_path%/} -source_path_used="yes" -if test -z "$source_path" -o "$source_path" = "." ; then - source_path=`pwd` - source_path_used="no" +source_path=`dirname "$0"` +source_path_used="no" +workdir=`pwd` +if [ -z "$source_path" ]; then + source_path=$workdir +else + source_path=`cd "$source_path"; pwd` fi +[ -f "$workdir/vl.c" ] || source_path_used="yes" + +werror="" for opt do + optarg=`expr "x$opt" : 'x[^=]*=\(.*\)'` case "$opt" in - --prefix=*) prefix=`echo $opt | cut -d '=' -f 2` + --help|-h) show_help=yes ;; - --interp-prefix=*) interp_prefix=`echo $opt | cut -d '=' -f 2` + --prefix=*) prefix="$optarg" ;; - --source-path=*) source_path=`echo $opt | cut -d '=' -f 2` + --interp-prefix=*) interp_prefix="$optarg" ;; - --cross-prefix=*) cross_prefix=`echo $opt | cut -d '=' -f 2` + --source-path=*) source_path="$optarg" + source_path_used="yes" ;; - --cc=*) cc=`echo $opt | cut -d '=' -f 2` + --cross-prefix=*) ;; - --host-cc=*) host_cc=`echo $opt | cut -d '=' -f 2` + --cc=*) ;; - --make=*) make=`echo $opt | cut -d '=' -f 2` + --host-cc=*) host_cc="$optarg" ;; - --extra-cflags=*) CFLAGS="${opt#--extra-cflags=}" + --make=*) make="$optarg" ;; - --extra-ldflags=*) LDFLAGS="${opt#--extra-ldflags=}" + --install=*) install="$optarg" ;; - --cpu=*) cpu=`echo $opt | cut -d '=' -f 2` + --extra-cflags=*) EXTRA_CFLAGS="$optarg" ;; - --target-list=*) target_list=${opt#--target-list=} + --extra-ldflags=*) EXTRA_LDFLAGS="$optarg" + ;; + --cpu=*) cpu="$optarg" + ;; + --target-list=*) target_list="$optarg" ;; --enable-gprof) gprof="yes" ;; @@ -171,57 +398,371 @@ for opt do ;; --disable-sdl) sdl="no" ;; - --enable-fmod) fmod="yes" + --fmod-lib=*) fmod_lib="$optarg" + ;; + --fmod-inc=*) fmod_inc="$optarg" + ;; + --oss-lib=*) oss_lib="$optarg" + ;; + --audio-card-list=*) audio_card_list=`echo "$optarg" | sed -e 's/,/ /g'` + ;; + --audio-drv-list=*) audio_drv_list="$optarg" + ;; + --enable-debug-tcg) debug_tcg="yes" ;; - --fmod-lib=*) fmod_lib=${opt#--fmod-lib=} + --disable-debug-tcg) debug_tcg="no" ;; - --fmod-inc=*) fmod_inc=${opt#--fmod-inc=} + --enable-debug) + # Enable debugging options that aren't excessively noisy + debug_tcg="yes" + debug="yes" + strip_opt="no" + ;; + --enable-sparse) sparse="yes" + ;; + --disable-sparse) sparse="no" + ;; + --disable-strip) strip_opt="no" + ;; + --disable-vnc-tls) vnc_tls="no" + ;; + --disable-vnc-sasl) vnc_sasl="no" ;; - --enable-mingw32) mingw32="yes" ; cross_prefix="i386-mingw32-" - ;; --disable-slirp) slirp="no" - ;; - --enable-adlib) adlib="yes" - ;; + ;; + --disable-vde) vde="no" + ;; --disable-kqemu) kqemu="no" - ;; - --kernel-path=*) kernel_path=${opt#--kernel-path=} - ;; - --enable-cocoa) cocoa="yes" ; sdl="no" - ;; - --disable-gfx-check) check_gfx="no" + ;; + --disable-xen) xen="no" + ;; + --disable-brlapi) brlapi="no" + ;; + --disable-bluez) bluez="no" + ;; + --disable-kvm) kvm="no" + ;; + --enable-profiler) profiler="yes" + ;; + --enable-cocoa) + cocoa="yes" ; + sdl="no" ; + audio_drv_list="coreaudio `echo $audio_drv_list | sed s,coreaudio,,g`" + ;; + --disable-system) softmmu="no" + ;; + --enable-system) softmmu="yes" + ;; + --disable-linux-user) linux_user="no" + ;; + --enable-linux-user) linux_user="yes" + ;; + --disable-darwin-user) darwin_user="no" + ;; + --enable-darwin-user) darwin_user="yes" + ;; + --disable-bsd-user) bsd_user="no" + ;; + --enable-bsd-user) bsd_user="yes" + ;; + --enable-uname-release=*) uname_release="$optarg" + ;; + --sparc_cpu=*) + sparc_cpu="$optarg" + case $sparc_cpu in + v7|v8) SP_CFLAGS="-m32 -mcpu=${sparc_cpu} -D__sparc_${sparc_cpu}__"; SP_LDFLAGS="-m32" + target_arch2="sparc"; cpu="sparc" ;; + v8plus|v8plusa) SP_CFLAGS="-m32 -mcpu=ultrasparc -D__sparc_${sparc_cpu}__"; SP_LDFLAGS="-m32" + target_arch2="sparc"; cpu="sparc" ;; + v9) SP_CFLAGS="-m64 -mcpu=ultrasparc -D__sparc_${sparc_cpu}__"; SP_LDFLAGS="-m64" + target_arch2="sparc64"; cpu="sparc64" ;; + *) echo "undefined SPARC architecture. Exiting";exit 1;; + esac + ;; + --enable-werror) werror="yes" + ;; + --disable-werror) werror="no" + ;; + --disable-curses) curses="no" + ;; + --disable-curl) curl="no" + ;; + --disable-nptl) nptl="no" + ;; + --enable-mixemu) mixemu="yes" + ;; + --disable-pthread) pthread="no" + ;; + --disable-aio) aio="no" + ;; + --enable-io-thread) io_thread="yes" + ;; + --disable-blobs) blobs="no" + ;; + --kerneldir=*) kerneldir="$optarg" + ;; + --with-pkgversion=*) pkgversion=" ($optarg)" + ;; + --disable-docs) build_docs="no" + ;; + *) echo "ERROR: unknown option $opt"; show_help="yes" ;; esac done -# Checking for CFLAGS -if test -z "$CFLAGS"; then - CFLAGS="-O2" +# default flags for all hosts +CFLAGS="$CFLAGS -g -fno-strict-aliasing" +if test "$debug" = "no" ; then + CFLAGS="$CFLAGS -O2" +fi +CFLAGS="$CFLAGS -Wall -Wundef -Wendif-labels -Wwrite-strings -Wmissing-prototypes -Wstrict-prototypes -Wredundant-decls" +LDFLAGS="$LDFLAGS -g" + +# Consult white-list to determine whether to enable werror +# by default. Only enable by default for git builds +if test -z "$werror" ; then + z_version=`cut -f3 -d. $source_path/VERSION` + if test "$z_version" = "50" -a \ + "$linux" = "yes" ; then + werror="yes" + else + werror="no" + fi fi -cc="${cross_prefix}${cc}" -ar="${cross_prefix}${ar}" -strip="${cross_prefix}${strip}" +if test "$werror" = "yes" ; then + CFLAGS="$CFLAGS -Werror" +fi + +if test "$solaris" = "no" ; then + if ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then + LDFLAGS="$LDFLAGS -Wl,--warn-common" + fi +fi + +# +# If cpu ~= sparc and sparc_cpu hasn't been defined, plug in the right +# ARCH_CFLAGS/ARCH_LDFLAGS (assume sparc_v8plus for 32-bit and sparc_v9 for 64-bit) +# +case "$cpu" in + sparc) if test -z "$sparc_cpu" ; then + ARCH_CFLAGS="-m32 -mcpu=ultrasparc -D__sparc_v8plus__" + ARCH_LDFLAGS="-m32" + else + ARCH_CFLAGS="${SP_CFLAGS}" + ARCH_LDFLAGS="${SP_LDFLAGS}" + fi + ARCH_CFLAGS="$ARCH_CFLAGS -ffixed-g2 -ffixed-g3" + if test "$solaris" = "no" ; then + ARCH_CFLAGS="$ARCH_CFLAGS -ffixed-g1 -ffixed-g6" + fi + ;; + sparc64) if test -z "$sparc_cpu" ; then + ARCH_CFLAGS="-m64 -mcpu=ultrasparc -D__sparc_v9__" + ARCH_LDFLAGS="-m64" + else + ARCH_CFLAGS="${SP_CFLAGS}" + ARCH_LDFLAGS="${SP_LDFLAGS}" + fi + if test "$solaris" = "no" ; then + ARCH_CFLAGS="$ARCH_CFLAGS -ffixed-g5 -ffixed-g6 -ffixed-g7" + else + ARCH_CFLAGS="$ARCH_CFLAGS -ffixed-g1 -ffixed-g5 -ffixed-g6 -ffixed-g7" + fi + ;; + s390) + ARCH_CFLAGS="-march=z900" + ;; + i386) + ARCH_CFLAGS="-m32" + ARCH_LDFLAGS="-m32" + ;; + x86_64) + ARCH_CFLAGS="-m64" + ARCH_LDFLAGS="-m64" + ;; +esac + +if test x"$show_help" = x"yes" ; then +cat << EOF + +Usage: configure [options] +Options: [defaults in brackets after descriptions] + +EOF +echo "Standard options:" +echo " --help print this message" +echo " --prefix=PREFIX install in PREFIX [$prefix]" +echo " --interp-prefix=PREFIX where to find shared libraries, etc." +echo " use %M for cpu name [$interp_prefix]" +echo " --target-list=LIST set target list [$target_list]" +echo "" +echo "kqemu kernel acceleration support:" +echo " --disable-kqemu disable kqemu support" +echo "" +echo "Advanced options (experts only):" +echo " --source-path=PATH path of source code [$source_path]" +echo " --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]" +echo " --cc=CC use C compiler CC [$cc]" +echo " --host-cc=CC use C compiler CC [$host_cc] for dyngen etc." +echo " --extra-cflags=CFLAGS append extra C compiler flags CFLAGS" +echo " --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS" +echo " --make=MAKE use specified make [$make]" +echo " --install=INSTALL use specified install [$install]" +echo " --static enable static build [$static]" +echo " --enable-debug-tcg enable TCG debugging" +echo " --disable-debug-tcg disable TCG debugging (default)" +echo " --enable-debug enable common debug build options" +echo " --enable-sparse enable sparse checker" +echo " --disable-sparse disable sparse checker (default)" +echo " --disable-strip disable stripping binaries" +echo " --disable-werror disable compilation abort on warning" +echo " --disable-sdl disable SDL" +echo " --enable-cocoa enable COCOA (Mac OS X only)" +echo " --audio-drv-list=LIST set audio drivers list:" +echo " Available drivers: $audio_possible_drivers" +echo " --audio-card-list=LIST set list of emulated audio cards [$audio_card_list]" +echo " Available cards: $audio_possible_cards" +echo " --enable-mixemu enable mixer emulation" +echo " --disable-xen disable xen backend driver support" +echo " --disable-brlapi disable BrlAPI" +echo " --disable-vnc-tls disable TLS encryption for VNC server" +echo " --disable-vnc-sasl disable SASL encryption for VNC server" +echo " --disable-curses disable curses output" +echo " --disable-curl disable curl connectivity" +echo " --disable-bluez disable bluez stack connectivity" +echo " --disable-kvm disable KVM acceleration support" +echo " --disable-nptl disable usermode NPTL support" +echo " --enable-system enable all system emulation targets" +echo " --disable-system disable all system emulation targets" +echo " --enable-linux-user enable all linux usermode emulation targets" +echo " --disable-linux-user disable all linux usermode emulation targets" +echo " --enable-darwin-user enable all darwin usermode emulation targets" +echo " --disable-darwin-user disable all darwin usermode emulation targets" +echo " --enable-bsd-user enable all BSD usermode emulation targets" +echo " --disable-bsd-user disable all BSD usermode emulation targets" +echo " --fmod-lib path to FMOD library" +echo " --fmod-inc path to FMOD includes" +echo " --oss-lib path to OSS library" +echo " --enable-uname-release=R Return R for uname -r in usermode emulation" +echo " --sparc_cpu=V Build qemu for Sparc architecture v7, v8, v8plus, v8plusa, v9" +echo " --disable-vde disable support for vde network" +echo " --disable-pthread disable pthread support" +echo " --disable-aio disable AIO support" +echo " --enable-io-thread enable IO thread" +echo " --disable-blobs disable installing provided firmware blobs" +echo " --kerneldir=PATH look for kernel includes in PATH" +echo "" +echo "NOTE: The object files are built at the place where configure is launched" +exit 1 +fi if test "$mingw32" = "yes" ; then linux="no" EXESUF=".exe" - gdbstub="no" oss="no" - if [ "$cpu" = "i386" ] ; then - kqemu="yes" + linux_user="no" + bsd_user="no" + OS_CFLAGS="$OS_CFLAGS -DWIN32_LEAN_AND_MEAN -DWINVER=0x501" +fi + +if test ! -x "$(which cgcc 2>/dev/null)"; then + sparse="no" +fi + +# +# Solaris specific configure tool chain decisions +# +if test "$solaris" = "yes" ; then + solinst=`which $install 2> /dev/null | /usr/bin/grep -v "no $install in"` + if test -z "$solinst" ; then + echo "Solaris install program not found. Use --install=/usr/ucb/install or" + echo "install fileutils from www.blastwave.org using pkg-get -i fileutils" + echo "to get ginstall which is used by default (which lives in /opt/csw/bin)" + exit 1 + fi + if test "$solinst" = "/usr/sbin/install" ; then + echo "Error: Solaris /usr/sbin/install is not an appropriate install program." + echo "try ginstall from the GNU fileutils available from www.blastwave.org" + echo "using pkg-get -i fileutils, or use --install=/usr/ucb/install" + exit 1 + fi + sol_ar=`which ar 2> /dev/null | /usr/bin/grep -v "no ar in"` + if test -z "$sol_ar" ; then + echo "Error: No path includes ar" + if test -f /usr/ccs/bin/ar ; then + echo "Add /usr/ccs/bin to your path and rerun configure" fi + exit 1 + fi fi + if test -z "$target_list" ; then # these targets are portable - target_list="i386-softmmu ppc-softmmu sparc-softmmu x86_64-softmmu mips-softmmu" + if [ "$softmmu" = "yes" ] ; then + target_list="\ +i386-softmmu \ +x86_64-softmmu \ +arm-softmmu \ +cris-softmmu \ +m68k-softmmu \ +microblaze-softmmu \ +mips-softmmu \ +mipsel-softmmu \ +mips64-softmmu \ +mips64el-softmmu \ +ppc-softmmu \ +ppcemb-softmmu \ +ppc64-softmmu \ +sh4-softmmu \ +sh4eb-softmmu \ +sparc-softmmu \ +sparc64-softmmu \ +" + fi # the following are Linux specific - if [ "$linux" = "yes" ] ; then - target_list="i386-user arm-user armeb-user sparc-user ppc-user $target_list" + if [ "$linux_user" = "yes" ] ; then + target_list="${target_list}\ +i386-linux-user \ +x86_64-linux-user \ +alpha-linux-user \ +arm-linux-user \ +armeb-linux-user \ +cris-linux-user \ +m68k-linux-user \ +microblaze-linux-user \ +mips-linux-user \ +mipsel-linux-user \ +ppc-linux-user \ +ppc64-linux-user \ +ppc64abi32-linux-user \ +sh4-linux-user \ +sh4eb-linux-user \ +sparc-linux-user \ +sparc64-linux-user \ +sparc32plus-linux-user \ +" + fi +# the following are Darwin specific + if [ "$darwin_user" = "yes" ] ; then + target_list="$target_list i386-darwin-user ppc-darwin-user " + fi +# the following are BSD specific + if [ "$bsd_user" = "yes" ] ; then + target_list="${target_list}\ +i386-bsd-user \ +x86_64-bsd-user \ +sparc-bsd-user \ +sparc64-bsd-user \ +" fi else - target_list=$(echo "$target_list" | sed -e 's/,/ /g') + target_list=`echo "$target_list" | sed -e 's/,/ /g'` +fi +if test -z "$target_list" ; then + echo "No targets enabled" + exit 1 fi if test -z "$cross_prefix" ; then @@ -231,12 +772,12 @@ if test -z "$cross_prefix" ; then cat > $TMPC << EOF #include int main(int argc, char ** argv){ - volatile uint32_t i=0x01234567; - return (*((uint8_t*)(&i))) == 0x67; + volatile uint32_t i=0x01234567; + return (*((uint8_t*)(&i))) == 0x67; } EOF -if $cc -o $TMPE $TMPC 2>/dev/null ; then +if $cc $ARCH_CFLAGS -o $TMPE $TMPC > /dev/null 2> /dev/null ; then $TMPE && bigendian="yes" else echo big/little test failed @@ -245,7 +786,16 @@ fi else # if cross compiling, cannot launch a program, so make a static guess -if test "$cpu" = "powerpc" -o "$cpu" = "mips" -o "$cpu" = "s390" -o "$cpu" = "sparc" -o "$cpu" = "sparc64" -o "$cpu" = "m68k" -o "$cpu" = "armv4b"; then +if test "$cpu" = "armv4b" \ + -o "$cpu" = "hppa" \ + -o "$cpu" = "m68k" \ + -o "$cpu" = "mips" \ + -o "$cpu" = "mips64" \ + -o "$cpu" = "ppc" \ + -o "$cpu" = "ppc64" \ + -o "$cpu" = "s390" \ + -o "$cpu" = "sparc" \ + -o "$cpu" = "sparc64"; then bigendian="yes" fi @@ -253,19 +803,63 @@ fi # host long bits test hostlongbits="32" -if test "$cpu" = "sparc64" -o "$cpu" = "ia64" -o "$cpu" = "x86_64" -o "$cpu" = "alpha"; then +if test "$cpu" = "x86_64" \ + -o "$cpu" = "alpha" \ + -o "$cpu" = "ia64" \ + -o "$cpu" = "sparc64" \ + -o "$cpu" = "ppc64"; then hostlongbits="64" fi -# check gcc options support +# Check host NPTL support cat > $TMPC < +#include +void foo() +{ +#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT) +#error bork +#endif } EOF -have_gcc3_options="no" -if $cc -fno-reorder-blocks -fno-optimize-sibling-calls -o $TMPO $TMPC 2> /dev/null ; then - have_gcc3_options="yes" +if $cc $ARCH_CFLAGS -c -o $TMPO $TMPC > /dev/null 2> /dev/null ; then + : +else + nptl="no" +fi + +########################################## +# zlib check + +cat > $TMPC << EOF +#include +int main(void) { zlibVersion(); return 0; } +EOF +if $cc $ARCH_CFLAGS -o $TMPE ${OS_CFLAGS} $TMPC -lz > /dev/null 2> /dev/null ; then + : +else + echo + echo "Error: zlib check failed" + echo "Make sure to have the zlib libs and headers installed." + echo + exit 1 +fi + +########################################## +# xen probe + +if test "$xen" = "yes" ; then +cat > $TMPC < +#include +int main(void) { xs_daemon_open(); xc_interface_open(); return 0; } +EOF + if $cc $CFLAGS $ARCH_CFLAGS -c -o $TMPO $TMPC $LDFLAGS -lxenstore -lxenctrl 2> /dev/null > /dev/null ; then + : + else + xen="no" + fi fi ########################################## @@ -273,163 +867,552 @@ fi sdl_too_old=no -if test -z "$sdl" ; then +if test "$sdl" = "yes" ; then + sdl_config="sdl-config" + sdl=no + sdl_static=no -sdl_config="sdl-config" -sdl=no -sdl_static=no - -if test "$mingw32" = "yes" -a ! -z "$cross_prefix" ; then -# win32 cross compilation case - sdl_config="i386-mingw32msvc-sdl-config" - sdl=yes -else -# normal SDL probe cat > $TMPC << EOF #include #undef main /* We don't want SDL to override our main() */ int main( void ) { return SDL_Init (SDL_INIT_VIDEO); } EOF + if $cc $ARCH_CFLAGS -o $TMPE ${OS_CFLAGS} `$sdl_config --cflags 2> /dev/null` $TMPC `$sdl_config --libs 2> /dev/null` > $TMPSDLLOG 2>&1 ; then + _sdlversion=`$sdl_config --version | sed 's/[^0-9]//g'` + if test "$_sdlversion" -lt 121 ; then + sdl_too_old=yes + else + if test "$cocoa" = "no" ; then + sdl=yes + fi + fi -if $cc -o $TMPE `$sdl_config --cflags 2> /dev/null` $TMPC `$sdl_config --libs 2> /dev/null` 2> /dev/null ; then -_sdlversion=`$sdl_config --version | sed 's/[^0-9]//g'` -if test "$_sdlversion" -lt 121 ; then -sdl_too_old=yes + # static link with sdl ? + if test "$sdl" = "yes" ; then + aa="no" + `$sdl_config --static-libs 2>/dev/null | grep \\\-laa > /dev/null` && aa="yes" + sdl_static_libs=`$sdl_config --static-libs 2>/dev/null` + if [ "$aa" = "yes" ] ; then + sdl_static_libs="$sdl_static_libs `aalib-config --static-libs`" + fi + + if $cc -o $TMPE ${OS_CFLAGS} `$sdl_config --cflags 2> /dev/null` $TMPC $sdl_static_libs > /dev/null 2> /dev/null; then + sdl_static=yes + fi + fi # static link + fi # sdl compile test else -sdl=yes -fi + # Make sure to disable cocoa if sdl was set + if test "$sdl" = "yes" ; then + cocoa="no" + audio_drv_list="`echo $audio_drv_list | sed s,coreaudio,,g`" + fi +fi # -z $sdl -# static link with sdl ? if test "$sdl" = "yes" ; then -aa="no" -`$sdl_config --static-libs | grep \\\-laa > /dev/null` && aa="yes" -sdl_static_libs=`$sdl_config --static-libs` -if [ "$aa" = "yes" ] ; then - sdl_static_libs="$sdl_static_libs `aalib-config --static-libs`" +cat > $TMPC < +#if defined(SDL_VIDEO_DRIVER_X11) +#include +#else +#error No x11 support +#endif +int main(void) { return 0; } +EOF + if $cc $ARCH_CFLAGS -o $TMPE ${OS_CFLAGS} `$sdl_config --cflags 2> /dev/null` $TMPC `$sdl_config --libs 2> /dev/null` > /dev/null 2>&1 ; then + sdl_x11="yes" + fi fi -if $cc -o $TMPE `$sdl_config --cflags 2> /dev/null` $TMPC $sdl_static_libs 2> /dev/null; then - sdl_static=yes +########################################## +# VNC TLS detection +if test "$vnc_tls" = "yes" ; then +cat > $TMPC < +int main(void) { gnutls_session_t s; gnutls_init(&s, GNUTLS_SERVER); return 0; } +EOF + vnc_tls_cflags=`pkg-config --cflags gnutls 2> /dev/null` + vnc_tls_libs=`pkg-config --libs gnutls 2> /dev/null` + if $cc $ARCH_CFLAGS -o $TMPE ${OS_CFLAGS} $vnc_tls_cflags $TMPC \ + $vnc_tls_libs > /dev/null 2> /dev/null ; then + : + else + vnc_tls="no" + fi fi -fi # static link +########################################## +# VNC SASL detection +if test "$vnc_sasl" = "yes" ; then +cat > $TMPC < +#include +int main(void) { sasl_server_init(NULL, "qemu"); return 0; } +EOF + # Assuming Cyrus-SASL installed in /usr prefix + vnc_sasl_cflags="" + vnc_sasl_libs="-lsasl2" + if $cc $ARCH_CFLAGS -o $TMPE ${OS_CFLAGS} $vnc_sasl_cflags $TMPC \ + $vnc_sasl_libs 2> /dev/null > /dev/null ; then + : + else + vnc_sasl="no" + fi +fi -fi # sdl compile test +########################################## +# fnmatch() probe, used for ACL routines +fnmatch="no" +cat > $TMPC << EOF +#include +int main(void) +{ + fnmatch("foo", "foo", 0); + return 0; +} +EOF +if $cc $ARCH_CFLAGS -o $TMPE $TMPC > /dev/null 2> /dev/null ; then + fnmatch="yes" +fi -fi # cross compilation -fi # -z $sdl +########################################## +# vde libraries probe +if test "$vde" = "yes" ; then + cat > $TMPC << EOF +#include +int main(void) +{ + struct vde_open_args a = {0, 0, 0}; + vde_open("", "", &a); + return 0; +} +EOF + if $cc $ARCH_CFLAGS -o $TMPE $TMPC -lvdeplug > /dev/null 2> /dev/null ; then + : + else + vde="no" + fi +fi -if test x"$1" = x"-h" -o x"$1" = x"--help" ; then -cat << EOF +########################################## +# Sound support libraries probe -Usage: configure [options] -Options: [defaults in brackets after descriptions] +audio_drv_probe() +{ + drv=$1 + hdr=$2 + lib=$3 + exp=$4 + cfl=$5 + cat > $TMPC << EOF +#include <$hdr> +int main(void) { $exp } +EOF + if $cc $ARCH_CFLAGS $cfl -o $TMPE $TMPC $lib > /dev/null 2> /dev/null ; then + : + else + echo + echo "Error: $drv check failed" + echo "Make sure to have the $drv libs and headers installed." + echo + exit 1 + fi +} + +audio_drv_list=`echo "$audio_drv_list" | sed -e 's/,/ /g'` +for drv in $audio_drv_list; do + case $drv in + alsa) + audio_drv_probe $drv alsa/asoundlib.h -lasound \ + "snd_pcm_t **handle; return snd_pcm_close(*handle);" + ;; + + fmod) + if test -z $fmod_lib || test -z $fmod_inc; then + echo + echo "Error: You must specify path to FMOD library and headers" + echo "Example: --fmod-inc=/path/include/fmod --fmod-lib=/path/lib/libfmod-3.74.so" + echo + exit 1 + fi + audio_drv_probe $drv fmod.h $fmod_lib "return FSOUND_GetVersion();" "-I $fmod_inc" + ;; + esd) + audio_drv_probe $drv esd.h -lesd 'return esd_play_stream(0, 0, "", 0);' + ;; + + pa) + audio_drv_probe $drv pulse/simple.h -lpulse-simple \ + "pa_simple *s = NULL; pa_simple_free(s); return 0;" + ;; + + oss|sdl|core|wav|dsound) + # XXX: Probes for CoreAudio, DirectSound, SDL(?) + ;; + + *) + echo "$audio_possible_drivers" | grep -q "\<$drv\>" || { + echo + echo "Error: Unknown driver '$drv' selected" + echo "Possible drivers are: $audio_possible_drivers" + echo + exit 1 + } + ;; + esac +done + +########################################## +# BrlAPI probe + +if test -z "$brlapi" ; then + brlapi=no +cat > $TMPC << EOF +#include +int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); } EOF -echo "Standard options:" -echo " --help print this message" -echo " --prefix=PREFIX install in PREFIX [$prefix]" -echo " --interp-prefix=PREFIX where to find shared libraries, etc." -echo " use %M for cpu name [$interp_prefix]" -echo " --target-list=LIST set target list [$target_list]" -echo "" -echo "kqemu kernel acceleration support:" -echo " --disable-kqemu disable kqemu build" -echo " --kernel-path=PATH set the kernel path (configure probes it)" -echo "" -echo "Advanced options (experts only):" -echo " --source-path=PATH path of source code [$source_path]" -echo " --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]" -echo " --cc=CC use C compiler CC [$cc]" -echo " --host-cc=CC use C compiler CC [$cc] for dyngen etc." -echo " --make=MAKE use specified make [$make]" -echo " --static enable static build [$static]" -echo " --enable-mingw32 enable Win32 cross compilation with mingw32" -echo " --enable-adlib enable Adlib emulation" -echo " --enable-fmod enable FMOD audio output driver" -echo " --fmod-lib path to FMOD library" -echo " --fmod-inc path to FMOD includes" -echo "" -echo "NOTE: The object files are build at the place where configure is launched" -exit 1 + if $cc ${ARCH_CFLAGS} -o $TMPE ${OS_CFLAGS} $TMPC -lbrlapi > /dev/null 2> /dev/null ; then + brlapi=yes + fi # brlapi compile test +fi # -z $brlapi + +########################################## +# curses probe + +if test "$curses" = "yes" ; then + curses=no + ncurses=no + cat > $TMPC << EOF +#include +#ifdef __OpenBSD__ +#define resize_term resizeterm +#endif +int main(void) { resize_term(0, 0); return curses_version(); } +EOF + if $cc $ARCH_CFLAGS -o $TMPE $TMPC -lncurses > /dev/null 2> /dev/null ; then + curses=yes + ncurses=yes + elif $cc $ARCH_CFLAGS -o $TMPE $TMPC -lcurses > /dev/null 2> /dev/null ; then + curses=yes + fi +fi # test "$curses" + +########################################## +# curl probe + +if test "$curl" = "yes" ; then + curl=no + cat > $TMPC << EOF +#include +int main(void) { return curl_easy_init(); } +EOF + curl_libs=`curl-config --libs 2>/dev/null` + if $cc $ARCH_CFLAGS $curl_libs -o $TMPE $TMPC > /dev/null 2> /dev/null ; then + curl=yes + fi +fi # test "$curl" + +########################################## +# bluez support probe +if test "$bluez" = "yes" ; then + `pkg-config bluez 2> /dev/null` || bluez="no" +fi +if test "$bluez" = "yes" ; then + cat > $TMPC << EOF +#include +int main(void) { return bt_error(0); } +EOF + bluez_cflags=`pkg-config --cflags bluez 2> /dev/null` + bluez_libs=`pkg-config --libs bluez 2> /dev/null` + if $cc $ARCH_CFLAGS -o $TMPE ${OS_CFLAGS} $bluez_cflags $TMPC \ + $bluez_libs > /dev/null 2> /dev/null ; then + : + else + bluez="no" + fi fi -if test "$mingw32" = "yes" ; then -if test -z "$prefix" ; then - prefix="/c/Program Files/Qemu" +########################################## +# kvm probe +if test "$kvm" = "yes" ; then + cat > $TMPC < +#if !defined(KVM_API_VERSION) || KVM_API_VERSION < 12 || KVM_API_VERSION > 12 +#error Invalid KVM version +#endif +#if !defined(KVM_CAP_USER_MEMORY) +#error Missing KVM capability KVM_CAP_USER_MEMORY +#endif +#if !defined(KVM_CAP_SET_TSS_ADDR) +#error Missing KVM capability KVM_CAP_SET_TSS_ADDR +#endif +#if !defined(KVM_CAP_DESTROY_MEMORY_REGION_WORKS) +#error Missing KVM capability KVM_CAP_DESTROY_MEMORY_REGION_WORKS +#endif +int main(void) { return 0; } +EOF + if test "$kerneldir" != "" ; then + kvm_cflags=-I"$kerneldir"/include + if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) \ + -a -d "$kerneldir/arch/x86/include" ; then + kvm_cflags="$kvm_cflags -I$kerneldir/arch/x86/include" + elif test "$cpu" = "ppc" -a -d "$kerneldir/arch/powerpc/include" ; then + kvm_cflags="$kvm_cflags -I$kerneldir/arch/powerpc/include" + elif test -d "$kerneldir/arch/$cpu/include" ; then + kvm_cflags="$kvm_cflags -I$kerneldir/arch/$cpu/include" + fi + else + kvm_cflags="" + fi + if $cc $ARCH_CFLAGS -o $TMPE ${OS_CFLAGS} $kvm_cflags $TMPC \ + > /dev/null 2>/dev/null ; then + : + else + kvm="no"; + if [ -x "`which awk 2>/dev/null`" ] && \ + [ -x "`which grep 2>/dev/null`" ]; then + kvmerr=`LANG=C $cc $ARCH_CFLAGS -o $TMPE ${OS_CFLAGS} $kvm_cflags $TMPC 2>&1 \ + | grep "error: " \ + | awk -F "error: " '{if (NR>1) printf(", "); printf("%s",$2);}'` + if test "$kvmerr" != "" ; then + kvm="no - (${kvmerr})\n\ + NOTE: To enable KVM support, update your kernel to 2.6.29+ or install \ +recent kvm-kmod from http://sourceforge.net/projects/kvm." + fi + fi + fi fi -mandir="$prefix" -datadir="$prefix" -docdir="$prefix" -bindir="$prefix" -else -if test -z "$prefix" ; then - prefix="/usr/local" + +########################################## +# pthread probe +PTHREADLIBS_LIST="-lpthread -lpthreadGC2" +PTHREADLIBS="" + +if test "$pthread" = yes; then + pthread=no +cat > $TMPC << EOF +#include +int main(void) { pthread_create(0,0,0,0); return 0; } +EOF + for pthread_lib in $PTHREADLIBS_LIST; do + if $cc $ARCH_CFLAGS -o $TMPE $TMPC $pthread_lib 2> /dev/null > /dev/null ; then + pthread=yes + PTHREADLIBS="$pthread_lib" + break + fi + done fi -mandir="$prefix/share/man" -datadir="$prefix/share/qemu" -docdir="$prefix/share/doc/qemu" -bindir="$prefix/bin" + +if test "$pthread" = no; then + aio=no + io_thread=no fi -# kqemu support -if test $kqemu = "yes" ; then - # test if the source code is installed - if test '!' -f "kqemu/Makefile" ; then - kqemu="no" - fi +########################################## +# iovec probe +cat > $TMPC < +#include +#include +int main(void) { struct iovec iov; return 0; } +EOF +iovec=no +if $cc $ARCH_CFLAGS -o $TMPE $TMPC > /dev/null 2> /dev/null ; then + iovec=yes fi - -# Linux specific kqemu configuration -if test $kqemu = "yes" -a $linux = "yes" ; then -# find the kernel path -if test -z "$kernel_path" ; then -kernel_version=`uname -r` -kernel_path="/lib/modules/$kernel_version/build" -if test '!' -d "$kernel_path/include" ; then - kernel_path="/usr/src/linux" - if test '!' -d "$kernel_path/include" ; then - echo "Could not find kernel includes in /lib/modules or /usr/src/linux - cannot build the kqemu module" - kqemu="no" - fi + +########################################## +# preadv probe +cat > $TMPC < +#include +#include +int main(void) { preadv; } +EOF +preadv=no +if $cc $ARCH_CFLAGS -o $TMPE $TMPC > /dev/null 2> /dev/null ; then + preadv=yes fi + +########################################## +# fdt probe +if test "$fdt" = "yes" ; then + fdt=no + cat > $TMPC << EOF +int main(void) { return 0; } +EOF + if $cc $ARCH_CFLAGS -o $TMPE ${OS_CFLAGS} $TMPC -lfdt 2> /dev/null > /dev/null ; then + fdt=yes + fi fi -if test $kqemu = "yes" ; then +# +# Check for xxxat() functions when we are building linux-user +# emulator. This is done because older glibc versions don't +# have syscall stubs for these implemented. +# +atfile=no +cat > $TMPC << EOF +#define _ATFILE_SOURCE +#include +#include +#include + +int +main(void) +{ + /* try to unlink nonexisting file */ + return (unlinkat(AT_FDCWD, "nonexistent_file", 0)); +} +EOF +if $cc $ARCH_CFLAGS -o $TMPE $TMPC 2> /dev/null > /dev/null ; then + atfile=yes +fi -# test that the kernel config is present -if test '!' -f "$kernel_path/Makefile" ; then - echo "No Makefile file present in $kernel_path - kqemu cannot be built" - kqemu="no" -fi +# Check for inotify functions when we are building linux-user +# emulator. This is done because older glibc versions don't +# have syscall stubs for these implemented. In that case we +# don't provide them even if kernel supports them. +# +inotify=no +cat > $TMPC << EOF +#include -# find build system (2.6 or legacy) -kbuild26="yes" -if grep -q "PATCHLEVEL = 4" $kernel_path/Makefile ; then -kbuild26="no" +int +main(void) +{ + /* try to start inotify */ + return inotify_init(); +} +EOF +if $cc $ARCH_CFLAGS -o $TMPE $TMPC 2> /dev/null > /dev/null ; then + inotify=yes fi -fi # kqemu +# check if utimensat and futimens are supported +utimens=no +cat > $TMPC << EOF +#define _ATFILE_SOURCE +#define _GNU_SOURCE +#include +#include + +int main(void) +{ + utimensat(AT_FDCWD, "foo", NULL, 0); + futimens(0, NULL); + return 0; +} +EOF +if $cc $ARCH_CFLAGS -o $TMPE $TMPC 2> /dev/null ; then + utimens=yes +fi -fi # kqemu and linux +# check if pipe2 is there +pipe2=no +cat > $TMPC << EOF +#define _GNU_SOURCE +#include +#include + +int main(void) +{ + int pipefd[2]; + pipe2(pipefd, O_CLOEXEC); + return 0; +} +EOF +if $cc $ARCH_CFLAGS -o $TMPE $TMPC 2> /dev/null ; then + pipe2=yes +fi + +# check if tee/splice is there. vmsplice was added same time. +splice=no +cat > $TMPC << EOF +#define _GNU_SOURCE +#include +#include +#include + +int main(void) +{ + int len, fd; + len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK); + splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE); + return 0; +} +EOF +if $cc $ARCH_CFLAGS -o $TMPE $TMPC 2> /dev/null ; then + splice=yes +fi + +# Check if tools are available to build documentation. +if test "$build_docs" = "yes" -a \( ! -x "`which texi2html 2>/dev/null`" -o ! -x "`which pod2man 2>/dev/null`" \) ; then + build_docs="no" +fi + +########################################## +# Do we need librt +CLOCKLIBS="" +cat > $TMPC < +#include +int main(void) { clockid_t id; return clock_gettime(id, NULL); } +EOF + +rt=no +if $cc $ARCH_CFLAGS -o $TMPE $TMPC > /dev/null 2> /dev/null ; then + : +elif $cc $ARCH_CFLAGS -o $TMPE $TMPC -lrt > /dev/null 2> /dev/null ; then + rt=yes +fi + +if test "$rt" = "yes" ; then + CLOCKLIBS="-lrt" +fi +if test "$mingw32" = "yes" ; then + if test -z "$prefix" ; then + prefix="c:/Program Files/Qemu" + fi + mansuffix="" + datasuffix="" + docsuffix="" + binsuffix="" +else + if test -z "$prefix" ; then + prefix="/usr/local" + fi + mansuffix="/share/man" + datasuffix="/share/qemu" + docsuffix="/share/doc/qemu" + binsuffix="/bin" +fi echo "Install prefix $prefix" -echo "BIOS directory $datadir" -echo "binary directory $bindir" +echo "BIOS directory $prefix$datasuffix" +echo "binary directory $prefix$binsuffix" if test "$mingw32" = "no" ; then -echo "Manual directory $mandir" +echo "Manual directory $prefix$mansuffix" echo "ELF interp prefix $interp_prefix" fi echo "Source path $source_path" echo "C compiler $cc" echo "Host C compiler $host_cc" +echo "ARCH_CFLAGS $ARCH_CFLAGS" echo "make $make" +echo "install $install" echo "host CPU $cpu" echo "host big endian $bigendian" echo "target list $target_list" +echo "tcg debug enabled $debug_tcg" echo "gprof enabled $gprof" +echo "sparse enabled $sparse" +echo "strip binaries $strip_opt" +echo "profiler $profiler" echo "static build $static" +echo "-Werror enabled $werror" if test "$darwin" = "yes" ; then echo "Cocoa support $cocoa" fi @@ -437,25 +1420,39 @@ echo "SDL support $sdl" if test "$sdl" != "no" ; then echo "SDL static link $sdl_static" fi +echo "curses support $curses" +echo "curl support $curl" echo "mingw32 support $mingw32" -echo "Adlib support $adlib" -echo -n "FMOD support $fmod" -if test $fmod = "yes"; then - echo -n " (lib='$fmod_lib' include='$fmod_inc')" -fi -echo "" -echo "kqemu support $kqemu" -if test $kqemu = "yes" -a $linux = "yes" ; then -echo "" -echo "KQEMU Linux module configuration:" -echo "kernel sources $kernel_path" -echo -n "kbuild type " -if test $kbuild26 = "yes"; then -echo "2.6" -else -echo "2.4" +echo "Audio drivers $audio_drv_list" +echo "Extra audio cards $audio_card_list" +echo "Mixer emulation $mixemu" +echo "VNC TLS support $vnc_tls" +if test "$vnc_tls" = "yes" ; then + echo " TLS CFLAGS $vnc_tls_cflags" + echo " TLS LIBS $vnc_tls_libs" +fi +echo "VNC SASL support $vnc_sasl" +if test "$vnc_sasl" = "yes" ; then + echo " SASL CFLAGS $vnc_sasl_cflags" + echo " SASL LIBS $vnc_sasl_libs" fi +if test -n "$sparc_cpu"; then + echo "Target Sparc Arch $sparc_cpu" fi +echo "kqemu support $kqemu" +echo "xen support $xen" +echo "brlapi support $brlapi" +echo "Documentation $build_docs" +[ ! -z "$uname_release" ] && \ +echo "uname -r $uname_release" +echo "NPTL support $nptl" +echo "vde support $vde" +echo "AIO support $aio" +echo "IO thread $io_thread" +echo "Install blobs $blobs" +echo -e "KVM support $kvm" +echo "fdt support $fdt" +echo "preadv support $preadv" if test $sdl_too_old = "yes"; then echo "-> Your SDL version is too old - please upgrade to have SDL support" @@ -464,298 +1461,650 @@ fi # echo "WARNING: cannot compile statically with SDL - qemu-fast won't have a graphical output" #fi -config_mak="config-host.mak" -config_h="config-host.h" +config_host_mak="config-host.mak" +config_host_h="config-host.h" -#echo "Creating $config_mak and $config_h" +#echo "Creating $config_host_mak and $config_host_h" -echo "# Automatically generated by configure - do not modify" > $config_mak -echo "/* Automatically generated by configure - do not modify */" > $config_h +test -f $config_host_h && mv $config_host_h ${config_host_h}~ -echo "prefix=$prefix" >> $config_mak -echo "bindir=$bindir" >> $config_mak -echo "mandir=$mandir" >> $config_mak -echo "datadir=$datadir" >> $config_mak -echo "docdir=$docdir" >> $config_mak -echo "#define CONFIG_QEMU_SHAREDIR \"$datadir\"" >> $config_h -echo "MAKE=$make" >> $config_mak -echo "CC=$cc" >> $config_mak -if test "$have_gcc3_options" = "yes" ; then - echo "HAVE_GCC3_OPTIONS=yes" >> $config_mak -fi -echo "HOST_CC=$host_cc" >> $config_mak -echo "AR=$ar" >> $config_mak -echo "STRIP=$strip -s -R .comment -R .note" >> $config_mak -echo "CFLAGS=$CFLAGS" >> $config_mak -echo "LDFLAGS=$LDFLAGS" >> $config_mak -echo "EXESUF=$EXESUF" >> $config_mak -if test "$cpu" = "i386" ; then - echo "ARCH=i386" >> $config_mak - echo "#define HOST_I386 1" >> $config_h -elif test "$cpu" = "x86_64" ; then - echo "ARCH=x86_64" >> $config_mak - echo "#define HOST_X86_64 1" >> $config_h -elif test "$cpu" = "armv4b" ; then - echo "ARCH=arm" >> $config_mak - echo "#define HOST_ARM 1" >> $config_h -elif test "$cpu" = "armv4l" ; then - echo "ARCH=arm" >> $config_mak - echo "#define HOST_ARM 1" >> $config_h -elif test "$cpu" = "powerpc" ; then - echo "ARCH=ppc" >> $config_mak - echo "#define HOST_PPC 1" >> $config_h -elif test "$cpu" = "mips" ; then - echo "ARCH=mips" >> $config_mak - echo "#define HOST_MIPS 1" >> $config_h -elif test "$cpu" = "s390" ; then - echo "ARCH=s390" >> $config_mak - echo "#define HOST_S390 1" >> $config_h -elif test "$cpu" = "alpha" ; then - echo "ARCH=alpha" >> $config_mak - echo "#define HOST_ALPHA 1" >> $config_h -elif test "$cpu" = "sparc" ; then - echo "ARCH=sparc" >> $config_mak - echo "#define HOST_SPARC 1" >> $config_h -elif test "$cpu" = "sparc64" ; then - echo "ARCH=sparc64" >> $config_mak - echo "#define HOST_SPARC64 1" >> $config_h -elif test "$cpu" = "ia64" ; then - echo "ARCH=ia64" >> $config_mak - echo "#define HOST_IA64 1" >> $config_h -elif test "$cpu" = "m68k" ; then - echo "ARCH=m68k" >> $config_mak - echo "#define HOST_M68K 1" >> $config_h -else - echo "Unsupported CPU" - exit 1 +echo "# Automatically generated by configure - do not modify" > $config_host_mak +printf "# Configured with:" >> $config_host_mak +printf " '%s'" "$0" "$@" >> $config_host_mak +echo >> $config_host_mak +echo "/* Automatically generated by configure - do not modify */" > $config_host_h + +echo "prefix=$prefix" >> $config_host_mak +echo "bindir=\${prefix}$binsuffix" >> $config_host_mak +echo "mandir=\${prefix}$mansuffix" >> $config_host_mak +echo "datadir=\${prefix}$datasuffix" >> $config_host_mak +echo "docdir=\${prefix}$docsuffix" >> $config_host_mak +echo "#define CONFIG_QEMU_SHAREDIR \"$prefix$datasuffix\"" >> $config_host_h +echo "MAKE=$make" >> $config_host_mak +echo "INSTALL=$install" >> $config_host_mak +echo "INSTALL_DIR=$install -d -m0755 -p" >> $config_host_mak +echo "INSTALL_DATA=$install -m0644 -p" >> $config_host_mak +echo "INSTALL_PROG=$install -m0755 -p" >> $config_host_mak +echo "CC=$cc" >> $config_host_mak +echo "HOST_CC=$host_cc" >> $config_host_mak +echo "AR=$ar" >> $config_host_mak +echo "OBJCOPY=$objcopy" >> $config_host_mak +echo "LD=$ld" >> $config_host_mak +echo "CFLAGS=$CFLAGS $OS_CFLAGS $ARCH_CFLAGS $EXTRA_CFLAGS" >> $config_host_mak +echo "LDFLAGS=$LDFLAGS $OS_LDFLAGS $ARCH_LDFLAGS $EXTRA_LDFLAGS" >> $config_host_mak +echo "EXESUF=$EXESUF" >> $config_host_mak +echo "PTHREADLIBS=$PTHREADLIBS" >> $config_host_mak +echo "CLOCKLIBS=$CLOCKLIBS" >> $config_host_mak +case "$cpu" in + i386|x86_64|alpha|cris|hppa|ia64|m68k|microbaze|mips|mips64|ppc|ppc64|s390|sparc|sparc64) + ARCH=$cpu + ;; + armv4b|armv4l) + ARCH=arm + ;; + *) + echo "Unsupported CPU = $cpu" + exit 1 + ;; +esac +echo "ARCH=$ARCH" >> $config_host_mak +arch_name=`echo $ARCH | tr '[:lower:]' '[:upper:]'` +echo "#define HOST_$arch_name 1" >> $config_host_h + +if test "$debug_tcg" = "yes" ; then + echo "#define DEBUG_TCG 1" >> $config_host_h +fi +if test "$debug" = "yes" ; then + echo "#define DEBUG_EXEC 1" >> $config_host_h +fi +if test "$sparse" = "yes" ; then + echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak + echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak + echo "CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak +fi +if test "$strip_opt" = "yes" ; then + echo "STRIP_OPT=-s" >> $config_host_mak fi if test "$bigendian" = "yes" ; then - echo "WORDS_BIGENDIAN=yes" >> $config_mak - echo "#define WORDS_BIGENDIAN 1" >> $config_h + echo "WORDS_BIGENDIAN=yes" >> $config_host_mak + echo "#define WORDS_BIGENDIAN 1" >> $config_host_h fi -echo "#define HOST_LONG_BITS $hostlongbits" >> $config_h +echo "#define HOST_LONG_BITS $hostlongbits" >> $config_host_h if test "$mingw32" = "yes" ; then - echo "CONFIG_WIN32=yes" >> $config_mak - echo "#define CONFIG_WIN32 1" >> $config_h -elif test -f "/usr/include/byteswap.h" ; then - echo "#define HAVE_BYTESWAP_H 1" >> $config_h + echo "CONFIG_WIN32=y" >> $config_host_mak + echo "#define CONFIG_WIN32 1" >> $config_host_h +else + cat > $TMPC << EOF +#include +int main(void) { return bswap_32(0); } +EOF + if $cc $ARCH_CFLAGS -o $TMPE $TMPC >/dev/null 2> /dev/null ; then + echo "#define HAVE_BYTESWAP_H 1" >> $config_host_h + fi + cat > $TMPC << EOF +#include +#include +#include +int main(void) { return bswap32(0); } +EOF + if $cc $ARCH_CFLAGS -o $TMPE $TMPC >/dev/null 2> /dev/null ; then + echo "#define HAVE_MACHINE_BSWAP_H 1" >> $config_host_h + fi fi + +if [ "$openbsd" = "yes" ] ; then + echo "#define ENOTSUP 4096" >> $config_host_h +fi + if test "$darwin" = "yes" ; then - echo "CONFIG_DARWIN=yes" >> $config_mak - echo "#define CONFIG_DARWIN 1" >> $config_h + echo "CONFIG_DARWIN=y" >> $config_host_mak + echo "#define CONFIG_DARWIN 1" >> $config_host_h +fi + +if test "$aix" = "yes" ; then + echo "CONFIG_AIX=y" >> $config_host_mak + echo "#define CONFIG_AIX 1" >> $config_host_h +fi + +if test "$solaris" = "yes" ; then + echo "CONFIG_SOLARIS=y" >> $config_host_mak + echo "#define HOST_SOLARIS $solarisrev" >> $config_host_h + if test "$needs_libsunmath" = "yes" ; then + echo "NEEDS_LIBSUNMATH=yes" >> $config_host_mak + echo "#define NEEDS_LIBSUNMATH 1" >> $config_host_h + fi fi -if test "$gdbstub" = "yes" ; then - echo "CONFIG_GDBSTUB=yes" >> $config_mak - echo "#define CONFIG_GDBSTUB 1" >> $config_h +if test -n "$sparc_cpu"; then + echo "CONFIG__sparc_${sparc_cpu}__=y" >> $config_host_mak + echo "#define __sparc_${sparc_cpu}__ 1" >> $config_host_h fi if test "$gprof" = "yes" ; then - echo "TARGET_GPROF=yes" >> $config_mak - echo "#define HAVE_GPROF 1" >> $config_h + echo "TARGET_GPROF=yes" >> $config_host_mak + echo "#define HAVE_GPROF 1" >> $config_host_h fi if test "$static" = "yes" ; then - echo "CONFIG_STATIC=yes" >> $config_mak - echo "#define CONFIG_STATIC 1" >> $config_h + echo "CONFIG_STATIC=y" >> $config_host_mak + echo "#define CONFIG_STATIC 1" >> $config_host_h +fi +if test $profiler = "yes" ; then + echo "#define CONFIG_PROFILER 1" >> $config_host_h fi if test "$slirp" = "yes" ; then - echo "CONFIG_SLIRP=yes" >> $config_mak - echo "#define CONFIG_SLIRP 1" >> $config_h + echo "CONFIG_SLIRP=y" >> $config_host_mak + echo "#define CONFIG_SLIRP 1" >> $config_host_h fi -if test "$adlib" = "yes" ; then - echo "CONFIG_ADLIB=yes" >> $config_mak - echo "#define CONFIG_ADLIB 1" >> $config_h -fi -if test "$oss" = "yes" ; then - echo "CONFIG_OSS=yes" >> $config_mak - echo "#define CONFIG_OSS 1" >> $config_h -fi -if test "$fmod" = "yes" ; then - echo "CONFIG_FMOD=yes" >> $config_mak - echo "CONFIG_FMOD_LIB=$fmod_lib" >> $config_mak - echo "CONFIG_FMOD_INC=$fmod_inc" >> $config_mak - echo "#define CONFIG_FMOD 1" >> $config_h -fi -echo -n "VERSION=" >>$config_mak -head $source_path/VERSION >>$config_mak -echo "" >>$config_mak -echo -n "#define QEMU_VERSION \"" >> $config_h -head $source_path/VERSION >> $config_h -echo "\"" >> $config_h - -if test $kqemu = "yes" ; then - echo "CONFIG_KQEMU=yes" >> $config_mak - if test $linux = "yes" ; then - echo "KERNEL_PATH=$kernel_path" >> $config_mak - if test $kbuild26 = "yes" ; then - echo "CONFIG_KBUILD26=yes" >> $config_mak +if test "$vde" = "yes" ; then + echo "CONFIG_VDE=y" >> $config_host_mak + echo "#define CONFIG_VDE 1" >> $config_host_h + echo "VDE_LIBS=-lvdeplug" >> $config_host_mak +fi +for card in $audio_card_list; do + def=CONFIG_`echo $card | tr '[:lower:]' '[:upper:]'` + echo "$def=y" >> $config_host_mak + echo "#define $def 1" >> $config_host_h +done +echo "#define AUDIO_DRIVERS \\" >> $config_host_h +for drv in $audio_drv_list; do + echo " &${drv}_audio_driver, \\" >>$config_host_h + def=CONFIG_`echo $drv | tr '[:lower:]' '[:upper:]'` + echo "$def=y" >> $config_host_mak + if test "$drv" = "fmod"; then + echo "CONFIG_FMOD_LIB=$fmod_lib" >> $config_host_mak + echo "CONFIG_FMOD_INC=$fmod_inc" >> $config_host_mak + elif test "$drv" = "oss"; then + echo "CONFIG_OSS_LIB=$oss_lib" >> $config_host_mak fi +done +echo "" >>$config_host_h +if test "$mixemu" = "yes" ; then + echo "CONFIG_MIXEMU=y" >> $config_host_mak + echo "#define CONFIG_MIXEMU 1" >> $config_host_h +fi +if test "$vnc_tls" = "yes" ; then + echo "CONFIG_VNC_TLS=y" >> $config_host_mak + echo "CONFIG_VNC_TLS_CFLAGS=$vnc_tls_cflags" >> $config_host_mak + echo "CONFIG_VNC_TLS_LIBS=$vnc_tls_libs" >> $config_host_mak + echo "#define CONFIG_VNC_TLS 1" >> $config_host_h +fi +if test "$vnc_sasl" = "yes" ; then + echo "CONFIG_VNC_SASL=y" >> $config_host_mak + echo "CONFIG_VNC_SASL_CFLAGS=$vnc_sasl_cflags" >> $config_host_mak + echo "CONFIG_VNC_SASL_LIBS=$vnc_sasl_libs" >> $config_host_mak + echo "#define CONFIG_VNC_SASL 1" >> $config_host_h +fi +if test "$fnmatch" = "yes" ; then + echo "#define HAVE_FNMATCH_H 1" >> $config_host_h +fi +qemu_version=`head $source_path/VERSION` +echo "VERSION=$qemu_version" >>$config_host_mak +echo "#define QEMU_VERSION \"$qemu_version\"" >> $config_host_h + +echo "#define QEMU_PKGVERSION \"$pkgversion\"" >> $config_host_h + +echo "SRC_PATH=$source_path" >> $config_host_mak +if [ "$source_path_used" = "yes" ]; then + echo "VPATH=$source_path" >> $config_host_mak +fi +echo "TARGET_DIRS=$target_list" >> $config_host_mak +if [ "$build_docs" = "yes" ] ; then + echo "BUILD_DOCS=yes" >> $config_host_mak +fi +if test "$static" = "yes"; then + sdl1=$sdl_static +else + sdl1=$sdl +fi +if test "$sdl1" = "yes" ; then + echo "#define CONFIG_SDL 1" >> $config_host_h + echo "CONFIG_SDL=y" >> $config_host_mak + if test "$target_softmmu" = "no" -o "$static" = "yes"; then + echo "SDL_LIBS=$sdl_static_libs" >> $config_host_mak + elif test "$sdl_x11" = "yes" ; then + echo "SDL_LIBS=`$sdl_config --libs` -lX11" >> $config_host_mak + else + echo "SDL_LIBS=`$sdl_config --libs`" >> $config_host_mak + fi + if [ "${aa}" = "yes" ] ; then + echo "SDL_CFLAGS=`$sdl_config --cflags` `aalib-config --cflags`" >> $config_host_mak + else + echo "SDL_CFLAGS=`$sdl_config --cflags`" >> $config_host_mak fi fi -echo "SRC_PATH=$source_path" >> $config_mak -echo "TARGET_DIRS=$target_list" >> $config_mak +if test "$cocoa" = "yes" ; then + echo "#define CONFIG_COCOA 1" >> $config_host_h + echo "CONFIG_COCOA=y" >> $config_host_mak +fi +if test "$curses" = "yes" ; then + echo "#define CONFIG_CURSES 1" >> $config_host_h + echo "CONFIG_CURSES=y" >> $config_host_mak + if test "$ncurses" = "yes" ; then + echo "CURSES_LIBS=-lncurses" >> $config_host_mak + else + echo "CURSES_LIBS=-lcurses" >> $config_host_mak + fi +fi +if test "$atfile" = "yes" ; then + echo "#define CONFIG_ATFILE 1" >> $config_host_h +fi +if test "$utimens" = "yes" ; then + echo "#define CONFIG_UTIMENSAT 1" >> $config_host_h +fi +if test "$pipe2" = "yes" ; then + echo "#define CONFIG_PIPE2 1" >> $config_host_h +fi +if test "$splice" = "yes" ; then + echo "#define CONFIG_SPLICE 1" >> $config_host_h +fi +if test "$inotify" = "yes" ; then + echo "#define CONFIG_INOTIFY 1" >> $config_host_h +fi +if test "$curl" = "yes" ; then + echo "CONFIG_CURL=y" >> $config_host_mak + echo "CURL_LIBS=$curl_libs" >> $config_host_mak + echo "#define CONFIG_CURL 1" >> $config_host_h +fi +if test "$brlapi" = "yes" ; then + echo "CONFIG_BRLAPI=y" >> $config_host_mak + echo "#define CONFIG_BRLAPI 1" >> $config_host_h + echo "BRLAPI_LIBS=-lbrlapi" >> $config_host_mak +fi +if test "$bluez" = "yes" ; then + echo "CONFIG_BLUEZ=y" >> $config_host_mak + echo "CONFIG_BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak + echo "CONFIG_BLUEZ_LIBS=$bluez_libs" >> $config_host_mak + echo "#define CONFIG_BLUEZ 1" >> $config_host_h +fi +if test "$xen" = "yes" ; then + echo "XEN_LIBS=-lxenstore -lxenctrl -lxenguest" >> $config_host_mak +fi +if test "$aio" = "yes" ; then + echo "#define CONFIG_AIO 1" >> $config_host_h + echo "CONFIG_AIO=y" >> $config_host_mak +fi +if test "$io_thread" = "yes" ; then + echo "CONFIG_IOTHREAD=y" >> $config_host_mak + echo "#define CONFIG_IOTHREAD 1" >> $config_host_h +fi +if test "$blobs" = "yes" ; then + echo "INSTALL_BLOBS=yes" >> $config_host_mak +fi +if test "$iovec" = "yes" ; then + echo "#define HAVE_IOVEC 1" >> $config_host_h +fi +if test "$preadv" = "yes" ; then + echo "#define HAVE_PREADV 1" >> $config_host_h +fi +if test "$fdt" = "yes" ; then + echo "#define HAVE_FDT 1" >> $config_host_h + echo "FDT_LIBS=-lfdt" >> $config_host_mak +fi # XXX: suppress that if [ "$bsd" = "yes" ] ; then - echo "#define O_LARGEFILE 0" >> $config_h - echo "#define MAP_ANONYMOUS MAP_ANON" >> $config_h - echo "#define _BSD 1" >> $config_h + echo "#define O_LARGEFILE 0" >> $config_host_h + echo "#define MAP_ANONYMOUS MAP_ANON" >> $config_host_h + echo "#define HOST_BSD 1" >> $config_host_h +fi + +echo "#define CONFIG_UNAME_RELEASE \"$uname_release\"" >> $config_host_h + +# USB host support +case "$usb" in +linux) + echo "HOST_USB=linux" >> $config_host_mak +;; +bsd) + echo "HOST_USB=bsd" >> $config_host_mak +;; +*) + echo "HOST_USB=stub" >> $config_host_mak +;; +esac + +# Determine what linker flags to use to force archive inclusion +check_linker_flags() +{ + w2= + if test "$2" ; then + w2=-Wl,$2 + fi + $cc $ARCH_CFLAGS -o $TMPE $OS_CFLAGS $TMPC -Wl,$1 ${w2} >/dev/null 2>/dev/null +} + +cat > $TMPC << EOF +int main(void) { } +EOF +if check_linker_flags --whole-archive --no-whole-archive ; then + # GNU ld + echo "ARLIBS_BEGIN=-Wl,--whole-archive" >> $config_host_mak + echo "ARLIBS_END=-Wl,--no-whole-archive" >> $config_host_mak +elif check_linker_flags -z,allextract -z,defaultextract ; then + # Solaris ld + echo "ARLIBS_BEGIN=-Wl,-z,allextract" >> $config_host_mak + echo "ARLIBS_END=-Wl,-z,defaultextract" >> $config_host_mak +elif check_linker_flags -all_load ; then + # Mac OS X + echo "ARLIBS_BEGIN=-all_load" >> $config_host_mak + echo "ARLIBS_END=" >> $config_host_mak +else + echo "Error: your linker does not support --whole-archive or -z." + echo "Please report to qemu-devel@nongnu.org" + exit 1 +fi + +if test "$xen" = "yes" ; + then + echo "CONFIG_XEN=y" >> $config_host_mak +fi + +tools= +if test `expr "$target_list" : ".*softmmu.*"` != 0 ; then + tools="qemu-img\$(EXESUF) $tools" + if [ "$linux" = "yes" ] ; then + tools="qemu-nbd\$(EXESUF) qemu-io\$(EXESUF) $tools" + elif test "$mingw32" = "yes" ; then + tools="qemu-io\$(EXESUF) $tools" + fi fi +echo "TOOLS=$tools" >> $config_host_mak -for target in $target_list; do +roms= +if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \ + "$targetos" != "Darwin" ; then + roms="optionrom" +fi +echo "ROMS=$roms" >> $config_host_mak + +if test -f ${config_host_h}~ ; then + if cmp -s $config_host_h ${config_host_h}~ ; then + mv ${config_host_h}~ $config_host_h + else + rm ${config_host_h}~ + fi +fi +for target in $target_list; do target_dir="$target" config_mak=$target_dir/config.mak config_h=$target_dir/config.h -target_cpu=`echo $target | cut -d '-' -f 1` +target_arch2=`echo $target | cut -d '-' -f 1` target_bigendian="no" -[ "$target_cpu" = "armeb" ] && target_bigendian=yes -[ "$target_cpu" = "sparc" ] && target_bigendian=yes -[ "$target_cpu" = "sparc64" ] && target_bigendian=yes -[ "$target_cpu" = "ppc" ] && target_bigendian=yes -[ "$target_cpu" = "ppc64" ] && target_bigendian=yes -[ "$target_cpu" = "mips" ] && target_bigendian=yes +case "$target_arch2" in + armeb|m68k|microblaze|mips|mipsn32|mips64|ppc|ppcemb|ppc64|ppc64abi32|sh4eb|sparc|sparc64|sparc32plus) + target_bigendian=yes + ;; +esac target_softmmu="no" -if expr $target : '.*-softmmu' > /dev/null ; then - target_softmmu="yes" -fi target_user_only="no" -if expr $target : '.*-user' > /dev/null ; then - target_user_only="yes" -fi - -if test "$target_user_only" = "no" -a "$check_gfx" = "yes" \ - -a "$sdl" = "no" -a "$cocoa" = "no" ; then - echo "ERROR: QEMU requires SDL or Cocoa for graphical output" - echo "To build QEMU with graphical output configure with --disable-gfx-check" - echo "Note that this will disable all output from the virtual graphics card." - exit 1; -fi +target_linux_user="no" +target_darwin_user="no" +target_bsd_user="no" +case "$target" in + ${target_arch2}-softmmu) + target_softmmu="yes" + ;; + ${target_arch2}-linux-user) + target_user_only="yes" + target_linux_user="yes" + ;; + ${target_arch2}-darwin-user) + target_user_only="yes" + target_darwin_user="yes" + ;; + ${target_arch2}-bsd-user) + target_user_only="yes" + target_bsd_user="yes" + ;; + *) + echo "ERROR: Target '$target' not recognised" + exit 1 + ;; +esac #echo "Creating $config_mak, $config_h and $target_dir/Makefile" +test -f $config_h && mv $config_h ${config_h}~ + mkdir -p $target_dir mkdir -p $target_dir/fpu -if test "$target" = "arm-user" -o "$target" = "armeb-user" ; then +mkdir -p $target_dir/tcg +if test "$target" = "arm-linux-user" -o "$target" = "armeb-linux-user" -o "$target" = "arm-bsd-user" -o "$target" = "armeb-bsd-user" ; then mkdir -p $target_dir/nwfpe fi -if test "$target_user_only" = "no" ; then - mkdir -p $target_dir/slirp -fi -ln -sf $source_path/Makefile.target $target_dir/Makefile +# +# don't use ln -sf as not all "ln -sf" over write the file/link +# +rm -f $target_dir/Makefile +ln -s $source_path/Makefile.target $target_dir/Makefile -echo "# Automatically generated by configure - do not modify" > $config_mak -echo "/* Automatically generated by configure - do not modify */" > $config_h +echo "# Automatically generated by configure - do not modify" > $config_mak echo "include ../config-host.mak" >> $config_mak -echo "#include \"../config-host.h\"" >> $config_h - -interp_prefix1=`echo "$interp_prefix" | sed "s/%M/$target_cpu/g"` -echo "#define CONFIG_QEMU_PREFIX \"$interp_prefix1\"" >> $config_h -if test "$target_cpu" = "i386" ; then - echo "TARGET_ARCH=i386" >> $config_mak - echo "#define TARGET_ARCH \"i386\"" >> $config_h - echo "#define TARGET_I386 1" >> $config_h - if test $kqemu = "yes" -a "$target_softmmu" = "yes" -a $cpu = "i386" ; then - echo "#define USE_KQEMU 1" >> $config_h - fi -elif test "$target_cpu" = "arm" -o "$target_cpu" = "armeb" ; then - echo "TARGET_ARCH=arm" >> $config_mak - echo "#define TARGET_ARCH \"arm\"" >> $config_h - echo "#define TARGET_ARM 1" >> $config_h -elif test "$target_cpu" = "sparc" ; then - echo "TARGET_ARCH=sparc" >> $config_mak - echo "#define TARGET_ARCH \"sparc\"" >> $config_h - echo "#define TARGET_SPARC 1" >> $config_h -elif test "$target_cpu" = "sparc64" ; then - echo "TARGET_ARCH=sparc64" >> $config_mak - echo "#define TARGET_ARCH \"sparc64\"" >> $config_h - echo "#define TARGET_SPARC 1" >> $config_h - echo "#define TARGET_SPARC64 1" >> $config_h -elif test "$target_cpu" = "ppc" ; then - echo "TARGET_ARCH=ppc" >> $config_mak - echo "#define TARGET_ARCH \"ppc\"" >> $config_h - echo "#define TARGET_PPC 1" >> $config_h -elif test "$target_cpu" = "ppc64" ; then - echo "TARGET_ARCH=ppc64" >> $config_mak - echo "#define TARGET_ARCH \"ppc64\"" >> $config_h - echo "#define TARGET_PPC 1" >> $config_h - echo "#define TARGET_PPC64 1" >> $config_h -elif test "$target_cpu" = "x86_64" ; then - echo "TARGET_ARCH=x86_64" >> $config_mak - echo "#define TARGET_ARCH \"x86_64\"" >> $config_h - echo "#define TARGET_I386 1" >> $config_h - echo "#define TARGET_X86_64 1" >> $config_h - if test $kqemu = "yes" -a "$target_softmmu" = "yes" -a $cpu = "x86_64" ; then - echo "#define USE_KQEMU 1" >> $config_h - fi -elif test "$target_cpu" = "mips" ; then - echo "TARGET_ARCH=mips" >> $config_mak - echo "#define TARGET_ARCH \"mips\"" >> $config_h - echo "#define TARGET_MIPS 1" >> $config_h -else - echo "Unsupported target CPU" - exit 1 -fi +bflt="no" +elfload32="no" +target_nptl="no" +interp_prefix1=`echo "$interp_prefix" | sed "s/%M/$target_arch2/g"` +echo "CONFIG_QEMU_PREFIX=\"$interp_prefix1\"" >> $config_mak +gdb_xml_files="" + +TARGET_ARCH="$target_arch2" +TARGET_BASE_ARCH="" +TARGET_ABI_DIR="" + +case "$target_arch2" in + i386) + target_phys_bits=32 + ;; + x86_64) + TARGET_BASE_ARCH=i386 + target_phys_bits=64 + ;; + alpha) + target_phys_bits=64 + ;; + arm|armeb) + TARGET_ARCH=arm + bflt="yes" + target_nptl="yes" + gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml" + target_phys_bits=32 + ;; + cris) + target_nptl="yes" + target_phys_bits=32 + ;; + m68k) + bflt="yes" + gdb_xml_files="cf-core.xml cf-fp.xml" + target_phys_bits=32 + ;; + microblaze) + bflt="yes" + target_nptl="yes" + target_phys_bits=32 + ;; + mips|mipsel) + TARGET_ARCH=mips + echo "TARGET_ABI_MIPSO32=y" >> $config_mak + target_nptl="yes" + target_phys_bits=64 + ;; + mipsn32|mipsn32el) + TARGET_ARCH=mipsn32 + TARGET_BASE_ARCH=mips + echo "TARGET_ABI_MIPSN32=y" >> $config_mak + target_phys_bits=64 + ;; + mips64|mips64el) + TARGET_ARCH=mips64 + TARGET_BASE_ARCH=mips + echo "TARGET_ABI_MIPSN64=y" >> $config_mak + target_phys_bits=64 + ;; + ppc) + gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml" + target_phys_bits=32 + ;; + ppcemb) + TARGET_BASE_ARCH=ppc + TARGET_ABI_DIR=ppc + gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml" + target_phys_bits=64 + ;; + ppc64) + TARGET_BASE_ARCH=ppc + TARGET_ABI_DIR=ppc + gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml" + target_phys_bits=64 + ;; + ppc64abi32) + TARGET_ARCH=ppc64 + TARGET_BASE_ARCH=ppc + TARGET_ABI_DIR=ppc + echo "TARGET_ABI32=y" >> $config_mak + gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml" + target_phys_bits=64 + ;; + sh4|sh4eb) + TARGET_ARCH=sh4 + bflt="yes" + target_nptl="yes" + target_phys_bits=32 + ;; + sparc) + target_phys_bits=64 + ;; + sparc64) + TARGET_BASE_ARCH=sparc + elfload32="yes" + target_phys_bits=64 + ;; + sparc32plus) + TARGET_ARCH=sparc64 + TARGET_BASE_ARCH=sparc + TARGET_ABI_DIR=sparc + echo "TARGET_ABI32=y" >> $config_mak + target_phys_bits=64 + ;; + *) + echo "Unsupported target CPU" + exit 1 + ;; +esac +echo "TARGET_ARCH=$TARGET_ARCH" >> $config_mak +echo "TARGET_ARCH2=$target_arch2" >> $config_mak +# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH +if [ "$TARGET_BASE_ARCH" = "" ]; then + TARGET_BASE_ARCH=$TARGET_ARCH +fi +echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_mak +if [ "$TARGET_ABI_DIR" = "" ]; then + TARGET_ABI_DIR=$TARGET_ARCH +fi +echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_mak +if [ $target_phys_bits -lt $hostlongbits ] ; then + target_phys_bits=$hostlongbits +fi +case "$target_arch2" in + i386|x86_64) + if test "$xen" = "yes" -a "$target_softmmu" = "yes" ; then + echo "CONFIG_XEN=y" >> $config_mak + fi + if test $kqemu = "yes" -a "$target_softmmu" = "yes" + then + echo "CONFIG_KQEMU=y" >> $config_mak + fi +esac +case "$target_arch2" in + i386|x86_64|ppcemb) + # Make sure the target and host cpus are compatible + if test "$kvm" = "yes" -a "$target_softmmu" = "yes" -a \ + \( "$target_arch2" = "$cpu" -o \ + \( "$target_arch2" = "ppcemb" -a "$cpu" = "ppc" \) -o \ + \( "$target_arch2" = "x86_64" -a "$cpu" = "i386" \) -o \ + \( "$target_arch2" = "i386" -a "$cpu" = "x86_64" \) \) ; then + echo "CONFIG_KVM=y" >> $config_mak + echo "KVM_CFLAGS=$kvm_cflags" >> $config_mak + fi +esac +echo "HWLIB=../libhw$target_phys_bits/libqemuhw$target_phys_bits.a" >> $config_mak +echo "TARGET_PHYS_ADDR_BITS=$target_phys_bits" >> $config_mak +echo "subdir-$target: subdir-libhw$target_phys_bits" >> $config_host_mak if test "$target_bigendian" = "yes" ; then - echo "TARGET_WORDS_BIGENDIAN=yes" >> $config_mak - echo "#define TARGET_WORDS_BIGENDIAN 1" >> $config_h + echo "TARGET_WORDS_BIGENDIAN=y" >> $config_mak fi if test "$target_softmmu" = "yes" ; then - echo "CONFIG_SOFTMMU=yes" >> $config_mak - echo "#define CONFIG_SOFTMMU 1" >> $config_h + echo "CONFIG_SOFTMMU=y" >> $config_mak fi if test "$target_user_only" = "yes" ; then - echo "CONFIG_USER_ONLY=yes" >> $config_mak - echo "#define CONFIG_USER_ONLY 1" >> $config_h + echo "CONFIG_USER_ONLY=y" >> $config_mak fi - -if test "$target_cpu" = "arm" -o "$target_cpu" = "armeb" ; then - echo "CONFIG_SOFTFLOAT=yes" >> $config_mak - echo "#define CONFIG_SOFTFLOAT 1" >> $config_h +if test "$target_linux_user" = "yes" ; then + echo "CONFIG_LINUX_USER=y" >> $config_mak fi -# sdl defines - -if test "$target_user_only" = "no"; then - if test "$target_softmmu" = "no" -o "$static" = "yes"; then - sdl1=$sdl_static - else - sdl1=$sdl - fi - if test "$sdl1" = "yes" ; then - echo "#define CONFIG_SDL 1" >> $config_h - echo "CONFIG_SDL=yes" >> $config_mak - if test "$target_softmmu" = "no" -o "$static" = "yes"; then - echo "SDL_LIBS=$sdl_static_libs" >> $config_mak - else - echo "SDL_LIBS=`$sdl_config --libs`" >> $config_mak - fi - echo -n "SDL_CFLAGS=`$sdl_config --cflags`" >> $config_mak - if [ "${aa}" = "yes" ] ; then - echo -n " `aalib-config --cflags`" >> $config_mak ; - fi - echo "" >> $config_mak - fi +if test "$target_darwin_user" = "yes" ; then + echo "CONFIG_DARWIN_USER=y" >> $config_mak fi +list="" +if test ! -z "$gdb_xml_files" ; then + for x in $gdb_xml_files; do + list="$list $source_path/gdb-xml/$x" + done +fi +echo "TARGET_XML_FILES=$list" >> $config_mak + +case "$target_arch2" in + arm|armeb|m68k|microblaze|mips|mipsel|mipsn32|mipsn32el|mips64|mips64el|ppc|ppc64|ppc64abi32|ppcemb|sparc|sparc64|sparc32plus) + echo "CONFIG_SOFTFLOAT=y" >> $config_mak + ;; +esac -if test "$cocoa" = "yes" ; then - echo "#define CONFIG_COCOA 1" >> $config_h - echo "CONFIG_COCOA=yes" >> $config_mak +if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then + echo "TARGET_HAS_BFLT=y" >> $config_mak +fi +if test "$target_user_only" = "yes" \ + -a "$nptl" = "yes" -a "$target_nptl" = "yes"; then + echo "USE_NPTL=y" >> $config_mak +fi +# 32 bit ELF loader in addition to native 64 bit loader? +if test "$target_user_only" = "yes" -a "$elfload32" = "yes"; then + echo "TARGET_HAS_ELFLOAD32=y" >> $config_mak +fi +if test "$target_bsd_user" = "yes" ; then + echo "CONFIG_BSD_USER=y" >> $config_mak fi +$source_path/create_config < $config_mak > $config_h + +test -f ${config_h}~ && cmp -s $config_h ${config_h}~ && mv ${config_h}~ $config_h + done # for target in $targets # build tree in object directory if source path is different from current one if test "$source_path_used" = "yes" ; then - DIRS="tests" + DIRS="tests tests/cris slirp audio block pc-bios/optionrom" FILES="Makefile tests/Makefile" + FILES="$FILES tests/cris/Makefile tests/cris/.gdbinit" + FILES="$FILES tests/test-mmap.c" + FILES="$FILES pc-bios/optionrom/Makefile" for dir in $DIRS ; do mkdir -p $dir done + # remove the link and recreate it, as not all "ln -sf" overwrite the link for f in $FILES ; do - ln -sf $source_path/$f $f + rm -f $f + ln -s $source_path/$f $f done fi -rm -f $TMPO $TMPC $TMPE $TMPS +for hwlib in 32 64; do + d=libhw$hwlib + mkdir -p $d + rm -f $d/Makefile + ln -s $source_path/Makefile.hw $d/Makefile + echo "HWLIB=libqemuhw$hwlib.a" > $d/config.mak + echo "CPPFLAGS=-DTARGET_PHYS_ADDR_BITS=$hwlib" >> $d/config.mak +done