#!/bin/sh
#
# qemu configure script (c) 2003 Fabrice Bellard
#
# set temporary file name
if test ! -z "$TMPDIR" ; then
    TMPDIR1="${TMPDIR}"
elif test ! -z "$TEMPDIR" ; then
    TMPDIR1="${TEMPDIR}"
else
    TMPDIR1="/tmp"
fi

TMPC="${TMPDIR1}/qemu-conf-${RANDOM}-$$-${RANDOM}.c"
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=""
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"

# 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 <<EOF
int main(void) {}
EOF

if $cc $ARCH_CFLAGS -c -o $TMPO $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 <<EOF
#if !defined($1)
#error Not defined
#endif
int main(void) { return 0; }
EOF
  $cc $ARCH_CFLAGS -c -o $TMPO $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"
  ;;
  cris)
    cpu="cris"
  ;;
  parisc|parisc64)
    cpu="hppa"
  ;;
  ia64)
    cpu="ia64"
  ;;
  m68k)
    cpu="m68k"
  ;;
  microblaze)
    cpu="microblaze"
  ;;
  mips)
    cpu="mips"
  ;;
  mips64)
    cpu="mips64"
  ;;
  ppc)
    cpu="ppc"
  ;;
  ppc64)
    cpu="ppc64"
  ;;
  s390*)
    cpu="s390"
  ;;
  sparc|sun4[cdmuv])
    cpu="sparc"
  ;;
  sparc64)
    cpu="sparc64"
  ;;
  *)
    cpu="unknown"
  ;;
esac
gprof="no"
debug_tcg="no"
debug="no"
sparse="no"
strip_opt="yes"
bigendian="no"
mingw32="no"
EXESUF=""
slirp="yes"
vde="yes"
fmod_lib=""
fmod_inc=""
oss_lib=""
vnc_tls="yes"
vnc_sasl="yes"
bsd="no"
linux="no"
solaris="no"
kqemu="no"
profiler="no"
cocoa="no"
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
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"
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"
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"
audio_drv_list="oss"
audio_possible_drivers="oss sdl esd"
oss_lib="-lossaudio"
;;
OpenBSD)
bsd="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
;;
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
    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=$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
  --help|-h) show_help=yes
  ;;
  --prefix=*) prefix="$optarg"
  ;;
  --interp-prefix=*) interp_prefix="$optarg"
  ;;
  --source-path=*) source_path="$optarg"
  source_path_used="yes"
  ;;
  --cross-prefix=*)
  ;;
  --cc=*)
  ;;
  --host-cc=*) host_cc="$optarg"
  ;;
  --make=*) make="$optarg"
  ;;
  --install=*) install="$optarg"
  ;;
  --extra-cflags=*) EXTRA_CFLAGS="$optarg"
  ;;
  --extra-ldflags=*) EXTRA_LDFLAGS="$optarg"
  ;;
  --cpu=*) cpu="$optarg"
  ;;
  --target-list=*) target_list="$optarg"
  ;;
  --enable-gprof) gprof="yes"
  ;;
  --static) static="yes"
  ;;
  --disable-sdl) sdl="no"
  ;;
  --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"
  ;;
  --disable-debug-tcg) debug_tcg="no"
  ;;
  --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"
  ;;
  --disable-slirp) slirp="no"
  ;;
  --disable-vde) vde="no"
  ;;
  --disable-kqemu) kqemu="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

# 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

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"
    oss="no"
    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
    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_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'`
fi
if test -z "$target_list" ; then
    echo "No targets enabled"
    exit 1
fi

if test -z "$cross_prefix" ; then

# ---
# big/little endian test
cat > $TMPC << EOF
#include <inttypes.h>
int main(int argc, char ** argv){
        volatile uint32_t i=0x01234567;
        return (*((uint8_t*)(&i))) == 0x67;
}
EOF

if $cc $ARCH_CFLAGS -o $TMPE $TMPC > /dev/null 2> /dev/null ; then
$TMPE && bigendian="yes"
else
echo big/little test failed
fi

else

# if cross compiling, cannot launch a program, so make a static guess
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

fi

# host long bits test
hostlongbits="32"
if test "$cpu" = "x86_64" \
     -o "$cpu" = "alpha" \
     -o "$cpu" = "ia64" \
     -o "$cpu" = "sparc64" \
     -o "$cpu" = "ppc64"; then
    hostlongbits="64"
fi

# Check host NPTL support
cat > $TMPC <<EOF
#include <sched.h>
#include <linux/futex.h>
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 <zlib.h>
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 <<EOF
#include <xenctrl.h>
#include <xs.h>
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

##########################################
# SDL probe

sdl_too_old=no

if test "$sdl" = "yes" ; then
    sdl_config="sdl-config"
    sdl=no
    sdl_static=no

cat > $TMPC << EOF
#include <SDL.h>
#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

        # 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
    # 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

if test "$sdl" = "yes" ; then
cat > $TMPC <<EOF
#include <SDL.h>
#if defined(SDL_VIDEO_DRIVER_X11)
#include <X11/XKBlib.h>
#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
cat > $TMPC <<EOF
#include <gnutls/gnutls.h>
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

##########################################
# VNC SASL detection
if test "$vnc_sasl" = "yes" ; then
cat > $TMPC <<EOF
#include <sasl/sasl.h>
#include <stdio.h>
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

##########################################
# fnmatch() probe, used for ACL routines
fnmatch="no"
cat > $TMPC << EOF
#include <fnmatch.h>
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

##########################################
# vde libraries probe
if test "$vde" = "yes" ; then
  cat > $TMPC << EOF
#include <libvdeplug.h>
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

##########################################
# Sound support libraries probe

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 <brlapi.h>
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
  ncurses=no
  cat > $TMPC << EOF
#include <curses.h>
#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 <curl/curl.h>
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 <bluetooth/bluetooth.h>
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

##########################################
# kvm probe
if test "$kvm" = "yes" ; then
    cat > $TMPC <<EOF
#include <linux/kvm.h>
#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

##########################################
# pthread probe
PTHREADLIBS_LIST="-lpthread -lpthreadGC2"
PTHREADLIBS=""

if test "$pthread" = yes; then
  pthread=no
cat > $TMPC << EOF
#include <pthread.h>
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

if test "$pthread" = no; then
   aio=no
   io_thread=no
fi

##########################################
# iovec probe
cat > $TMPC <<EOF
#include <sys/types.h>
#include <sys/uio.h>
#include <unistd.h>
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

##########################################
# preadv probe
cat > $TMPC <<EOF
#include <sys/types.h>
#include <sys/uio.h>
#include <unistd.h>
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

#
# 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 <sys/types.h>
#include <fcntl.h>
#include <unistd.h>

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

# 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 <sys/inotify.h>

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

# check if utimensat and futimens are supported
utimens=no
cat > $TMPC << EOF
#define _ATFILE_SOURCE
#define _GNU_SOURCE
#include <stddef.h>
#include <fcntl.h>

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

# check if pipe2 is there
pipe2=no
cat > $TMPC << EOF
#define _GNU_SOURCE
#include <unistd.h>
#include <fcntl.h>

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 <unistd.h>
#include <fcntl.h>
#include <limits.h>

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 <<EOF
#include <signal.h>
#include <time.h>
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    $prefix$datasuffix"
echo "binary directory  $prefix$binsuffix"
if test "$mingw32" = "no" ; then
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
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 "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"
fi
#if test "$sdl_static" = "no"; then
#  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"

#echo "Creating $config_mak and $config_h"

test -f $config_h && mv $config_h ${config_h}~

echo "# Automatically generated by configure - do not modify" > $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
echo "bindir=\${prefix}$binsuffix" >> $config_mak
echo "mandir=\${prefix}$mansuffix" >> $config_mak
echo "datadir=\${prefix}$datasuffix" >> $config_mak
echo "docdir=\${prefix}$docsuffix" >> $config_mak
echo "#define CONFIG_QEMU_SHAREDIR \"$prefix$datasuffix\"" >> $config_h
echo "MAKE=$make" >> $config_mak
echo "INSTALL=$install" >> $config_mak
echo "INSTALL_DIR=$install -d -m0755 -p" >> $config_mak
echo "INSTALL_DATA=$install -m0644 -p" >> $config_mak
echo "INSTALL_PROG=$install -m0755 -p" >> $config_mak
echo "CC=$cc" >> $config_mak
echo "HOST_CC=$host_cc" >> $config_mak
echo "AR=$ar" >> $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 "ARCH_CFLAGS=$ARCH_CFLAGS" >> $config_mak
echo "ARCH_LDFLAGS=$ARCH_LDFLAGS" >> $config_mak
echo "CFLAGS=$CFLAGS $EXTRA_CFLAGS" >> $config_mak
echo "LDFLAGS=$LDFLAGS $EXTRA_LDFLAGS" >> $config_mak
echo "EXESUF=$EXESUF" >> $config_mak
echo "PTHREADLIBS=$PTHREADLIBS" >> $config_mak
echo "CLOCKLIBS=$CLOCKLIBS" >> $config_mak
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
  ;;
  microblaze)
    echo "ARCH=microblaze" >> $config_mak
    echo "#define HOST_MICROBLAZE 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 "$debug_tcg" = "yes" ; then
  echo "#define DEBUG_TCG 1" >> $config_h
fi
if test "$debug" = "yes" ; then
  echo "#define DEBUG_EXEC 1" >> $config_h
fi
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 "$strip_opt" = "yes" ; then
  echo "STRIP_OPT=-s" >> $config_mak
fi
if test "$bigendian" = "yes" ; then
  echo "WORDS_BIGENDIAN=yes" >> $config_mak
  echo "#define WORDS_BIGENDIAN 1" >> $config_h
fi
echo "#define HOST_LONG_BITS $hostlongbits" >> $config_h
if test "$mingw32" = "yes" ; then
  echo "CONFIG_WIN32=y" >> $config_mak
  echo "#define CONFIG_WIN32 1" >> $config_h
else
  cat > $TMPC << EOF
#include <byteswap.h>
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_h
  fi
  cat > $TMPC << EOF
#include <sys/endian.h>
#include <sys/types.h>
#include <machine/bswap.h>
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=y" >> $config_mak
  echo "#define CONFIG_DARWIN 1" >> $config_h
fi

if test "$aix" = "yes" ; then
  echo "CONFIG_AIX=y" >> $config_mak
  echo "#define CONFIG_AIX 1" >> $config_h
fi

if test "$solaris" = "yes" ; then
  echo "CONFIG_SOLARIS=y" >> $config_mak
  echo "#define HOST_SOLARIS $solarisrev" >> $config_h
  if test "$needs_libsunmath" = "yes" ; then
    echo "NEEDS_LIBSUNMATH=yes" >> $config_mak
    echo "#define NEEDS_LIBSUNMATH 1" >> $config_h
  fi
fi
if test -n "$sparc_cpu"; then
  echo "CONFIG__sparc_${sparc_cpu}__=y" >> $config_mak
  echo "#define __sparc_${sparc_cpu}__ 1" >> $config_h
fi
if test "$gprof" = "yes" ; then
  echo "TARGET_GPROF=yes" >> $config_mak
  echo "#define HAVE_GPROF 1" >> $config_h
fi
if test "$static" = "yes" ; then
  echo "CONFIG_STATIC=y" >> $config_mak
  echo "#define CONFIG_STATIC 1" >> $config_h
fi
if test $profiler = "yes" ; then
  echo "#define CONFIG_PROFILER 1" >> $config_h
fi
if test "$slirp" = "yes" ; then
  echo "CONFIG_SLIRP=y" >> $config_mak
  echo "#define CONFIG_SLIRP 1" >> $config_h
fi
if test "$vde" = "yes" ; then
  echo "CONFIG_VDE=y" >> $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=y" >> $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=y" >> $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=y" >> $config_mak
  echo "#define CONFIG_MIXEMU 1" >> $config_h
fi
if test "$vnc_tls" = "yes" ; then
  echo "CONFIG_VNC_TLS=y" >> $config_mak
  echo "CONFIG_VNC_TLS_CFLAGS=$vnc_tls_cflags" >> $config_mak
  echo "CONFIG_VNC_TLS_LIBS=$vnc_tls_libs" >> $config_mak
  echo "#define CONFIG_VNC_TLS 1" >> $config_h
fi
if test "$vnc_sasl" = "yes" ; then
  echo "CONFIG_VNC_SASL=y" >> $config_mak
  echo "CONFIG_VNC_SASL_CFLAGS=$vnc_sasl_cflags" >> $config_mak
  echo "CONFIG_VNC_SASL_LIBS=$vnc_sasl_libs" >> $config_mak
  echo "#define CONFIG_VNC_SASL 1" >> $config_h
fi
if test "$fnmatch" = "yes" ; then
  echo "#define HAVE_FNMATCH_H 1" >> $config_h
fi
qemu_version=`head $source_path/VERSION`
echo "VERSION=$qemu_version" >>$config_mak
echo "#define QEMU_VERSION \"$qemu_version\"" >> $config_h

echo "#define QEMU_PKGVERSION \"$pkgversion\"" >> $config_h

echo "SRC_PATH=$source_path" >> $config_mak
if [ "$source_path_used" = "yes" ]; then
  echo "VPATH=$source_path" >> $config_mak
fi
echo "TARGET_DIRS=$target_list" >> $config_mak
if [ "$build_docs" = "yes" ] ; then
  echo "BUILD_DOCS=yes" >> $config_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_h
  echo "CONFIG_SDL=y" >> $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
  if [ "${aa}" = "yes" ] ; then
    echo "SDL_CFLAGS=`$sdl_config --cflags` `aalib-config --cflags`" >> $config_mak
  else
    echo "SDL_CFLAGS=`$sdl_config --cflags`" >> $config_mak
  fi
fi
if test "$cocoa" = "yes" ; then
  echo "#define CONFIG_COCOA 1" >> $config_h
  echo "CONFIG_COCOA=y" >> $config_mak
fi
if test "$curses" = "yes" ; then
  echo "#define CONFIG_CURSES 1" >> $config_h
  echo "CONFIG_CURSES=y" >> $config_mak
  if test "$ncurses" = "yes" ; then
    echo "CURSES_LIBS=-lncurses" >> $config_mak
  else
    echo "CURSES_LIBS=-lcurses" >> $config_mak
  fi
fi
if test "$atfile" = "yes" ; then
  echo "#define CONFIG_ATFILE 1" >> $config_h
fi
if test "$utimens" = "yes" ; then
  echo "#define CONFIG_UTIMENSAT 1" >> $config_h
fi
if test "$pipe2" = "yes" ; then
  echo "#define CONFIG_PIPE2 1" >> $config_h
fi
if test "$splice" = "yes" ; then
  echo "#define CONFIG_SPLICE 1" >> $config_h
fi
if test "$inotify" = "yes" ; then
  echo "#define CONFIG_INOTIFY 1" >> $config_h
fi
if test "$curl" = "yes" ; then
  echo "CONFIG_CURL=y" >> $config_mak
  echo "CURL_LIBS=$curl_libs" >> $config_mak
  echo "#define CONFIG_CURL 1" >> $config_h
fi
if test "$brlapi" = "yes" ; then
  echo "CONFIG_BRLAPI=y" >> $config_mak
  echo "#define CONFIG_BRLAPI 1" >> $config_h
  echo "BRLAPI_LIBS=-lbrlapi" >> $config_mak
fi
if test "$bluez" = "yes" ; then
  echo "CONFIG_BLUEZ=y" >> $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 "$xen" = "yes" ; then
  echo "XEN_LIBS=-lxenstore -lxenctrl -lxenguest" >> $config_mak
fi
if test "$aio" = "yes" ; then
  echo "#define CONFIG_AIO 1" >> $config_h
  echo "CONFIG_AIO=y" >> $config_mak
fi
if test "$io_thread" = "yes" ; then
  echo "CONFIG_IOTHREAD=y" >> $config_mak
  echo "#define CONFIG_IOTHREAD 1" >> $config_h
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 "$preadv" = "yes" ; then
  echo "#define HAVE_PREADV 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
if [ "$bsd" = "yes" ] ; then
  echo "#define O_LARGEFILE 0" >> $config_h
  echo "#define MAP_ANONYMOUS MAP_ANON" >> $config_h
  echo "#define HOST_BSD 1" >> $config_h
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

# 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_mak
    echo "ARLIBS_END=-Wl,--no-whole-archive" >> $config_mak
elif check_linker_flags -z,allextract -z,defaultextract ; then
    # Solaris ld
    echo "ARLIBS_BEGIN=-Wl,-z,allextract" >> $config_mak
    echo "ARLIBS_END=-Wl,-z,defaultextract" >> $config_mak
elif check_linker_flags -all_load ; then
    # Mac OS X
    echo "ARLIBS_BEGIN=-all_load" >> $config_mak
    echo "ARLIBS_END=" >> $config_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_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"
  fi
fi
echo "TOOLS=$tools" >> $config_mak

roms=
if test "$cpu" = "i386" -o "$cpu" = "x86_64" ; then
  roms="pc-bios/optionrom"
fi
echo "ROMS=$roms" >> $config_mak

if test -f ${config_h}~ ; then
  if cmp -s $config_h ${config_h}~ ; then
    mv ${config_h}~ $config_h
  else
    rm ${config_h}~
  fi
fi

config_host_mak=${config_mak}

for target in $target_list; do
target_dir="$target"
config_mak=$target_dir/config.mak
config_h=$target_dir/config.h
target_arch2=`echo $target | cut -d '-' -f 1`
target_bigendian="no"
[ "$target_arch2" = "armeb" ] && target_bigendian=yes
[ "$target_arch2" = "m68k" ] && target_bigendian=yes
[ "$target_arch2" = "microblaze" ] && target_bigendian=yes
[ "$target_arch2" = "mips" ] && target_bigendian=yes
[ "$target_arch2" = "mipsn32" ] && target_bigendian=yes
[ "$target_arch2" = "mips64" ] && target_bigendian=yes
[ "$target_arch2" = "ppc" ] && target_bigendian=yes
[ "$target_arch2" = "ppcemb" ] && target_bigendian=yes
[ "$target_arch2" = "ppc64" ] && target_bigendian=yes
[ "$target_arch2" = "ppc64abi32" ] && target_bigendian=yes
[ "$target_arch2" = "sh4eb" ] && target_bigendian=yes
[ "$target_arch2" = "sparc" ] && target_bigendian=yes
[ "$target_arch2" = "sparc64" ] && target_bigendian=yes
[ "$target_arch2" = "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_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
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

#
# 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 "include ../config-host.mak" >> $config_mak
echo "#include \"../config-host.h\"" >> $config_h

bflt="no"
elfload32="no"
target_nptl="no"
interp_prefix1=`echo "$interp_prefix" | sed "s/%M/$target_arch2/g"`
echo "#define CONFIG_QEMU_PREFIX \"$interp_prefix1\"" >> $config_h
gdb_xml_files=""
target_kvm="$kvm"

# Make sure the target and host cpus are compatible
if test ! \( "$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
  target_kvm="no"
fi
# Disable KVM for linux-user
if test "$target_softmmu" = "no" ; then
  target_kvm="no"
fi

case "$target_arch2" 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 "CONFIG_KQEMU=y" >> $config_mak
      echo "#define CONFIG_KQEMU 1" >> $config_h
    fi
    if test "$target_kvm" = "yes" ; then
      echo "CONFIG_KVM=y" >> $config_mak
      echo "KVM_CFLAGS=$kvm_cflags" >> $config_mak
      echo "#define CONFIG_KVM 1" >> $config_h
    fi
    if test "$xen" = "yes" -a "$target_softmmu" = "yes";
    then
      echo "CONFIG_XEN=y" >> $config_mak
      echo "#define CONFIG_XEN 1" >> $config_h
    fi
    target_phys_bits=32
  ;;
  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 "CONFIG_KQEMU=y" >> $config_mak
      echo "#define CONFIG_KQEMU 1" >> $config_h
    fi
    if test "$target_kvm" = "yes" ; then
      echo "CONFIG_KVM=y" >> $config_mak
      echo "KVM_CFLAGS=$kvm_cflags" >> $config_mak
      echo "#define CONFIG_KVM 1" >> $config_h
    fi
    if test "$xen" = "yes" -a "$target_softmmu" = "yes"
    then
      echo "CONFIG_XEN=y" >> $config_mak
      echo "#define CONFIG_XEN 1" >> $config_h
    fi
    target_phys_bits=64
  ;;
  alpha)
    echo "TARGET_ARCH=alpha" >> $config_mak
    echo "#define TARGET_ARCH \"alpha\"" >> $config_h
    echo "#define TARGET_ALPHA 1" >> $config_h
    target_phys_bits=64
  ;;
  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"
    target_phys_bits=32
  ;;
  cris)
    echo "TARGET_ARCH=cris" >> $config_mak
    echo "#define TARGET_ARCH \"cris\"" >> $config_h
    echo "#define TARGET_CRIS 1" >> $config_h
    target_nptl="yes"
    target_phys_bits=32
  ;;
  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"
    target_phys_bits=32
  ;;
  microblaze)
    echo "TARGET_ARCH=microblaze" >> $config_mak
    echo "#define TARGET_ARCH \"microblaze\"" >> $config_h
    echo "#define TARGET_MICROBLAZE 1" >> $config_h
    bflt="yes"
    target_nptl="yes"
    target_phys_bits=32
  ;;
 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
    target_nptl="yes"
    target_phys_bits=64
  ;;
  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
    target_phys_bits=64
  ;;
  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
    target_phys_bits=64
  ;;
  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"
    target_phys_bits=32
  ;;
  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 "$target_kvm" = "yes" ; then
      echo "CONFIG_KVM=y" >> $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"
    target_phys_bits=64
  ;;
  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"
    target_phys_bits=64
  ;;
  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"
    target_phys_bits=64
  ;;
  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"
    target_phys_bits=32
  ;;
  sparc)
    echo "TARGET_ARCH=sparc" >> $config_mak
    echo "#define TARGET_ARCH \"sparc\"" >> $config_h
    echo "#define TARGET_SPARC 1" >> $config_h
    target_phys_bits=64
  ;;
  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"
    target_phys_bits=64
  ;;
  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
    target_phys_bits=64
  ;;
  *)
    echo "Unsupported target CPU"
    exit 1
  ;;
esac
if [ $target_phys_bits -lt $hostlongbits ] ; then
  target_phys_bits=$hostlongbits
fi
echo "HWLIB=../libhw$target_phys_bits/libqemuhw$target_phys_bits.a" >> $config_mak
echo "#define TARGET_PHYS_ADDR_BITS $target_phys_bits" >> $config_h
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
fi
if test "$target_softmmu" = "yes" ; then
  echo "CONFIG_SOFTMMU=y" >> $config_mak
  echo "#define CONFIG_SOFTMMU 1" >> $config_h
fi
if test "$target_user_only" = "yes" ; then
  echo "CONFIG_USER_ONLY=y" >> $config_mak
  echo "#define CONFIG_USER_ONLY 1" >> $config_h
fi
if test "$target_linux_user" = "yes" ; then
  echo "CONFIG_LINUX_USER=y" >> $config_mak
  echo "#define CONFIG_LINUX_USER 1" >> $config_h
fi
if test "$target_darwin_user" = "yes" ; then
  echo "CONFIG_DARWIN_USER=y" >> $config_mak
  echo "#define CONFIG_DARWIN_USER 1" >> $config_h
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

if test "$target_arch2" = "arm" \
     -o "$target_arch2" = "armeb" \
     -o "$target_arch2" = "m68k" \
     -o "$target_arch2" = "microblaze" \
     -o "$target_arch2" = "mips" \
     -o "$target_arch2" = "mipsel" \
     -o "$target_arch2" = "mipsn32" \
     -o "$target_arch2" = "mipsn32el" \
     -o "$target_arch2" = "mips64" \
     -o "$target_arch2" = "mips64el" \
     -o "$target_arch2" = "ppc" \
     -o "$target_arch2" = "ppc64" \
     -o "$target_arch2" = "ppc64abi32" \
     -o "$target_arch2" = "ppcemb" \
     -o "$target_arch2" = "sparc" \
     -o "$target_arch2" = "sparc64" \
     -o "$target_arch2" = "sparc32plus"; then
  echo "CONFIG_SOFTFLOAT=y" >> $config_mak
  echo "#define CONFIG_SOFTFLOAT 1" >> $config_h
fi
if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
  echo "TARGET_HAS_BFLT=y" >> $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=y" >> $config_mak
  echo "#define TARGET_HAS_ELFLOAD32 1" >> $config_h
fi
if test "$target_bsd_user" = "yes" ; then
  echo "CONFIG_BSD_USER=y" >> $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

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 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
        rm -f $f
        ln -s $source_path/$f $f
    done
fi

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
