--- qemu/configure 2018/04/24 16:47:22 1.1.1.6 +++ qemu/configure 2018/04/24 16:50:40 1.1.1.7 @@ -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,30 +26,106 @@ interp_prefix="/usr/gnemul/qemu-%M" static="no" cross_prefix="" cc="gcc" -gcc3_search="yes" -gcc3_list="gcc-3.4.6 gcc-3.4 gcc34 gcc-3.3.6 gcc-3.3 gcc33 gcc-3.2 gcc32" +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` + +# 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}" + +# 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" + ;; + parisc|parisc64) + cpu="hppa" ;; - "Power Macintosh"|ppc|ppc64) - cpu="powerpc" + ia64) + cpu="ia64" + ;; + m68k) + cpu="m68k" ;; mips) cpu="mips" @@ -53,8 +133,11 @@ case "$cpu" in mips64) cpu="mips64" ;; - cris) - cpu="cris" + ppc) + cpu="ppc" + ;; + ppc64) + cpu="ppc64" ;; s390*) cpu="s390" @@ -65,92 +148,118 @@ case "$cpu" in sparc64) cpu="sparc64" ;; - ia64) - cpu="ia64" - ;; - m68k) - cpu="m68k" - ;; - x86_64|amd64) - cpu="x86_64" - ;; *) cpu="unknown" ;; esac gprof="no" +sparse="no" bigendian="no" mingw32="no" EXESUF="" gdbstub="yes" slirp="yes" -adlib="no" -oss="no" -dsound="no" -coreaudio="no" -alsa="no" -fmod="no" +vde="yes" fmod_lib="" fmod_inc="" +oss_lib="" vnc_tls="yes" bsd="no" linux="no" +solaris="no" kqemu="no" profiler="no" cocoa="no" check_gfx="yes" -check_gcc="yes" softmmu="yes" linux_user="no" darwin_user="no" +bsd_user="no" build_docs="no" uname_release="" +curses="yes" +aio="yes" +nptl="yes" +mixemu="no" +bluez="yes" +kvm="yes" +kerneldir="" +aix="no" +blobs="yes" +fdt="yes" +sdl_x11="no" # OS specific -targetos=`uname -s` +if check_define __linux__ ; then + targetos="Linux" +elif check_define _WIN32 ; then + targetos='MINGW32' +else + targetos=`uname -s` +fi case $targetos in CYGWIN*) mingw32="yes" OS_CFLAGS="-mno-cygwin" -VL_OS_LDFLAGS="-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) -oss="yes" +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 ;; 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" -coreaudio="yes" -OS_CFLAGS="-mdynamic-no-pic" +audio_drv_list="coreaudio" +audio_possible_drivers="coreaudio sdl fmod" +OS_LDFLAGS="-framework CoreFoundation -framework IOKit" ;; SunOS) solaris="yes" @@ -181,15 +290,23 @@ SunOS) fi fi if test -f /usr/include/sys/soundcard.h ; then - oss=yes + audio_drv_list="oss" fi + audio_possible_drivers="oss sdl" +;; +AIX) +aix="yes" +make="gmake" ;; *) -oss="yes" +audio_drv_list="oss" +audio_possible_drivers="oss alsa sdl esd pa" linux="yes" linux_user="yes" +usb="linux" if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then kqemu="yes" + audio_possible_drivers="$audio_possible_drivers fmod" fi ;; esac @@ -197,21 +314,21 @@ esac if [ "$bsd" = "yes" ] ; then if [ "$darwin" != "yes" ] ; then make="gmake" + usb="bsd" fi + bsd_user="yes" fi # find source path source_path=`dirname "$0"` +source_path_used="no" +workdir=`pwd` if [ -z "$source_path" ]; then - source_path=`pwd` + source_path=$workdir else source_path=`cd "$source_path"; pwd` fi -if test "$source_path" = `pwd` ; then - source_path_used="no" -else - source_path_used="yes" -fi +[ -f "$workdir/vl.c" ] || source_path_used="yes" werror="no" # generate compile errors on warnings for development builds @@ -231,10 +348,9 @@ for opt do --source-path=*) source_path="$optarg" source_path_used="yes" ;; - --cross-prefix=*) cross_prefix="$optarg" + --cross-prefix=*) ;; - --cc=*) cc="$optarg" - gcc3_search="no" + --cc=*) ;; --host-cc=*) host_cc="$optarg" ;; @@ -256,36 +372,43 @@ for opt do ;; --disable-sdl) sdl="no" ;; - --enable-coreaudio) coreaudio="yes" + --fmod-lib=*) fmod_lib="$optarg" ;; - --enable-alsa) alsa="yes" + --fmod-inc=*) fmod_inc="$optarg" ;; - --enable-dsound) dsound="yes" + --oss-lib=*) oss_lib="$optarg" ;; - --enable-fmod) fmod="yes" + --audio-card-list=*) audio_card_list=`echo "$optarg" | sed -e 's/,/ /g'` ;; - --fmod-lib=*) fmod_lib="$optarg" + --audio-drv-list=*) audio_drv_list="$optarg" ;; - --fmod-inc=*) fmod_inc="$optarg" + --enable-sparse) sparse="yes" ;; - --disable-vnc-tls) vnc_tls="no" + --disable-sparse) sparse="no" ;; - --enable-mingw32) mingw32="yes" ; cross_prefix="i386-mingw32-" ; linux_user="no" + --disable-vnc-tls) vnc_tls="no" ;; --disable-slirp) slirp="no" ;; - --enable-adlib) adlib="yes" + --disable-vde) vde="no" ;; --disable-kqemu) kqemu="no" ;; + --disable-brlapi) brlapi="no" + ;; + --disable-bluez) bluez="no" + ;; + --disable-kvm) kvm="no" + ;; --enable-profiler) profiler="yes" ;; - --enable-cocoa) cocoa="yes" ; coreaudio="yes" ; sdl="no" + --enable-cocoa) + cocoa="yes" ; + sdl="no" ; + audio_drv_list="coreaudio `echo $audio_drv_list | sed s,coreaudio,,g`" ;; --disable-gfx-check) check_gfx="no" ;; - --disable-gcc-check) check_gcc="no" - ;; --disable-system) softmmu="no" ;; --enable-system) softmmu="yes" @@ -298,6 +421,10 @@ for opt do ;; --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=*) @@ -316,30 +443,42 @@ for opt do ;; --disable-werror) werror="no" ;; + --disable-curses) curses="no" + ;; + --disable-nptl) nptl="no" + ;; + --enable-mixemu) mixemu="yes" + ;; + --disable-aio) aio="no" + ;; + --disable-blobs) blobs="no" + ;; + --kerneldir=*) kerneldir="$optarg" + ;; *) echo "ERROR: unknown option $opt"; show_help="yes" ;; esac done -if [ "$bsd" = "yes" -o "$darwin" = "yes" -o "$mingw32" = "yes" ] ; then - AIOLIBS= -else - # Some Linux architectures (e.g. s390) don't imply -lpthread automatically. - AIOLIBS="-lrt -lpthread" -fi - # default flags for all hosts -CFLAGS="$CFLAGS -Wall -O2 -g -fno-strict-aliasing" +CFLAGS="$CFLAGS -O2 -g -fno-strict-aliasing" +CFLAGS="$CFLAGS -Wall -Wundef -Wendif-labels -Wwrite-strings -Wmissing-prototypes -Wstrict-prototypes -Wredundant-decls" LDFLAGS="$LDFLAGS -g" 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 +case "$cpu" in sparc) if test -z "$sparc_cpu" ; then ARCH_CFLAGS="-m32 -mcpu=ultrasparc -D__sparc_v8plus__" ARCH_LDFLAGS="-m32" @@ -359,19 +498,16 @@ case $cpu in s390) ARCH_CFLAGS="-march=z900" ;; + i386) + ARCH_CFLAGS="-m32" + ARCH_LDFLAGS="-m32" + ;; + x86_64) + ARCH_CFLAGS="-m64" + ARCH_LDFLAGS="-m64" + ;; esac -if [ "$solaris" = "yes" -a "$cpu" = "x86_64" ] ; then - CFLAGS="${CFLAGS} -m64" - OS_CFLAGS="${OS_CFLAGS} -m64" - OS_LDFLAGS="${OS_LDFLAGS} -m64" -fi - -if [ "$solaris" = "yes" -a "$cpu" = "i386" ] ; then - CFLAGS="${CFLAGS} -m32" - OS_CFLAGS="${OS_CFLAGS} -m32" -fi - if test x"$show_help" = x"yes" ; then cat << EOF @@ -397,104 +533,60 @@ echo " --host-cc=CC use C c echo " --make=MAKE use specified make [$make]" echo " --install=INSTALL use specified install [$install]" echo " --static enable static build [$static]" +echo " --enable-sparse enable sparse checker" +echo " --disable-sparse disable sparse checker (default)" echo " --disable-werror disable compilation abort on warning" echo " --disable-sdl disable SDL" echo " --enable-cocoa enable COCOA (Mac OS X only)" -echo " --enable-mingw32 enable Win32 cross compilation with mingw32" -echo " --enable-adlib enable Adlib emulation" -echo " --enable-coreaudio enable Coreaudio audio driver" -echo " --enable-alsa enable ALSA audio driver" -echo " --enable-fmod enable FMOD audio driver" -echo " --enable-dsound enable DirectSound audio driver" +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-brlapi disable BrlAPI" echo " --disable-vnc-tls disable TLS encryption for VNC server" +echo " --disable-curses disable curses output" +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-aio disable AIO support" +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 -cc="${cross_prefix}${cc}" -ar="${cross_prefix}${ar}" -strip="${cross_prefix}${strip}" - -# check that the C compiler works. -cat > $TMPC < /dev/null ; then - : C compiler works ok -else - echo "ERROR: \"$cc\" either does not exist or does not work" - exit 1 -fi - if test "$mingw32" = "yes" ; then linux="no" EXESUF=".exe" oss="no" + linux_user="no" + bsd_user="no" fi -# Check for gcc4, error if pre-gcc4 -if test "$check_gcc" = "yes" ; then - cat > $TMPC < /dev/null ; then - echo "WARNING: \"$cc\" looks like gcc 4.x" - found_compat_cc="no" - if test "$gcc3_search" = "yes" ; then - echo "Looking for gcc 3.x" - for compat_cc in $gcc3_list ; do - if "$cross_prefix$compat_cc" --version 2> /dev/null | fgrep '(GCC) 3.' > /dev/null 2>&1 ; then - echo "Found \"$compat_cc\"" - cc="$cross_prefix$compat_cc" - found_compat_cc="yes" - break - fi - done - if test "$found_compat_cc" = "no" ; then - echo "gcc 3.x not found!" - fi - fi - if test "$found_compat_cc" = "no" ; then - echo "QEMU is known to have problems when compiled with gcc 4.x" - echo "It is recommended that you use gcc 3.x to build QEMU" - echo "To use this compiler anyway, configure with --disable-gcc-check" - exit 1; - fi - fi +if test ! -x "$(which cgcc 2>/dev/null)"; then + sparse="no" fi # # Solaris specific configure tool chain decisions # if test "$solaris" = "yes" ; then - # - # gcc for solaris 10/fcs in /usr/sfw/bin doesn't compile qemu correctly - # override the check with --disable-gcc-check - # - if test "$solarisrev" -eq 10 -a "$check_gcc" = "yes" ; then - solgcc=`which $cc` - if test "$solgcc" = "/usr/sfw/bin/gcc" ; then - echo "Solaris 10/FCS gcc in /usr/sfw/bin will not compiled qemu correctly." - echo "please get gcc-3.4.3 or later, from www.blastwave.org using pkg-get -i gcc3" - echo "or get the latest patch from SunSolve for gcc" - exit 1 - fi - fi 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" @@ -522,15 +614,55 @@ fi if test -z "$target_list" ; then # these targets are portable if [ "$softmmu" = "yes" ] ; then - target_list="i386-softmmu sparc-softmmu x86_64-softmmu mips-softmmu mipsel-softmmu mips64-softmmu mips64el-softmmu arm-softmmu ppc-softmmu ppcemb-softmmu ppc64-softmmu m68k-softmmu sh4-softmmu sh4eb-softmmu cris-softmmu" + target_list="\ +i386-softmmu \ +x86_64-softmmu \ +arm-softmmu \ +cris-softmmu \ +m68k-softmmu \ +mips-softmmu \ +mipsel-softmmu \ +mips64-softmmu \ +mips64el-softmmu \ +ppc-softmmu \ +ppcemb-softmmu \ +ppc64-softmmu \ +sh4-softmmu \ +sh4eb-softmmu \ +sparc-softmmu \ +" fi # the following are Linux specific if [ "$linux_user" = "yes" ] ; then - target_list="i386-linux-user arm-linux-user armeb-linux-user sparc-linux-user sparc64-linux-user sparc32plus-linux-user mips-linux-user mipsel-linux-user m68k-linux-user alpha-linux-user sh4-linux-user sh4eb-linux-user ppc-linux-user ppc64-linux-user ppc64abi32-linux-user x86_64-linux-user cris-linux-user $target_list" + 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 \ +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="i386-darwin-user ppc-darwin-user $target_list" + 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}\ +sparc64-bsd-user \ +" fi else target_list=`echo "$target_list" | sed -e 's/,/ /g'` @@ -552,7 +684,7 @@ int main(int argc, char ** argv){ } 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 @@ -561,7 +693,16 @@ fi else # if cross compiling, cannot launch a program, so make a static guess -if test "$cpu" = "powerpc" -o "$cpu" = "mips" -o "$cpu" = "mips64" -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 @@ -569,7 +710,11 @@ 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 @@ -579,6 +724,41 @@ int main(void) { } EOF +# Check host NPTL support +cat > $TMPC < +#include +void foo() +{ +#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT) +#error bork +#endif +} +EOF + +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 + ########################################## # SDL probe @@ -589,76 +769,298 @@ if test -z "$sdl" ; then 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 -o $TMPE ${OS_CFLAGS} `$sdl_config --cflags 2> /dev/null` $TMPC `$sdl_config --libs 2> /dev/null` 2> /tmp/qemu-$$-sdl-config.log ; 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 + 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 + + # 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 - # 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 2> /dev/null; then - sdl_static=yes - fi - fi # static link - fi # sdl compile test - fi # cross compilation + 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 # Make sure to disable cocoa if sdl was set if test "$sdl" = "yes" ; then cocoa="no" - coreaudio="no" + audio_drv_list="`echo $audio_drv_list | sed s,coreaudio,,g`" fi fi # -z $sdl +if test "$sdl" = "yes" ; then +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 + ########################################## # VNC TLS detection if test "$vnc_tls" = "yes" ; then - `pkg-config gnutls` || vnc_tls="no" +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 -if test "$vnc_tls" = "yes" ; then - vnc_tls_cflags=`pkg-config --cflags gnutls` - vnc_tls_libs=`pkg-config --libs gnutls` + +########################################## +# 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 ########################################## -# alsa sound support libraries +# Sound support libraries probe -if test "$alsa" = "yes" ; then +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 + 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 cat > $TMPC << EOF -#include -int main(void) { snd_pcm_t **handle; return snd_pcm_close(*handle); } +#include +int main(void) { return curses_version(); } EOF - if $cc -o $TMPE $TMPC -lasound 2> /dev/null ; then + if $cc $ARCH_CFLAGS -o $TMPE $TMPC -lcurses > /dev/null 2> /dev/null ; then + curses=yes + fi +fi # test "$curses" + +########################################## +# bluez support probe +if test "$bluez" = "yes" ; then + `pkg-config bluez` || 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` + bluez_libs=`pkg-config --libs bluez` + if $cc $ARCH_CFLAGS -o $TMPE ${OS_CFLAGS} $bluez_cflags $TMPC \ + $bluez_libs > /dev/null 2> /dev/null ; then : else - echo - echo "Error: Could not find alsa" - echo "Make sure to have the alsa libs and headers installed." - echo - exit 1 + bluez="no" + fi +fi + +########################################## +# 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=`$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})" + fi + fi + fi +fi + +########################################## +# AIO probe +AIOLIBS="" + +if test "$aio" = "yes" ; then + aio=no + cat > $TMPC << EOF +#include +int main(void) { pthread_mutex_t lock; return 0; } +EOF + if $cc $ARCH_CFLAGS -o $TMPE $AIOLIBS $TMPC 2> /dev/null ; then + aio=yes + AIOLIBS="-lpthread" + fi +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 + +########################################## +# 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 ; then + fdt=yes fi fi @@ -668,9 +1070,29 @@ if [ -x "`which texi2html 2>/dev/null`" build_docs="yes" fi +########################################## +# Do we need librt +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 + # Hack, we should have a general purpose LIBS for this sort of thing + AIOLIBS="$AIOLIBS -lrt" +fi + if test "$mingw32" = "yes" ; then if test -z "$prefix" ; then - prefix="/c/Program Files/Qemu" + prefix="c:\\\\Program Files\\\\Qemu" fi mansuffix="" datasuffix="" @@ -696,12 +1118,14 @@ 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 "gprof enabled $gprof" +echo "sparse enabled $sparse" echo "profiler $profiler" echo "static build $static" echo "-Werror enabled $werror" @@ -712,25 +1136,11 @@ echo "SDL support $sdl" if test "$sdl" != "no" ; then echo "SDL static link $sdl_static" fi +echo "curses support $curses" echo "mingw32 support $mingw32" -echo "Adlib support $adlib" -echo "CoreAudio support $coreaudio" -echo "ALSA support $alsa" -echo "DSound support $dsound" -if test "$fmod" = "yes"; then - 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 - fmod_support=" (lib='$fmod_lib' include='$fmod_inc')" -else - fmod_support="" -fi -echo "FMOD support $fmod $fmod_support" -echo "OSS support $oss" +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" @@ -740,18 +1150,24 @@ if test -n "$sparc_cpu"; then echo "Target Sparc Arch $sparc_cpu" fi echo "kqemu support $kqemu" +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 "Install blobs $blobs" +echo "KVM support $kvm" +echo "fdt support $fdt" if test $sdl_too_old = "yes"; then echo "-> Your SDL version is too old - please upgrade to have SDL support" fi -if [ -s /tmp/qemu-$$-sdl-config.log ]; then +if [ -s $TMPSDLLOG ]; then echo "The error log from compiling the libSDL test is: " - cat /tmp/qemu-$$-sdl-config.log + cat $TMPSDLLOG fi -rm -f /tmp/qemu-$$-sdl-config.log #if test "$sdl_static" = "no"; then # echo "WARNING: cannot compile statically with SDL - qemu-fast won't have a graphical output" #fi @@ -763,7 +1179,9 @@ config_h="config-host.h" test -f $config_h && mv $config_h ${config_h}~ echo "# Automatically generated by configure - do not modify" > $config_mak -echo "# Configured with: $0 $@" >> $config_mak +printf "# Configured with:" >> $config_mak +printf " '%s'" "$0" "$@" >> $config_mak +echo >> $config_mak echo "/* Automatically generated by configure - do not modify */" > $config_h echo "prefix=$prefix" >> $config_mak @@ -778,60 +1196,91 @@ echo "CC=$cc" >> $config_mak echo "HOST_CC=$host_cc" >> $config_mak echo "AR=$ar" >> $config_mak echo "STRIP=$strip -s -R .comment -R .note" >> $config_mak +# XXX: only use CFLAGS and LDFLAGS ? +# XXX: should export HOST_CFLAGS and HOST_LDFLAGS for cross +# compilation of dyngen tool (useful for win32 build on Linux host) echo "OS_CFLAGS=$OS_CFLAGS" >> $config_mak echo "OS_LDFLAGS=$OS_LDFLAGS" >> $config_mak -echo "VL_OS_LDFLAGS=$VL_OS_LDFLAGS" >> $config_mak echo "ARCH_CFLAGS=$ARCH_CFLAGS" >> $config_mak echo "ARCH_LDFLAGS=$ARCH_LDFLAGS" >> $config_mak echo "CFLAGS=$CFLAGS" >> $config_mak echo "LDFLAGS=$LDFLAGS" >> $config_mak echo "EXESUF=$EXESUF" >> $config_mak echo "AIOLIBS=$AIOLIBS" >> $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" = "mips64" ; then - echo "ARCH=mips64" >> $config_mak - echo "#define HOST_MIPS64 1" >> $config_h -elif test "$cpu" = "cris" ; then - echo "ARCH=cris" >> $config_mak - echo "#define HOST_CRIS 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 = $cpu" - exit 1 +case "$cpu" in + i386) + echo "ARCH=i386" >> $config_mak + echo "#define HOST_I386 1" >> $config_h + ;; + x86_64) + echo "ARCH=x86_64" >> $config_mak + echo "#define HOST_X86_64 1" >> $config_h + ;; + alpha) + echo "ARCH=alpha" >> $config_mak + echo "#define HOST_ALPHA 1" >> $config_h + ;; + armv4b) + echo "ARCH=arm" >> $config_mak + echo "#define HOST_ARM 1" >> $config_h + ;; + armv4l) + echo "ARCH=arm" >> $config_mak + echo "#define HOST_ARM 1" >> $config_h + ;; + cris) + echo "ARCH=cris" >> $config_mak + echo "#define HOST_CRIS 1" >> $config_h + ;; + hppa) + echo "ARCH=hppa" >> $config_mak + echo "#define HOST_HPPA 1" >> $config_h + ;; + ia64) + echo "ARCH=ia64" >> $config_mak + echo "#define HOST_IA64 1" >> $config_h + ;; + m68k) + echo "ARCH=m68k" >> $config_mak + echo "#define HOST_M68K 1" >> $config_h + ;; + mips) + echo "ARCH=mips" >> $config_mak + echo "#define HOST_MIPS 1" >> $config_h + ;; + mips64) + echo "ARCH=mips64" >> $config_mak + echo "#define HOST_MIPS64 1" >> $config_h + ;; + ppc) + echo "ARCH=ppc" >> $config_mak + echo "#define HOST_PPC 1" >> $config_h + ;; + ppc64) + echo "ARCH=ppc64" >> $config_mak + echo "#define HOST_PPC64 1" >> $config_h + ;; + s390) + echo "ARCH=s390" >> $config_mak + echo "#define HOST_S390 1" >> $config_h + ;; + sparc) + echo "ARCH=sparc" >> $config_mak + echo "#define HOST_SPARC 1" >> $config_h + ;; + sparc64) + echo "ARCH=sparc64" >> $config_mak + echo "#define HOST_SPARC64 1" >> $config_h + ;; + *) + echo "Unsupported CPU = $cpu" + exit 1 + ;; +esac +if test "$sparse" = "yes" ; then + echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_mak + echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_mak + echo "CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_mak fi if test "$bigendian" = "yes" ; then echo "WORDS_BIGENDIAN=yes" >> $config_mak @@ -846,14 +1295,34 @@ else #include int main(void) { return bswap_32(0); } EOF - if $cc -o $TMPE $TMPC 2> /dev/null ; then + if $cc $ARCH_CFLAGS -o $TMPE $TMPC >/dev/null 2> /dev/null ; then echo "#define HAVE_BYTESWAP_H 1" >> $config_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_h + fi +fi + +if [ "$openbsd" = "yes" ] ; then + echo "#define ENOTSUP 4096" >> $config_h fi + if test "$darwin" = "yes" ; then echo "CONFIG_DARWIN=yes" >> $config_mak echo "#define CONFIG_DARWIN 1" >> $config_h fi + +if test "$aix" = "yes" ; then + echo "CONFIG_AIX=yes" >> $config_mak + echo "#define CONFIG_AIX 1" >> $config_h +fi + if test "$solaris" = "yes" ; then echo "CONFIG_SOLARIS=yes" >> $config_mak echo "#define HOST_SOLARIS $solarisrev" >> $config_h @@ -885,31 +1354,32 @@ if test "$slirp" = "yes" ; then echo "CONFIG_SLIRP=yes" >> $config_mak echo "#define CONFIG_SLIRP 1" >> $config_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 "$coreaudio" = "yes" ; then - echo "CONFIG_COREAUDIO=yes" >> $config_mak - echo "#define CONFIG_COREAUDIO 1" >> $config_h -fi -if test "$alsa" = "yes" ; then - echo "CONFIG_ALSA=yes" >> $config_mak - echo "#define CONFIG_ALSA 1" >> $config_h -fi -if test "$dsound" = "yes" ; then - echo "CONFIG_DSOUND=yes" >> $config_mak - echo "#define CONFIG_DSOUND 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 +if test "$vde" = "yes" ; then + echo "CONFIG_VDE=yes" >> $config_mak + echo "#define CONFIG_VDE 1" >> $config_h + echo "VDE_LIBS=-lvdeplug" >> $config_mak +fi +for card in $audio_card_list; do + def=CONFIG_`echo $card | tr '[:lower:]' '[:upper:]'` + echo "$def=yes" >> $config_mak + echo "#define $def 1" >> $config_h +done +echo "#define AUDIO_DRIVERS \\" >> $config_h +for drv in $audio_drv_list; do + echo " &${drv}_audio_driver, \\" >>$config_h + def=CONFIG_`echo $drv | tr '[:lower:]' '[:upper:]'` + echo "$def=yes" >> $config_mak + if test "$drv" = "fmod"; then + echo "CONFIG_FMOD_LIB=$fmod_lib" >> $config_mak + echo "CONFIG_FMOD_INC=$fmod_inc" >> $config_mak + elif test "$drv" = "oss"; then + echo "CONFIG_OSS_LIB=$oss_lib" >> $config_mak + fi +done +echo "" >>$config_h +if test "$mixemu" = "yes" ; then + echo "CONFIG_MIXEMU=yes" >> $config_mak + echo "#define CONFIG_MIXEMU 1" >> $config_h fi if test "$vnc_tls" = "yes" ; then echo "CONFIG_VNC_TLS=yes" >> $config_mak @@ -939,6 +1409,8 @@ if test "$sdl1" = "yes" ; then echo "CONFIG_SDL=yes" >> $config_mak if test "$target_softmmu" = "no" -o "$static" = "yes"; then echo "SDL_LIBS=$sdl_static_libs" >> $config_mak + elif test "$sdl_x11" = "yes" ; then + echo "SDL_LIBS=`$sdl_config --libs` -lX11" >> $config_mak else echo "SDL_LIBS=`$sdl_config --libs`" >> $config_mak fi @@ -949,8 +1421,38 @@ if test "$sdl1" = "yes" ; then fi fi if test "$cocoa" = "yes" ; then - echo "#define CONFIG_COCOA 1" >> $config_h - echo "CONFIG_COCOA=yes" >> $config_mak + echo "#define CONFIG_COCOA 1" >> $config_h + echo "CONFIG_COCOA=yes" >> $config_mak +fi +if test "$curses" = "yes" ; then + echo "#define CONFIG_CURSES 1" >> $config_h + echo "CONFIG_CURSES=yes" >> $config_mak + echo "CURSES_LIBS=-lcurses" >> $config_mak +fi +if test "$brlapi" = "yes" ; then + echo "CONFIG_BRLAPI=yes" >> $config_mak + echo "#define CONFIG_BRLAPI 1" >> $config_h + echo "BRLAPI_LIBS=-lbrlapi" >> $config_mak +fi +if test "$bluez" = "yes" ; then + echo "CONFIG_BLUEZ=yes" >> $config_mak + echo "CONFIG_BLUEZ_CFLAGS=$bluez_cflags" >> $config_mak + echo "CONFIG_BLUEZ_LIBS=$bluez_libs" >> $config_mak + echo "#define CONFIG_BLUEZ 1" >> $config_h +fi +if test "$aio" = "yes" ; then + echo "#define CONFIG_AIO 1" >> $config_h + echo "CONFIG_AIO=yes" >> $config_mak +fi +if test "$blobs" = "yes" ; then + echo "INSTALL_BLOBS=yes" >> $config_mak +fi +if test "$iovec" = "yes" ; then + echo "#define HAVE_IOVEC 1" >> $config_h +fi +if test "$fdt" = "yes" ; then + echo "#define HAVE_FDT 1" >> $config_h + echo "FDT_LIBS=-lfdt" >> $config_mak fi # XXX: suppress that @@ -962,9 +1464,25 @@ fi echo "#define CONFIG_UNAME_RELEASE \"$uname_release\"" >> $config_h +# USB host support +case "$usb" in +linux) + echo "HOST_USB=linux" >> $config_mak +;; +bsd) + echo "HOST_USB=bsd" >> $config_mak +;; +*) + echo "HOST_USB=stub" >> $config_mak +;; +esac + tools= if test `expr "$target_list" : ".*softmmu.*"` != 0 ; then tools="qemu-img\$(EXESUF) $tools" + if [ "$linux" = "yes" ] ; then + tools="qemu-nbd\$(EXESUF) $tools" + fi fi echo "TOOLS=$tools" >> $config_mak @@ -977,22 +1495,23 @@ config_h=$target_dir/config.h target_cpu=`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" = "sparc32plus" ] && target_bigendian=yes +[ "$target_cpu" = "m68k" ] && target_bigendian=yes +[ "$target_cpu" = "mips" ] && target_bigendian=yes +[ "$target_cpu" = "mipsn32" ] && target_bigendian=yes +[ "$target_cpu" = "mips64" ] && target_bigendian=yes [ "$target_cpu" = "ppc" ] && target_bigendian=yes [ "$target_cpu" = "ppcemb" ] && target_bigendian=yes [ "$target_cpu" = "ppc64" ] && target_bigendian=yes [ "$target_cpu" = "ppc64abi32" ] && target_bigendian=yes -[ "$target_cpu" = "mips" ] && target_bigendian=yes -[ "$target_cpu" = "mipsn32" ] && target_bigendian=yes -[ "$target_cpu" = "mips64" ] && target_bigendian=yes [ "$target_cpu" = "sh4eb" ] && target_bigendian=yes -[ "$target_cpu" = "m68k" ] && target_bigendian=yes +[ "$target_cpu" = "sparc" ] && target_bigendian=yes +[ "$target_cpu" = "sparc64" ] && target_bigendian=yes +[ "$target_cpu" = "sparc32plus" ] && target_bigendian=yes target_softmmu="no" target_user_only="no" target_linux_user="no" target_darwin_user="no" +target_bsd_user="no" case "$target" in ${target_cpu}-softmmu) target_softmmu="yes" @@ -1005,6 +1524,10 @@ case "$target" in target_user_only="yes" target_darwin_user="yes" ;; + ${target_cpu}-bsd-user) + target_user_only="yes" + target_bsd_user="yes" + ;; *) echo "ERROR: Target '$target' not recognised" exit 1 @@ -1015,7 +1538,8 @@ if test "$target_user_only" = "no" -a "$ -a "$sdl" = "no" -a "$cocoa" = "no" ; then echo "ERROR: QEMU requires SDL or Cocoa for graphical output" echo "To build QEMU without graphical output configure with --disable-gfx-check" - echo "Note that this will disable all output from the virtual graphics card." + echo "Note that this will disable all output from the virtual graphics card" + echo "except through VNC or curses." exit 1; fi @@ -1025,7 +1549,8 @@ test -f $config_h && mv $config_h ${conf mkdir -p $target_dir mkdir -p $target_dir/fpu -if test "$target" = "arm-linux-user" -o "$target" = "armeb-linux-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 @@ -1045,111 +1570,168 @@ echo "#include \"../config-host.h\"" >> bflt="no" elfload32="no" +target_nptl="no" interp_prefix1=`echo "$interp_prefix" | sed "s/%M/$target_cpu/g"` echo "#define CONFIG_QEMU_PREFIX \"$interp_prefix1\"" >> $config_h +gdb_xml_files="" -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 - bflt="yes" -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 - elfload32="yes" -elif test "$target_cpu" = "sparc32plus" ; then - echo "TARGET_ARCH=sparc64" >> $config_mak - echo "TARGET_ABI_DIR=sparc" >> $config_mak - echo "TARGET_ARCH2=sparc32plus" >> $config_mak - echo "#define TARGET_ARCH \"sparc64\"" >> $config_h - echo "#define TARGET_SPARC 1" >> $config_h - echo "#define TARGET_SPARC64 1" >> $config_h - echo "#define TARGET_ABI32 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" = "ppcemb" ; then - echo "TARGET_ARCH=ppcemb" >> $config_mak - echo "TARGET_ABI_DIR=ppc" >> $config_mak - echo "#define TARGET_ARCH \"ppcemb\"" >> $config_h - echo "#define TARGET_PPC 1" >> $config_h - echo "#define TARGET_PPCEMB 1" >> $config_h -elif test "$target_cpu" = "ppc64" ; then - echo "TARGET_ARCH=ppc64" >> $config_mak - echo "TARGET_ABI_DIR=ppc" >> $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" = "ppc64abi32" ; then - echo "TARGET_ARCH=ppc64" >> $config_mak - echo "TARGET_ABI_DIR=ppc" >> $config_mak - echo "TARGET_ARCH2=ppc64abi32" >> $config_mak - echo "#define TARGET_ARCH \"ppc64\"" >> $config_h - echo "#define TARGET_PPC 1" >> $config_h - echo "#define TARGET_PPC64 1" >> $config_h - echo "#define TARGET_ABI32 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" -o "$target_cpu" = "mipsel" ; then - echo "TARGET_ARCH=mips" >> $config_mak - echo "#define TARGET_ARCH \"mips\"" >> $config_h - echo "#define TARGET_MIPS 1" >> $config_h - echo "#define TARGET_ABI_MIPSO32 1" >> $config_h -elif test "$target_cpu" = "mipsn32" -o "$target_cpu" = "mipsn32el" ; then - echo "TARGET_ARCH=mipsn32" >> $config_mak - echo "#define TARGET_ARCH \"mipsn32\"" >> $config_h - echo "#define TARGET_MIPS 1" >> $config_h - echo "#define TARGET_ABI_MIPSN32 1" >> $config_h -elif test "$target_cpu" = "mips64" -o "$target_cpu" = "mips64el" ; then - echo "TARGET_ARCH=mips64" >> $config_mak - echo "#define TARGET_ARCH \"mips64\"" >> $config_h - echo "#define TARGET_MIPS 1" >> $config_h - echo "#define TARGET_MIPS64 1" >> $config_h - echo "#define TARGET_ABI_MIPSN64 1" >> $config_h -elif test "$target_cpu" = "cris" ; then - echo "TARGET_ARCH=cris" >> $config_mak - echo "#define TARGET_ARCH \"cris\"" >> $config_h - echo "#define TARGET_CRIS 1" >> $config_h - echo "CONFIG_SOFTFLOAT=yes" >> $config_mak - echo "#define CONFIG_SOFTFLOAT 1" >> $config_h -elif test "$target_cpu" = "sh4" -o "$target_cpu" = "sh4eb" ; then - echo "TARGET_ARCH=sh4" >> $config_mak - echo "#define TARGET_ARCH \"sh4\"" >> $config_h - echo "#define TARGET_SH4 1" >> $config_h - bflt="yes" -elif test "$target_cpu" = "m68k" ; then - echo "TARGET_ARCH=m68k" >> $config_mak - echo "#define TARGET_ARCH \"m68k\"" >> $config_h - echo "#define TARGET_M68K 1" >> $config_h - bflt="yes" -elif test "$target_cpu" = "alpha" ; then - echo "TARGET_ARCH=alpha" >> $config_mak - echo "#define TARGET_ARCH \"alpha\"" >> $config_h - echo "#define TARGET_ALPHA 1" >> $config_h -else - echo "Unsupported target CPU" - exit 1 -fi +# Make sure the target and host cpus are compatible +if test "$kvm" = "yes" -a ! \( "$target_cpu" = "$cpu" -o \ + \( "$target_cpu" = "ppcemb" -a "$cpu" = "ppc" \) -o \ + \( "$target_cpu" = "x86_64" -a "$cpu" = "i386" \) -o \ + \( "$target_cpu" = "i386" -a "$cpu" = "x86_64" \) \) ; then + kvm="no" +fi +# Disable KVM for linux-user +if test "$kvm" = "yes" -a "$target_softmmu" = "no" ; then + kvm="no" +fi + +case "$target_cpu" in + i386) + 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" + then + echo "#define USE_KQEMU 1" >> $config_h + fi + if test "$kvm" = "yes" ; then + echo "CONFIG_KVM=yes" >> $config_mak + echo "KVM_CFLAGS=$kvm_cflags" >> $config_mak + echo "#define CONFIG_KVM 1" >> $config_h + fi + ;; + x86_64) + 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 + if test "$kvm" = "yes" ; then + echo "CONFIG_KVM=yes" >> $config_mak + echo "KVM_CFLAGS=$kvm_cflags" >> $config_mak + echo "#define CONFIG_KVM 1" >> $config_h + fi + ;; + alpha) + echo "TARGET_ARCH=alpha" >> $config_mak + echo "#define TARGET_ARCH \"alpha\"" >> $config_h + echo "#define TARGET_ALPHA 1" >> $config_h + ;; + arm|armeb) + echo "TARGET_ARCH=arm" >> $config_mak + echo "#define TARGET_ARCH \"arm\"" >> $config_h + echo "#define TARGET_ARM 1" >> $config_h + bflt="yes" + target_nptl="yes" + gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml" + ;; + cris) + echo "TARGET_ARCH=cris" >> $config_mak + echo "#define TARGET_ARCH \"cris\"" >> $config_h + echo "#define TARGET_CRIS 1" >> $config_h + target_nptl="yes" + ;; + m68k) + echo "TARGET_ARCH=m68k" >> $config_mak + echo "#define TARGET_ARCH \"m68k\"" >> $config_h + echo "#define TARGET_M68K 1" >> $config_h + bflt="yes" + gdb_xml_files="cf-core.xml cf-fp.xml" + ;; + mips|mipsel) + echo "TARGET_ARCH=mips" >> $config_mak + echo "#define TARGET_ARCH \"mips\"" >> $config_h + echo "#define TARGET_MIPS 1" >> $config_h + echo "#define TARGET_ABI_MIPSO32 1" >> $config_h + ;; + mipsn32|mipsn32el) + echo "TARGET_ARCH=mipsn32" >> $config_mak + echo "#define TARGET_ARCH \"mipsn32\"" >> $config_h + echo "#define TARGET_MIPS 1" >> $config_h + echo "#define TARGET_ABI_MIPSN32 1" >> $config_h + ;; + mips64|mips64el) + echo "TARGET_ARCH=mips64" >> $config_mak + echo "#define TARGET_ARCH \"mips64\"" >> $config_h + echo "#define TARGET_MIPS 1" >> $config_h + echo "#define TARGET_MIPS64 1" >> $config_h + echo "#define TARGET_ABI_MIPSN64 1" >> $config_h + ;; + ppc) + echo "TARGET_ARCH=ppc" >> $config_mak + echo "#define TARGET_ARCH \"ppc\"" >> $config_h + echo "#define TARGET_PPC 1" >> $config_h + gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml" + ;; + ppcemb) + echo "TARGET_ARCH=ppcemb" >> $config_mak + echo "TARGET_ABI_DIR=ppc" >> $config_mak + echo "#define TARGET_ARCH \"ppcemb\"" >> $config_h + echo "#define TARGET_PPC 1" >> $config_h + echo "#define TARGET_PPCEMB 1" >> $config_h + if test "$kvm" = "yes" ; then + echo "CONFIG_KVM=yes" >> $config_mak + echo "KVM_CFLAGS=$kvm_cflags" >> $config_mak + echo "#define CONFIG_KVM 1" >> $config_h + fi + gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml" + ;; + ppc64) + echo "TARGET_ARCH=ppc64" >> $config_mak + echo "TARGET_ABI_DIR=ppc" >> $config_mak + echo "#define TARGET_ARCH \"ppc64\"" >> $config_h + echo "#define TARGET_PPC 1" >> $config_h + echo "#define TARGET_PPC64 1" >> $config_h + gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml" + ;; + ppc64abi32) + echo "TARGET_ARCH=ppc64" >> $config_mak + echo "TARGET_ABI_DIR=ppc" >> $config_mak + echo "TARGET_ARCH2=ppc64abi32" >> $config_mak + echo "#define TARGET_ARCH \"ppc64\"" >> $config_h + echo "#define TARGET_PPC 1" >> $config_h + echo "#define TARGET_PPC64 1" >> $config_h + echo "#define TARGET_ABI32 1" >> $config_h + gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml" + ;; + sh4|sh4eb) + echo "TARGET_ARCH=sh4" >> $config_mak + echo "#define TARGET_ARCH \"sh4\"" >> $config_h + echo "#define TARGET_SH4 1" >> $config_h + bflt="yes" + target_nptl="yes" + ;; + sparc) + echo "TARGET_ARCH=sparc" >> $config_mak + echo "#define TARGET_ARCH \"sparc\"" >> $config_h + echo "#define TARGET_SPARC 1" >> $config_h + ;; + sparc64) + 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 + elfload32="yes" + ;; + sparc32plus) + echo "TARGET_ARCH=sparc64" >> $config_mak + echo "TARGET_ABI_DIR=sparc" >> $config_mak + echo "TARGET_ARCH2=sparc32plus" >> $config_mak + echo "#define TARGET_ARCH \"sparc64\"" >> $config_h + echo "#define TARGET_SPARC 1" >> $config_h + echo "#define TARGET_SPARC64 1" >> $config_h + echo "#define TARGET_ABI32 1" >> $config_h + ;; + *) + echo "Unsupported target CPU" + exit 1 + ;; +esac if test "$target_bigendian" = "yes" ; then echo "TARGET_WORDS_BIGENDIAN=yes" >> $config_mak echo "#define TARGET_WORDS_BIGENDIAN 1" >> $config_h @@ -1170,8 +1752,30 @@ if test "$target_darwin_user" = "yes" ; echo "CONFIG_DARWIN_USER=yes" >> $config_mak echo "#define CONFIG_DARWIN_USER 1" >> $config_h fi - -if test "$target_cpu" = "arm" -o "$target_cpu" = "armeb" -o "$target_cpu" = "sparc" -o "$target_cpu" = "sparc64" -o "$target_cpu" = "sparc32plus" -o "$target_cpu" = "m68k" -o "$target_cpu" = "mips" -o "$target_cpu" = "mipsel" -o "$target_cpu" = "mipsn32" -o "$target_cpu" = "mipsn32el" -o "$target_cpu" = "mips64" -o "$target_cpu" = "mips64el"; then +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 + +if test "$target_cpu" = "arm" \ + -o "$target_cpu" = "armeb" \ + -o "$target_cpu" = "m68k" \ + -o "$target_cpu" = "mips" \ + -o "$target_cpu" = "mipsel" \ + -o "$target_cpu" = "mipsn32" \ + -o "$target_cpu" = "mipsn32el" \ + -o "$target_cpu" = "mips64" \ + -o "$target_cpu" = "mips64el" \ + -o "$target_cpu" = "ppc" \ + -o "$target_cpu" = "ppc64" \ + -o "$target_cpu" = "ppc64abi32" \ + -o "$target_cpu" = "ppcemb" \ + -o "$target_cpu" = "sparc" \ + -o "$target_cpu" = "sparc64" \ + -o "$target_cpu" = "sparc32plus"; then echo "CONFIG_SOFTFLOAT=yes" >> $config_mak echo "#define CONFIG_SOFTFLOAT 1" >> $config_h fi @@ -1179,11 +1783,19 @@ if test "$target_user_only" = "yes" -a " echo "TARGET_HAS_BFLT=yes" >> $config_mak echo "#define TARGET_HAS_BFLT 1" >> $config_h fi +if test "$target_user_only" = "yes" \ + -a "$nptl" = "yes" -a "$target_nptl" = "yes"; then + echo "#define USE_NPTL 1" >> $config_h +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=yes" >> $config_mak echo "#define TARGET_HAS_ELFLOAD32 1" >> $config_h fi +if test "$target_bsd_user" = "yes" ; then + echo "CONFIG_BSD_USER=yes" >> $config_mak + echo "#define CONFIG_BSD_USER 1" >> $config_h +fi test -f ${config_h}~ && cmp -s $config_h ${config_h}~ && mv ${config_h}~ $config_h @@ -1194,6 +1806,7 @@ if test "$source_path_used" = "yes" ; th DIRS="tests tests/cris slirp audio" FILES="Makefile tests/Makefile" FILES="$FILES tests/cris/Makefile tests/cris/.gdbinit" + FILES="$FILES tests/test-mmap.c" for dir in $DIRS ; do mkdir -p $dir done @@ -1203,5 +1816,3 @@ if test "$source_path_used" = "yes" ; th ln -s $source_path/$f $f done fi - -rm -f $TMPO $TMPC $TMPE $TMPS