xref: /openbmc/qemu/configure (revision cdba95bd96ae74557b8af89c6c1d75c3aebf6f81)
1#!/bin/sh
2#
3# qemu configure script (c) 2003 Fabrice Bellard
4#
5# set temporary file name
6if test ! -z "$TMPDIR" ; then
7    TMPDIR1="${TMPDIR}"
8elif test ! -z "$TEMPDIR" ; then
9    TMPDIR1="${TEMPDIR}"
10else
11    TMPDIR1="/tmp"
12fi
13
14TMPC="${TMPDIR1}/qemu-conf-${RANDOM}-$$-${RANDOM}.c"
15TMPO="${TMPDIR1}/qemu-conf-${RANDOM}-$$-${RANDOM}.o"
16TMPE="${TMPDIR1}/qemu-conf-${RANDOM}-$$-${RANDOM}"
17TMPS="${TMPDIR1}/qemu-conf-${RANDOM}-$$-${RANDOM}.S"
18TMPI="${TMPDIR1}/qemu-conf-${RANDOM}-$$-${RANDOM}.i"
19
20# default parameters
21prefix=""
22interp_prefix="/usr/gnemul/qemu-%M"
23static="no"
24cross_prefix=""
25cc="gcc"
26gcc3_search="yes"
27gcc3_list="gcc-3.4.6 gcc-3.4 gcc34 gcc-3.3.6 gcc-3.3 gcc33 gcc-3.2 gcc32"
28audio_drv_list=""
29audio_card_list=""
30host_cc="gcc"
31ar="ar"
32make="make"
33install="install"
34strip="strip"
35cpu=`test $(uname -s) = AIX && uname -p || uname -m`
36target_list=""
37case "$cpu" in
38  i386|i486|i586|i686|i86pc|BePC)
39    cpu="i386"
40  ;;
41  x86_64|amd64)
42    cpu="x86_64"
43  ;;
44  alpha)
45    cpu="alpha"
46  ;;
47  armv*b)
48    cpu="armv4b"
49  ;;
50  armv*l)
51    cpu="armv4l"
52  ;;
53  cris)
54    cpu="cris"
55  ;;
56  parisc|parisc64)
57    cpu="hppa"
58  ;;
59  ia64)
60    cpu="ia64"
61  ;;
62  m68k)
63    cpu="m68k"
64  ;;
65  mips)
66    cpu="mips"
67  ;;
68  mips64)
69    cpu="mips64"
70  ;;
71  "Power Macintosh"|ppc|ppc64|powerpc)
72    cpu="powerpc"
73  ;;
74  s390*)
75    cpu="s390"
76  ;;
77  sparc|sun4[cdmuv])
78    cpu="sparc"
79  ;;
80  sparc64)
81    cpu="sparc64"
82  ;;
83  *)
84    cpu="unknown"
85  ;;
86esac
87gprof="no"
88sparse="no"
89bigendian="no"
90mingw32="no"
91EXESUF=""
92gdbstub="yes"
93slirp="yes"
94vde="yes"
95fmod_lib=""
96fmod_inc=""
97oss_lib=""
98vnc_tls="yes"
99bsd="no"
100linux="no"
101solaris="no"
102kqemu="no"
103profiler="no"
104cocoa="no"
105check_gfx="yes"
106check_gcc="yes"
107softmmu="yes"
108linux_user="no"
109darwin_user="no"
110bsd_user="no"
111build_docs="no"
112uname_release=""
113curses="yes"
114aio="yes"
115nptl="yes"
116mixemu="no"
117bluez="yes"
118kvm="yes"
119kerneldir=""
120aix="no"
121
122# OS specific
123targetos=`uname -s`
124case $targetos in
125CYGWIN*)
126mingw32="yes"
127OS_CFLAGS="-mno-cygwin"
128if [ "$cpu" = "i386" ] ; then
129    kqemu="yes"
130fi
131audio_possible_drivers="sdl"
132;;
133MINGW32*)
134mingw32="yes"
135if [ "$cpu" = "i386" ] ; then
136    kqemu="yes"
137fi
138audio_possible_drivers="dsound sdl fmod"
139;;
140GNU/kFreeBSD)
141audio_drv_list="oss"
142audio_possible_drivers="oss sdl esd pa"
143if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then
144    kqemu="yes"
145fi
146;;
147FreeBSD)
148bsd="yes"
149audio_drv_list="oss"
150audio_possible_drivers="oss sdl esd pa"
151aiolib="-lpthread"
152if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then
153    kqemu="yes"
154fi
155;;
156NetBSD)
157bsd="yes"
158audio_drv_list="oss"
159audio_possible_drivers="oss sdl esd"
160oss_lib="-lossaudio"
161aio_lib="-lrt -lpthread"
162;;
163OpenBSD)
164bsd="yes"
165openbsd="yes"
166audio_drv_list="oss"
167audio_possible_drivers="oss sdl esd"
168oss_lib="-lossaudio"
169aio_lib="-lpthread"
170;;
171Darwin)
172bsd="yes"
173darwin="yes"
174darwin_user="yes"
175cocoa="yes"
176audio_drv_list="coreaudio"
177audio_possible_drivers="coreaudio sdl fmod"
178OS_CFLAGS="-mdynamic-no-pic"
179OS_LDFLAGS="-framework CoreFoundation -framework IOKit"
180aio_lib="-lpthread"
181;;
182SunOS)
183    solaris="yes"
184    make="gmake"
185    install="ginstall"
186    needs_libsunmath="no"
187    solarisrev=`uname -r | cut -f2 -d.`
188    # have to select again, because `uname -m` returns i86pc
189    # even on an x86_64 box.
190    solariscpu=`isainfo -k`
191    if test "${solariscpu}" = "amd64" ; then
192        cpu="x86_64"
193    fi
194    if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then
195        if test "$solarisrev" -le 9 ; then
196            if test -f /opt/SUNWspro/prod/lib/libsunmath.so.1; then
197                needs_libsunmath="yes"
198            else
199                echo "QEMU will not link correctly on Solaris 8/X86 or 9/x86 without"
200                echo "libsunmath from the Sun Studio compilers tools, due to a lack of"
201                echo "C99 math features in libm.so in Solaris 8/x86 and Solaris 9/x86"
202                echo "Studio 11 can be downloaded from www.sun.com."
203                exit 1
204            fi
205        fi
206        if test "$solarisrev" -ge 9 ; then
207            kqemu="yes"
208        fi
209    fi
210    if test -f /usr/include/sys/soundcard.h ; then
211        audio_drv_list="oss"
212    fi
213    audio_possible_drivers="oss sdl"
214;;
215AIX)
216aix="yes"
217make="gmake"
218;;
219*)
220audio_drv_list="oss"
221audio_possible_drivers="oss alsa sdl esd pa"
222linux="yes"
223linux_user="yes"
224if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then
225    kqemu="yes"
226    audio_possible_drivers="$audio_possible_drivers fmod"
227fi
228;;
229esac
230
231if [ "$bsd" = "yes" ] ; then
232  if [ "$darwin" != "yes" ] ; then
233    make="gmake"
234  fi
235  bsd_user="yes"
236fi
237
238# find source path
239source_path=`dirname "$0"`
240source_path_used="no"
241workdir=`pwd`
242if [ -z "$source_path" ]; then
243    source_path=$workdir
244else
245    source_path=`cd "$source_path"; pwd`
246fi
247[ -f "$workdir/vl.c" ] || source_path_used="yes"
248
249werror="no"
250# generate compile errors on warnings for development builds
251#if grep cvs $source_path/VERSION > /dev/null 2>&1 ; then
252#werror="yes";
253#fi
254
255for opt do
256  optarg=`expr "x$opt" : 'x[^=]*=\(.*\)'`
257  case "$opt" in
258  --help|-h) show_help=yes
259  ;;
260  --prefix=*) prefix="$optarg"
261  ;;
262  --interp-prefix=*) interp_prefix="$optarg"
263  ;;
264  --source-path=*) source_path="$optarg"
265  source_path_used="yes"
266  ;;
267  --cross-prefix=*) cross_prefix="$optarg"
268  ;;
269  --cc=*) cc="$optarg"
270  gcc3_search="no"
271  ;;
272  --host-cc=*) host_cc="$optarg"
273  ;;
274  --make=*) make="$optarg"
275  ;;
276  --install=*) install="$optarg"
277  ;;
278  --extra-cflags=*) CFLAGS="$optarg"
279  ;;
280  --extra-ldflags=*) LDFLAGS="$optarg"
281  ;;
282  --cpu=*) cpu="$optarg"
283  ;;
284  --target-list=*) target_list="$optarg"
285  ;;
286  --enable-gprof) gprof="yes"
287  ;;
288  --static) static="yes"
289  ;;
290  --disable-sdl) sdl="no"
291  ;;
292  --fmod-lib=*) fmod_lib="$optarg"
293  ;;
294  --fmod-inc=*) fmod_inc="$optarg"
295  ;;
296  --oss-lib=*) oss_lib="$optarg"
297  ;;
298  --audio-card-list=*) audio_card_list=`echo "$optarg" | sed -e 's/,/ /g'`
299  ;;
300  --audio-drv-list=*) audio_drv_list="$optarg"
301  ;;
302  --enable-sparse) sparse="yes"
303  ;;
304  --disable-sparse) sparse="no"
305  ;;
306  --disable-vnc-tls) vnc_tls="no"
307  ;;
308  --disable-slirp) slirp="no"
309  ;;
310  --disable-vde) vde="no"
311  ;;
312  --disable-kqemu) kqemu="no"
313  ;;
314  --disable-brlapi) brlapi="no"
315  ;;
316  --disable-bluez) bluez="no"
317  ;;
318  --disable-kvm) kvm="no"
319  ;;
320  --enable-profiler) profiler="yes"
321  ;;
322  --enable-cocoa)
323      cocoa="yes" ;
324      sdl="no" ;
325      audio_drv_list="coreaudio `echo $audio_drv_list | sed s,coreaudio,,g`"
326  ;;
327  --disable-gfx-check) check_gfx="no"
328  ;;
329  --disable-gcc-check) check_gcc="no"
330  ;;
331  --disable-system) softmmu="no"
332  ;;
333  --enable-system) softmmu="yes"
334  ;;
335  --disable-linux-user) linux_user="no"
336  ;;
337  --enable-linux-user) linux_user="yes"
338  ;;
339  --disable-darwin-user) darwin_user="no"
340  ;;
341  --enable-darwin-user) darwin_user="yes"
342  ;;
343  --disable-bsd-user) bsd_user="no"
344  ;;
345  --enable-bsd-user) bsd_user="yes"
346  ;;
347  --enable-uname-release=*) uname_release="$optarg"
348  ;;
349  --sparc_cpu=*)
350      sparc_cpu="$optarg"
351      case $sparc_cpu in
352        v7|v8) SP_CFLAGS="-m32 -mcpu=${sparc_cpu} -D__sparc_${sparc_cpu}__"; SP_LDFLAGS="-m32"
353                 target_cpu="sparc"; cpu="sparc" ;;
354        v8plus|v8plusa) SP_CFLAGS="-m32 -mcpu=ultrasparc -D__sparc_${sparc_cpu}__"; SP_LDFLAGS="-m32"
355                 target_cpu="sparc"; cpu="sparc" ;;
356        v9)    SP_CFLAGS="-m64 -mcpu=ultrasparc -D__sparc_${sparc_cpu}__"; SP_LDFLAGS="-m64"
357                 target_cpu="sparc64"; cpu="sparc64" ;;
358        *)     echo "undefined SPARC architecture. Exiting";exit 1;;
359      esac
360  ;;
361  --enable-werror) werror="yes"
362  ;;
363  --disable-werror) werror="no"
364  ;;
365  --disable-curses) curses="no"
366  ;;
367  --disable-nptl) nptl="no"
368  ;;
369  --enable-mixemu) mixemu="yes"
370  ;;
371  --disable-aio) aio="no"
372  ;;
373  --kerneldir=*) kerneldir="$optarg"
374  ;;
375  *) echo "ERROR: unknown option $opt"; show_help="yes"
376  ;;
377  esac
378done
379
380# default flags for all hosts
381CFLAGS="$CFLAGS -O2 -g -fno-strict-aliasing"
382CFLAGS="$CFLAGS -Wall -Wundef -Wendif-labels -Wwrite-strings"
383LDFLAGS="$LDFLAGS -g"
384if test "$werror" = "yes" ; then
385CFLAGS="$CFLAGS -Werror"
386fi
387
388if test "$solaris" = "no" ; then
389    if ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
390        LDFLAGS="$LDFLAGS -Wl,--warn-common"
391    fi
392fi
393
394#
395# If cpu ~= sparc and  sparc_cpu hasn't been defined, plug in the right
396# ARCH_CFLAGS/ARCH_LDFLAGS (assume sparc_v8plus for 32-bit and sparc_v9 for 64-bit)
397#
398case "$cpu" in
399    sparc) if test -z "$sparc_cpu" ; then
400               ARCH_CFLAGS="-m32 -mcpu=ultrasparc -D__sparc_v8plus__"
401               ARCH_LDFLAGS="-m32"
402           else
403               ARCH_CFLAGS="${SP_CFLAGS}"
404               ARCH_LDFLAGS="${SP_LDFLAGS}"
405           fi
406           ;;
407    sparc64) if test -z "$sparc_cpu" ; then
408               ARCH_CFLAGS="-m64 -mcpu=ultrasparc -D__sparc_v9__"
409               ARCH_LDFLAGS="-m64"
410           else
411               ARCH_CFLAGS="${SP_CFLAGS}"
412               ARCH_LDFLAGS="${SP_LDFLAGS}"
413           fi
414           ;;
415    s390)
416           ARCH_CFLAGS="-march=z900"
417           ;;
418    i386)
419           ARCH_CFLAGS="-m32"
420           ARCH_LDFLAGS="-m32"
421           ;;
422    x86_64)
423           ARCH_CFLAGS="-m64"
424           ARCH_LDFLAGS="-m64"
425           ;;
426esac
427
428if test x"$show_help" = x"yes" ; then
429cat << EOF
430
431Usage: configure [options]
432Options: [defaults in brackets after descriptions]
433
434EOF
435echo "Standard options:"
436echo "  --help                   print this message"
437echo "  --prefix=PREFIX          install in PREFIX [$prefix]"
438echo "  --interp-prefix=PREFIX   where to find shared libraries, etc."
439echo "                           use %M for cpu name [$interp_prefix]"
440echo "  --target-list=LIST       set target list [$target_list]"
441echo ""
442echo "kqemu kernel acceleration support:"
443echo "  --disable-kqemu          disable kqemu support"
444echo ""
445echo "Advanced options (experts only):"
446echo "  --source-path=PATH       path of source code [$source_path]"
447echo "  --cross-prefix=PREFIX    use PREFIX for compile tools [$cross_prefix]"
448echo "  --cc=CC                  use C compiler CC [$cc]"
449echo "  --host-cc=CC             use C compiler CC [$host_cc] for dyngen etc."
450echo "  --make=MAKE              use specified make [$make]"
451echo "  --install=INSTALL        use specified install [$install]"
452echo "  --static                 enable static build [$static]"
453echo "  --enable-sparse          enable sparse checker"
454echo "  --disable-sparse         disable sparse checker (default)"
455echo "  --disable-werror         disable compilation abort on warning"
456echo "  --disable-sdl            disable SDL"
457echo "  --enable-cocoa           enable COCOA (Mac OS X only)"
458echo "  --audio-drv-list=LIST    set audio drivers list:"
459echo "                           Available drivers: $audio_possible_drivers"
460echo "  --audio-card-list=LIST   set list of additional emulated audio cards"
461echo "                           Available cards: ac97 adlib cs4231a gus"
462echo "  --enable-mixemu          enable mixer emulation"
463echo "  --disable-brlapi         disable BrlAPI"
464echo "  --disable-vnc-tls        disable TLS encryption for VNC server"
465echo "  --disable-curses         disable curses output"
466echo "  --disable-bluez          disable bluez stack connectivity"
467echo "  --disable-kvm            disable KVM acceleration support"
468echo "  --disable-nptl           disable usermode NPTL support"
469echo "  --enable-system          enable all system emulation targets"
470echo "  --disable-system         disable all system emulation targets"
471echo "  --enable-linux-user      enable all linux usermode emulation targets"
472echo "  --disable-linux-user     disable all linux usermode emulation targets"
473echo "  --enable-darwin-user     enable all darwin usermode emulation targets"
474echo "  --disable-darwin-user    disable all darwin usermode emulation targets"
475echo "  --enable-bsd-user        enable all BSD usermode emulation targets"
476echo "  --disable-bsd-user       disable all BSD usermode emulation targets"
477echo "  --fmod-lib               path to FMOD library"
478echo "  --fmod-inc               path to FMOD includes"
479echo "  --oss-lib                path to OSS library"
480echo "  --enable-uname-release=R Return R for uname -r in usermode emulation"
481echo "  --sparc_cpu=V            Build qemu for Sparc architecture v7, v8, v8plus, v8plusa, v9"
482echo "  --disable-vde            disable support for vde network"
483echo "  --disable-aio            disable AIO support"
484echo "  --kerneldir=PATH         look for kernel includes in PATH"
485echo ""
486echo "NOTE: The object files are built at the place where configure is launched"
487exit 1
488fi
489
490cc="${cross_prefix}${cc}"
491ar="${cross_prefix}${ar}"
492strip="${cross_prefix}${strip}"
493
494# check that the C compiler works.
495cat > $TMPC <<EOF
496int main(void) {}
497EOF
498
499if $cc $ARCH_CFLAGS -c -o $TMPO $TMPC 2> /dev/null ; then
500  : C compiler works ok
501else
502    echo "ERROR: \"$cc\" either does not exist or does not work"
503    exit 1
504fi
505
506# check compiler to see if we're on mingw32
507cat > $TMPC <<EOF
508#include <windows.h>
509#ifndef _WIN32
510#error not windows
511#endif
512int main(void) {}
513EOF
514
515if $cc $ARCH_CFLAGS -c -o $TMPO $TMPC 2> /dev/null ; then
516    mingw32="yes"
517fi
518
519if test "$mingw32" = "yes" ; then
520    linux="no"
521    EXESUF=".exe"
522    oss="no"
523    linux_user="no"
524    bsd_user="no"
525fi
526
527if [ "$darwin" = "yes" -o "$mingw32" = "yes" ] ; then
528    AIOLIBS=
529elif [ "$bsd" = "yes" ]; then
530    AIOLIBS="$aio_lib"
531else
532    # Some Linux architectures (e.g. s390) don't imply -lpthread automatically.
533    AIOLIBS="-lrt -lpthread"
534fi
535
536# Check for gcc4, error if pre-gcc4
537if test "$check_gcc" = "yes" ; then
538    cat > $TMPC <<EOF
539#if __GNUC__ < 4
540#error gcc3
541#endif
542int main(){return 0;}
543EOF
544    if "$cc" $ARCH_CFLAGS -o $TMPE $TMPC 2> /dev/null ; then
545	echo "WARNING: \"$cc\" looks like gcc 4.x"
546	found_compat_cc="no"
547	if test "$gcc3_search" = "yes" ; then
548	    echo "Looking for gcc 3.x"
549	    for compat_cc in $gcc3_list ; do
550		if "$cross_prefix$compat_cc" --version 2> /dev/null | fgrep '(GCC) 3.' > /dev/null 2>&1 ; then
551		    echo "Found \"$compat_cc\""
552		    cc="$cross_prefix$compat_cc"
553		    found_compat_cc="yes"
554		    break
555		fi
556	    done
557	    if test "$found_compat_cc" = "no" ; then
558		echo "gcc 3.x not found!"
559	    fi
560	fi
561	if test "$found_compat_cc" = "no" ; then
562	    echo "QEMU is known to have problems when compiled with gcc 4.x"
563	    echo "It is recommended that you use gcc 3.x to build QEMU"
564	    echo "To use this compiler anyway, configure with --disable-gcc-check"
565	    exit 1;
566	fi
567    fi
568fi
569
570if test ! -x "$(which cgcc 2>/dev/null)"; then
571    sparse="no"
572fi
573
574#
575# Solaris specific configure tool chain decisions
576#
577if test "$solaris" = "yes" ; then
578  #
579  # gcc for solaris 10/fcs in /usr/sfw/bin doesn't compile qemu correctly
580  # override the check with --disable-gcc-check
581  #
582  if test "$solarisrev" -eq 10 -a "$check_gcc" = "yes" ; then
583    solgcc=`which $cc`
584    if test "$solgcc" = "/usr/sfw/bin/gcc" ; then
585      echo "Solaris 10/FCS gcc in /usr/sfw/bin will not compiled qemu correctly."
586      echo "please get gcc-3.4.3 or later, from www.blastwave.org using pkg-get -i gcc3"
587      echo "or get the latest patch from SunSolve for gcc"
588      exit 1
589    fi
590  fi
591  solinst=`which $install 2> /dev/null | /usr/bin/grep -v "no $install in"`
592  if test -z "$solinst" ; then
593    echo "Solaris install program not found. Use --install=/usr/ucb/install or"
594    echo "install fileutils from www.blastwave.org using pkg-get -i fileutils"
595    echo "to get ginstall which is used by default (which lives in /opt/csw/bin)"
596    exit 1
597  fi
598  if test "$solinst" = "/usr/sbin/install" ; then
599    echo "Error: Solaris /usr/sbin/install is not an appropriate install program."
600    echo "try ginstall from the GNU fileutils available from www.blastwave.org"
601    echo "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
602    exit 1
603  fi
604  sol_ar=`which ar 2> /dev/null | /usr/bin/grep -v "no ar in"`
605  if test -z "$sol_ar" ; then
606    echo "Error: No path includes ar"
607    if test -f /usr/ccs/bin/ar ; then
608      echo "Add /usr/ccs/bin to your path and rerun configure"
609    fi
610    exit 1
611  fi
612fi
613
614
615if test -z "$target_list" ; then
616# these targets are portable
617    if [ "$softmmu" = "yes" ] ; then
618        target_list="\
619i386-softmmu \
620x86_64-softmmu \
621arm-softmmu \
622cris-softmmu \
623m68k-softmmu \
624mips-softmmu \
625mipsel-softmmu \
626mips64-softmmu \
627mips64el-softmmu \
628ppc-softmmu \
629ppcemb-softmmu \
630ppc64-softmmu \
631sh4-softmmu \
632sh4eb-softmmu \
633sparc-softmmu \
634"
635    fi
636# the following are Linux specific
637    if [ "$linux_user" = "yes" ] ; then
638        target_list="${target_list}\
639i386-linux-user \
640x86_64-linux-user \
641alpha-linux-user \
642arm-linux-user \
643armeb-linux-user \
644cris-linux-user \
645m68k-linux-user \
646mips-linux-user \
647mipsel-linux-user \
648ppc-linux-user \
649ppc64-linux-user \
650ppc64abi32-linux-user \
651sh4-linux-user \
652sh4eb-linux-user \
653sparc-linux-user \
654sparc64-linux-user \
655sparc32plus-linux-user \
656"
657    fi
658# the following are Darwin specific
659    if [ "$darwin_user" = "yes" ] ; then
660        target_list="$target_list i386-darwin-user ppc-darwin-user"
661    fi
662# the following are BSD specific
663    if [ "$bsd_user" = "yes" ] ; then
664        target_list="${target_list}\
665sparc64-bsd-user \
666"
667    fi
668else
669    target_list=`echo "$target_list" | sed -e 's/,/ /g'`
670fi
671if test -z "$target_list" ; then
672    echo "No targets enabled"
673    exit 1
674fi
675
676if test -z "$cross_prefix" ; then
677
678# ---
679# big/little endian test
680cat > $TMPC << EOF
681#include <inttypes.h>
682int main(int argc, char ** argv){
683        volatile uint32_t i=0x01234567;
684        return (*((uint8_t*)(&i))) == 0x67;
685}
686EOF
687
688if $cc $ARCH_CFLAGS -o $TMPE $TMPC 2> /dev/null ; then
689$TMPE && bigendian="yes"
690else
691echo big/little test failed
692fi
693
694else
695
696# if cross compiling, cannot launch a program, so make a static guess
697if test "$cpu" = "armv4b" \
698     -o "$cpu" = "hppa" \
699     -o "$cpu" = "m68k" \
700     -o "$cpu" = "mips" \
701     -o "$cpu" = "mips64" \
702     -o "$cpu" = "powerpc" \
703     -o "$cpu" = "s390" \
704     -o "$cpu" = "sparc" \
705     -o "$cpu" = "sparc64"; then
706    bigendian="yes"
707fi
708
709fi
710
711# host long bits test
712hostlongbits="32"
713if test "$cpu" = "x86_64" \
714     -o "$cpu" = "alpha" \
715     -o "$cpu" = "ia64" \
716     -o "$cpu" = "sparc64"; then
717    hostlongbits="64"
718fi
719
720# ppc specific hostlongbits selection
721if test "$cpu" = "powerpc" ; then
722    if $cc $ARCH_CFLAGS -dM -E - -o $TMPI 2>/dev/null </dev/null; then
723        grep -q __powerpc64__ $TMPI && hostlongbits=64
724    else
725        echo hostlongbits test failed
726        exit 1
727    fi
728fi
729
730# check gcc options support
731cat > $TMPC <<EOF
732int main(void) {
733}
734EOF
735
736# Check host NPTL support
737cat > $TMPC <<EOF
738#include <sched.h>
739#include <linux/futex.h>
740void foo()
741{
742#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
743#error bork
744#endif
745}
746EOF
747
748if $cc $ARCH_CFLAGS -c -o $TMPO $TMPC 2> /dev/null ; then
749  :
750else
751   nptl="no"
752fi
753
754##########################################
755# zlib check
756
757cat > $TMPC << EOF
758#include <zlib.h>
759int main(void) { zlibVersion(); return 0; }
760EOF
761if $cc $ARCH_CFLAGS -o $TMPE ${OS_CFLAGS} $TMPC -lz 2> /dev/null ; then
762    :
763else
764    echo
765    echo "Error: zlib check failed"
766    echo "Make sure to have the zlib libs and headers installed."
767    echo
768    exit 1
769fi
770
771##########################################
772# SDL probe
773
774sdl_too_old=no
775
776if test -z "$sdl" ; then
777    sdl_config="sdl-config"
778    sdl=no
779    sdl_static=no
780
781cat > $TMPC << EOF
782#include <SDL.h>
783#undef main /* We don't want SDL to override our main() */
784int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
785EOF
786    if $cc $ARCH_CFLAGS -o $TMPE ${OS_CFLAGS} `$sdl_config --cflags 2> /dev/null` $TMPC `$sdl_config --libs 2> /dev/null` 2> /tmp/qemu-$$-sdl-config.log ; then
787        _sdlversion=`$sdl_config --version | sed 's/[^0-9]//g'`
788        if test "$_sdlversion" -lt 121 ; then
789            sdl_too_old=yes
790        else
791            if test "$cocoa" = "no" ; then
792                sdl=yes
793            fi
794        fi
795
796        # static link with sdl ?
797        if test "$sdl" = "yes" ; then
798            aa="no"
799            `$sdl_config --static-libs 2>/dev/null | grep \\\-laa > /dev/null` && aa="yes"
800            sdl_static_libs=`$sdl_config --static-libs 2>/dev/null`
801            if [ "$aa" = "yes" ] ; then
802                sdl_static_libs="$sdl_static_libs `aalib-config --static-libs`"
803            fi
804
805            if $cc -o $TMPE ${OS_CFLAGS} `$sdl_config --cflags 2> /dev/null` $TMPC $sdl_static_libs 2> /dev/null; then
806                sdl_static=yes
807            fi
808        fi # static link
809    fi # sdl compile test
810else
811    # Make sure to disable cocoa if sdl was set
812    if test "$sdl" = "yes" ; then
813       cocoa="no"
814       audio_drv_list="`echo $audio_drv_list | sed s,coreaudio,,g`"
815    fi
816fi # -z $sdl
817
818##########################################
819# VNC TLS detection
820if test "$vnc_tls" = "yes" ; then
821cat > $TMPC <<EOF
822#include <gnutls/gnutls.h>
823int main(void) { gnutls_session_t s; gnutls_init(&s, GNUTLS_SERVER); return 0; }
824EOF
825    vnc_tls_cflags=`pkg-config --cflags gnutls 2> /dev/null`
826    vnc_tls_libs=`pkg-config --libs gnutls 2> /dev/null`
827    if $cc $ARCH_CFLAGS -o $TMPE ${OS_CFLAGS} $vnc_tls_cflags $TMPC \
828           $vnc_tls_libs 2> /dev/null ; then
829	:
830    else
831	vnc_tls="no"
832    fi
833fi
834
835##########################################
836# vde libraries probe
837if test "$vde" = "yes" ; then
838  cat > $TMPC << EOF
839#include <libvdeplug.h>
840int main(void)
841{
842    struct vde_open_args a = {0, 0, 0};
843    vde_open("", "", &a);
844    return 0;
845}
846EOF
847    if $cc $ARCH_CFLAGS -o $TMPE $TMPC -lvdeplug 2> /dev/null ; then
848        :
849    else
850        vde="no"
851    fi
852fi
853
854##########################################
855# Sound support libraries probe
856
857audio_drv_probe()
858{
859    drv=$1
860    hdr=$2
861    lib=$3
862    exp=$4
863    cfl=$5
864        cat > $TMPC << EOF
865#include <$hdr>
866int main(void) { $exp }
867EOF
868    if $cc $ARCH_CFLAGS $cfl -o $TMPE $TMPC $lib 2> /dev/null ; then
869        :
870    else
871        echo
872        echo "Error: $drv check failed"
873        echo "Make sure to have the $drv libs and headers installed."
874        echo
875        exit 1
876    fi
877}
878
879audio_drv_list=`echo "$audio_drv_list" | sed -e 's/,/ /g'`
880for drv in $audio_drv_list; do
881    case $drv in
882    alsa)
883    audio_drv_probe $drv alsa/asoundlib.h -lasound \
884        "snd_pcm_t **handle; return snd_pcm_close(*handle);"
885    ;;
886
887    fmod)
888    if test -z $fmod_lib || test -z $fmod_inc; then
889        echo
890        echo "Error: You must specify path to FMOD library and headers"
891        echo "Example: --fmod-inc=/path/include/fmod --fmod-lib=/path/lib/libfmod-3.74.so"
892        echo
893        exit 1
894    fi
895    audio_drv_probe $drv fmod.h $fmod_lib "return FSOUND_GetVersion();" "-I $fmod_inc"
896    ;;
897
898    esd)
899    audio_drv_probe $drv esd.h -lesd 'return esd_play_stream(0, 0, "", 0);'
900    ;;
901
902    pa)
903    audio_drv_probe $drv pulse/simple.h -lpulse-simple \
904        "pa_simple *s = NULL; pa_simple_free(s); return 0;"
905    ;;
906
907    oss|sdl|core|wav|dsound)
908    # XXX: Probes for CoreAudio, DirectSound, SDL(?)
909    ;;
910
911    *)
912    echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
913        echo
914        echo "Error: Unknown driver '$drv' selected"
915        echo "Possible drivers are: $audio_possible_drivers"
916        echo
917        exit 1
918    }
919    ;;
920    esac
921done
922
923##########################################
924# BrlAPI probe
925
926if test -z "$brlapi" ; then
927    brlapi=no
928cat > $TMPC << EOF
929#include <brlapi.h>
930int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
931EOF
932    if $cc ${ARCH_CFLAGS} -o $TMPE ${OS_CFLAGS} $TMPC -lbrlapi 2> /dev/null ; then
933	    brlapi=yes
934    fi # brlapi compile test
935fi # -z $brlapi
936
937##########################################
938# curses probe
939
940if test "$curses" = "yes" ; then
941  curses=no
942  cat > $TMPC << EOF
943#include <curses.h>
944int main(void) { return curses_version(); }
945EOF
946  if $cc $ARCH_CFLAGS -o $TMPE $TMPC -lcurses 2> /dev/null ; then
947    curses=yes
948  fi
949fi # test "$curses"
950
951##########################################
952# bluez support probe
953if test "$bluez" = "yes" ; then
954  `pkg-config bluez` || bluez="no"
955fi
956if test "$bluez" = "yes" ; then
957  cat > $TMPC << EOF
958#include <bluetooth/bluetooth.h>
959int main(void) { return bt_error(0); }
960EOF
961  bluez_cflags=`pkg-config --cflags bluez`
962  bluez_libs=`pkg-config --libs bluez`
963  if $cc $ARCH_CFLAGS -o $TMPE ${OS_CFLAGS} $bluez_cflags $TMPC \
964      $bluez_libs 2> /dev/null ; then
965    :
966  else
967    bluez="no"
968  fi
969fi
970
971##########################################
972# kvm probe
973if test "$kvm" = "yes" ; then
974    cat > $TMPC <<EOF
975#include <linux/kvm.h>
976#if !defined(KVM_API_VERSION) || \
977    KVM_API_VERSION < 12 || \
978    KVM_API_VERSION > 12 || \
979    !defined(KVM_CAP_USER_MEMORY) || \
980    !defined(KVM_CAP_SET_TSS_ADDR)
981#error Invalid KVM version
982#endif
983int main(void) { return 0; }
984EOF
985  if test "$kerneldir" != "" ; then
986      kvm_cflags=-I"$kerneldir"/include
987  else
988      kvm_cflags=""
989  fi
990  if $cc $ARCH_CFLAGS -o $TMPE ${OS_CFLAGS} $kvm_cflags $TMPC \
991      2>/dev/null ; then
992    :
993  else
994    kvm="no"
995  fi
996fi
997
998##########################################
999# AIO probe
1000if test "$aio" = "yes" ; then
1001  aio=no
1002  cat > $TMPC << EOF
1003#include <aio.h>
1004int main(void) { return aio_write(NULL); }
1005EOF
1006  if $cc $ARCH_CFLAGS -o $TMPE $AIOLIBS $TMPC 2> /dev/null ; then
1007    aio=yes
1008  fi
1009fi
1010
1011# Check if tools are available to build documentation.
1012if [ -x "`which texi2html 2>/dev/null`" ] && \
1013   [ -x "`which pod2man 2>/dev/null`" ]; then
1014  build_docs="yes"
1015fi
1016
1017if test "$mingw32" = "yes" ; then
1018  if test -z "$prefix" ; then
1019      prefix="c:\\\\Program Files\\\\Qemu"
1020  fi
1021  mansuffix=""
1022  datasuffix=""
1023  docsuffix=""
1024  binsuffix=""
1025else
1026  if test -z "$prefix" ; then
1027      prefix="/usr/local"
1028  fi
1029  mansuffix="/share/man"
1030  datasuffix="/share/qemu"
1031  docsuffix="/share/doc/qemu"
1032  binsuffix="/bin"
1033fi
1034
1035echo "Install prefix    $prefix"
1036echo "BIOS directory    $prefix$datasuffix"
1037echo "binary directory  $prefix$binsuffix"
1038if test "$mingw32" = "no" ; then
1039echo "Manual directory  $prefix$mansuffix"
1040echo "ELF interp prefix $interp_prefix"
1041fi
1042echo "Source path       $source_path"
1043echo "C compiler        $cc"
1044echo "Host C compiler   $host_cc"
1045echo "ARCH_CFLAGS       $ARCH_CFLAGS"
1046echo "make              $make"
1047echo "install           $install"
1048echo "host CPU          $cpu"
1049echo "host big endian   $bigendian"
1050echo "target list       $target_list"
1051echo "gprof enabled     $gprof"
1052echo "sparse enabled    $sparse"
1053echo "profiler          $profiler"
1054echo "static build      $static"
1055echo "-Werror enabled   $werror"
1056if test "$darwin" = "yes" ; then
1057    echo "Cocoa support     $cocoa"
1058fi
1059echo "SDL support       $sdl"
1060if test "$sdl" != "no" ; then
1061    echo "SDL static link   $sdl_static"
1062fi
1063echo "curses support    $curses"
1064echo "mingw32 support   $mingw32"
1065echo "Audio drivers     $audio_drv_list"
1066echo "Extra audio cards $audio_card_list"
1067echo "Mixer emulation   $mixemu"
1068echo "VNC TLS support   $vnc_tls"
1069if test "$vnc_tls" = "yes" ; then
1070    echo "    TLS CFLAGS    $vnc_tls_cflags"
1071    echo "    TLS LIBS      $vnc_tls_libs"
1072fi
1073if test -n "$sparc_cpu"; then
1074    echo "Target Sparc Arch $sparc_cpu"
1075fi
1076echo "kqemu support     $kqemu"
1077echo "brlapi support    $brlapi"
1078echo "Documentation     $build_docs"
1079[ ! -z "$uname_release" ] && \
1080echo "uname -r          $uname_release"
1081echo "NPTL support      $nptl"
1082echo "vde support       $vde"
1083echo "AIO support       $aio"
1084echo "KVM support       $kvm"
1085
1086if test $sdl_too_old = "yes"; then
1087echo "-> Your SDL version is too old - please upgrade to have SDL support"
1088fi
1089if [ -s /tmp/qemu-$$-sdl-config.log ]; then
1090  echo "The error log from compiling the libSDL test is: "
1091  cat /tmp/qemu-$$-sdl-config.log
1092fi
1093rm -f /tmp/qemu-$$-sdl-config.log
1094#if test "$sdl_static" = "no"; then
1095#  echo "WARNING: cannot compile statically with SDL - qemu-fast won't have a graphical output"
1096#fi
1097config_mak="config-host.mak"
1098config_h="config-host.h"
1099
1100#echo "Creating $config_mak and $config_h"
1101
1102test -f $config_h && mv $config_h ${config_h}~
1103
1104echo "# Automatically generated by configure - do not modify" > $config_mak
1105echo "# Configured with: $0 $@" >> $config_mak
1106echo "/* Automatically generated by configure - do not modify */" > $config_h
1107
1108echo "prefix=$prefix" >> $config_mak
1109echo "bindir=\${prefix}$binsuffix" >> $config_mak
1110echo "mandir=\${prefix}$mansuffix" >> $config_mak
1111echo "datadir=\${prefix}$datasuffix" >> $config_mak
1112echo "docdir=\${prefix}$docsuffix" >> $config_mak
1113echo "#define CONFIG_QEMU_SHAREDIR \"$prefix$datasuffix\"" >> $config_h
1114echo "MAKE=$make" >> $config_mak
1115echo "INSTALL=$install" >> $config_mak
1116echo "CC=$cc" >> $config_mak
1117echo "HOST_CC=$host_cc" >> $config_mak
1118echo "AR=$ar" >> $config_mak
1119echo "STRIP=$strip -s -R .comment -R .note" >> $config_mak
1120# XXX: only use CFLAGS and LDFLAGS ?
1121# XXX: should export HOST_CFLAGS and HOST_LDFLAGS for cross
1122# compilation of dyngen tool (useful for win32 build on Linux host)
1123echo "OS_CFLAGS=$OS_CFLAGS" >> $config_mak
1124echo "OS_LDFLAGS=$OS_LDFLAGS" >> $config_mak
1125echo "ARCH_CFLAGS=$ARCH_CFLAGS" >> $config_mak
1126echo "ARCH_LDFLAGS=$ARCH_LDFLAGS" >> $config_mak
1127echo "CFLAGS=$CFLAGS" >> $config_mak
1128echo "LDFLAGS=$LDFLAGS" >> $config_mak
1129echo "EXESUF=$EXESUF" >> $config_mak
1130echo "AIOLIBS=$AIOLIBS" >> $config_mak
1131case "$cpu" in
1132  i386)
1133    echo "ARCH=i386" >> $config_mak
1134    echo "#define HOST_I386 1" >> $config_h
1135  ;;
1136  x86_64)
1137    echo "ARCH=x86_64" >> $config_mak
1138    echo "#define HOST_X86_64 1" >> $config_h
1139  ;;
1140  alpha)
1141    echo "ARCH=alpha" >> $config_mak
1142    echo "#define HOST_ALPHA 1" >> $config_h
1143  ;;
1144  armv4b)
1145    echo "ARCH=arm" >> $config_mak
1146    echo "#define HOST_ARM 1" >> $config_h
1147  ;;
1148  armv4l)
1149    echo "ARCH=arm" >> $config_mak
1150    echo "#define HOST_ARM 1" >> $config_h
1151  ;;
1152  cris)
1153    echo "ARCH=cris" >> $config_mak
1154    echo "#define HOST_CRIS 1" >> $config_h
1155  ;;
1156  hppa)
1157    echo "ARCH=hppa" >> $config_mak
1158    echo "#define HOST_HPPA 1" >> $config_h
1159  ;;
1160  ia64)
1161    echo "ARCH=ia64" >> $config_mak
1162    echo "#define HOST_IA64 1" >> $config_h
1163  ;;
1164  m68k)
1165    echo "ARCH=m68k" >> $config_mak
1166    echo "#define HOST_M68K 1" >> $config_h
1167  ;;
1168  mips)
1169    echo "ARCH=mips" >> $config_mak
1170    echo "#define HOST_MIPS 1" >> $config_h
1171  ;;
1172  mips64)
1173    echo "ARCH=mips64" >> $config_mak
1174    echo "#define HOST_MIPS64 1" >> $config_h
1175  ;;
1176  powerpc)
1177  if test "$hostlongbits" = "32"; then
1178      echo "ARCH=ppc" >> $config_mak
1179      echo "#define HOST_PPC 1" >> $config_h
1180  else
1181      echo "ARCH=ppc64" >> $config_mak
1182      echo "#define HOST_PPC64 1" >> $config_h
1183  fi
1184  ;;
1185  s390)
1186    echo "ARCH=s390" >> $config_mak
1187    echo "#define HOST_S390 1" >> $config_h
1188  ;;
1189  sparc)
1190    echo "ARCH=sparc" >> $config_mak
1191    echo "#define HOST_SPARC 1" >> $config_h
1192  ;;
1193  sparc64)
1194    echo "ARCH=sparc64" >> $config_mak
1195    echo "#define HOST_SPARC64 1" >> $config_h
1196  ;;
1197  *)
1198    echo "Unsupported CPU = $cpu"
1199    exit 1
1200  ;;
1201esac
1202if test "$sparse" = "yes" ; then
1203  echo "CC      := REAL_CC=\"\$(CC)\" cgcc"       >> $config_mak
1204  echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc"  >> $config_mak
1205  echo "CFLAGS  += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_mak
1206fi
1207if test "$bigendian" = "yes" ; then
1208  echo "WORDS_BIGENDIAN=yes" >> $config_mak
1209  echo "#define WORDS_BIGENDIAN 1" >> $config_h
1210fi
1211echo "#define HOST_LONG_BITS $hostlongbits" >> $config_h
1212if test "$mingw32" = "yes" ; then
1213  echo "CONFIG_WIN32=yes" >> $config_mak
1214  echo "#define CONFIG_WIN32 1" >> $config_h
1215else
1216  cat > $TMPC << EOF
1217#include <byteswap.h>
1218int main(void) { return bswap_32(0); }
1219EOF
1220  if $cc $ARCH_CFLAGS -o $TMPE $TMPC 2> /dev/null ; then
1221    echo "#define HAVE_BYTESWAP_H 1" >> $config_h
1222  fi
1223fi
1224
1225if [ "$openbsd" = "yes" ] ; then
1226  echo "#define ENOTSUP 4096" >> $config_h
1227fi
1228
1229if test "$darwin" = "yes" ; then
1230  echo "CONFIG_DARWIN=yes" >> $config_mak
1231  echo "#define CONFIG_DARWIN 1" >> $config_h
1232fi
1233
1234if test "$aix" = "yes" ; then
1235  echo "CONFIG_AIX=yes" >> $config_mak
1236  echo "#define CONFIG_AIX 1" >> $config_h
1237fi
1238
1239if test "$solaris" = "yes" ; then
1240  echo "CONFIG_SOLARIS=yes" >> $config_mak
1241  echo "#define HOST_SOLARIS $solarisrev" >> $config_h
1242  if test "$needs_libsunmath" = "yes" ; then
1243    echo "NEEDS_LIBSUNMATH=yes" >> $config_mak
1244    echo "#define NEEDS_LIBSUNMATH 1" >> $config_h
1245  fi
1246fi
1247if test -n "$sparc_cpu"; then
1248  echo "CONFIG__sparc_${sparc_cpu}__=yes" >> $config_mak
1249  echo "#define __sparc_${sparc_cpu}__ 1" >> $config_h
1250fi
1251if test "$gdbstub" = "yes" ; then
1252  echo "CONFIG_GDBSTUB=yes" >> $config_mak
1253  echo "#define CONFIG_GDBSTUB 1" >> $config_h
1254fi
1255if test "$gprof" = "yes" ; then
1256  echo "TARGET_GPROF=yes" >> $config_mak
1257  echo "#define HAVE_GPROF 1" >> $config_h
1258fi
1259if test "$static" = "yes" ; then
1260  echo "CONFIG_STATIC=yes" >> $config_mak
1261  echo "#define CONFIG_STATIC 1" >> $config_h
1262fi
1263if test $profiler = "yes" ; then
1264  echo "#define CONFIG_PROFILER 1" >> $config_h
1265fi
1266if test "$slirp" = "yes" ; then
1267  echo "CONFIG_SLIRP=yes" >> $config_mak
1268  echo "#define CONFIG_SLIRP 1" >> $config_h
1269fi
1270if test "$vde" = "yes" ; then
1271  echo "CONFIG_VDE=yes" >> $config_mak
1272  echo "#define CONFIG_VDE 1" >> $config_h
1273  echo "VDE_LIBS=-lvdeplug" >> $config_mak
1274fi
1275for card in $audio_card_list; do
1276    def=CONFIG_`echo $card | tr '[:lower:]' '[:upper:]'`
1277    echo "$def=yes" >> $config_mak
1278    echo "#define $def 1" >> $config_h
1279done
1280echo "#define AUDIO_DRIVERS \\" >> $config_h
1281for drv in $audio_drv_list; do
1282    echo "    &${drv}_audio_driver, \\" >>$config_h
1283    def=CONFIG_`echo $drv | tr '[:lower:]' '[:upper:]'`
1284    echo "$def=yes" >> $config_mak
1285    if test "$drv" = "fmod"; then
1286        echo "CONFIG_FMOD_LIB=$fmod_lib" >> $config_mak
1287        echo "CONFIG_FMOD_INC=$fmod_inc" >> $config_mak
1288    elif test "$drv" = "oss"; then
1289        echo "CONFIG_OSS_LIB=$oss_lib" >> $config_mak
1290    fi
1291done
1292echo "" >>$config_h
1293if test "$mixemu" = "yes" ; then
1294  echo "CONFIG_MIXEMU=yes" >> $config_mak
1295  echo "#define CONFIG_MIXEMU 1" >> $config_h
1296fi
1297if test "$vnc_tls" = "yes" ; then
1298  echo "CONFIG_VNC_TLS=yes" >> $config_mak
1299  echo "CONFIG_VNC_TLS_CFLAGS=$vnc_tls_cflags" >> $config_mak
1300  echo "CONFIG_VNC_TLS_LIBS=$vnc_tls_libs" >> $config_mak
1301  echo "#define CONFIG_VNC_TLS 1" >> $config_h
1302fi
1303qemu_version=`head $source_path/VERSION`
1304echo "VERSION=$qemu_version" >>$config_mak
1305echo "#define QEMU_VERSION \"$qemu_version\"" >> $config_h
1306
1307echo "SRC_PATH=$source_path" >> $config_mak
1308if [ "$source_path_used" = "yes" ]; then
1309  echo "VPATH=$source_path" >> $config_mak
1310fi
1311echo "TARGET_DIRS=$target_list" >> $config_mak
1312if [ "$build_docs" = "yes" ] ; then
1313  echo "BUILD_DOCS=yes" >> $config_mak
1314fi
1315if test "$static" = "yes"; then
1316  sdl1=$sdl_static
1317else
1318  sdl1=$sdl
1319fi
1320if test "$sdl1" = "yes" ; then
1321  echo "#define CONFIG_SDL 1" >> $config_h
1322  echo "CONFIG_SDL=yes" >> $config_mak
1323  if test "$target_softmmu" = "no" -o "$static" = "yes"; then
1324    echo "SDL_LIBS=$sdl_static_libs" >> $config_mak
1325  else
1326    echo "SDL_LIBS=`$sdl_config --libs`" >> $config_mak
1327  fi
1328  if [ "${aa}" = "yes" ] ; then
1329    echo "SDL_CFLAGS=`$sdl_config --cflags` `aalib-config --cflags`" >> $config_mak
1330  else
1331    echo "SDL_CFLAGS=`$sdl_config --cflags`" >> $config_mak
1332  fi
1333fi
1334if test "$cocoa" = "yes" ; then
1335  echo "#define CONFIG_COCOA 1" >> $config_h
1336  echo "CONFIG_COCOA=yes" >> $config_mak
1337fi
1338if test "$curses" = "yes" ; then
1339  echo "#define CONFIG_CURSES 1" >> $config_h
1340  echo "CONFIG_CURSES=yes" >> $config_mak
1341  echo "CURSES_LIBS=-lcurses" >> $config_mak
1342fi
1343if test "$brlapi" = "yes" ; then
1344  echo "CONFIG_BRLAPI=yes" >> $config_mak
1345  echo "#define CONFIG_BRLAPI 1" >> $config_h
1346  echo "BRLAPI_LIBS=-lbrlapi" >> $config_mak
1347fi
1348if test "$bluez" = "yes" ; then
1349  echo "CONFIG_BLUEZ=yes" >> $config_mak
1350  echo "CONFIG_BLUEZ_CFLAGS=$bluez_cflags" >> $config_mak
1351  echo "CONFIG_BLUEZ_LIBS=$bluez_libs" >> $config_mak
1352  echo "#define CONFIG_BLUEZ 1" >> $config_h
1353fi
1354if test "$aio" = "yes" ; then
1355  echo "#define CONFIG_AIO 1" >> $config_h
1356  echo "CONFIG_AIO=yes" >> $config_mak
1357fi
1358
1359# XXX: suppress that
1360if [ "$bsd" = "yes" ] ; then
1361  echo "#define O_LARGEFILE 0" >> $config_h
1362  echo "#define MAP_ANONYMOUS MAP_ANON" >> $config_h
1363  echo "#define _BSD 1" >> $config_h
1364fi
1365
1366echo "#define CONFIG_UNAME_RELEASE \"$uname_release\"" >> $config_h
1367
1368tools=
1369if test `expr "$target_list" : ".*softmmu.*"` != 0 ; then
1370  tools="qemu-img\$(EXESUF) $tools"
1371  if [ "$linux" = "yes" ] ; then
1372      tools="qemu-nbd\$(EXESUF) $tools"
1373  fi
1374fi
1375echo "TOOLS=$tools" >> $config_mak
1376
1377test -f ${config_h}~ && cmp -s $config_h ${config_h}~ && mv ${config_h}~ $config_h
1378
1379for target in $target_list; do
1380target_dir="$target"
1381config_mak=$target_dir/config.mak
1382config_h=$target_dir/config.h
1383target_cpu=`echo $target | cut -d '-' -f 1`
1384target_bigendian="no"
1385[ "$target_cpu" = "armeb" ] && target_bigendian=yes
1386[ "$target_cpu" = "m68k" ] && target_bigendian=yes
1387[ "$target_cpu" = "mips" ] && target_bigendian=yes
1388[ "$target_cpu" = "mipsn32" ] && target_bigendian=yes
1389[ "$target_cpu" = "mips64" ] && target_bigendian=yes
1390[ "$target_cpu" = "ppc" ] && target_bigendian=yes
1391[ "$target_cpu" = "ppcemb" ] && target_bigendian=yes
1392[ "$target_cpu" = "ppc64" ] && target_bigendian=yes
1393[ "$target_cpu" = "ppc64abi32" ] && target_bigendian=yes
1394[ "$target_cpu" = "sh4eb" ] && target_bigendian=yes
1395[ "$target_cpu" = "sparc" ] && target_bigendian=yes
1396[ "$target_cpu" = "sparc64" ] && target_bigendian=yes
1397[ "$target_cpu" = "sparc32plus" ] && target_bigendian=yes
1398target_softmmu="no"
1399target_user_only="no"
1400target_linux_user="no"
1401target_darwin_user="no"
1402target_bsd_user="no"
1403case "$target" in
1404  ${target_cpu}-softmmu)
1405    target_softmmu="yes"
1406    ;;
1407  ${target_cpu}-linux-user)
1408    target_user_only="yes"
1409    target_linux_user="yes"
1410    ;;
1411  ${target_cpu}-darwin-user)
1412    target_user_only="yes"
1413    target_darwin_user="yes"
1414    ;;
1415  ${target_cpu}-bsd-user)
1416    target_user_only="yes"
1417    target_bsd_user="yes"
1418    ;;
1419  *)
1420    echo "ERROR: Target '$target' not recognised"
1421    exit 1
1422    ;;
1423esac
1424
1425if test "$target_user_only" = "no" -a "$check_gfx" = "yes" \
1426        -a "$sdl" = "no" -a "$cocoa" = "no" ; then
1427    echo "ERROR: QEMU requires SDL or Cocoa for graphical output"
1428    echo "To build QEMU without graphical output configure with --disable-gfx-check"
1429    echo "Note that this will disable all output from the virtual graphics card"
1430    echo "except through VNC or curses."
1431    exit 1;
1432fi
1433
1434#echo "Creating $config_mak, $config_h and $target_dir/Makefile"
1435
1436test -f $config_h && mv $config_h ${config_h}~
1437
1438mkdir -p $target_dir
1439mkdir -p $target_dir/fpu
1440mkdir -p $target_dir/tcg
1441if test "$target" = "arm-linux-user" -o "$target" = "armeb-linux-user" -o "$target" = "arm-bsd-user" -o "$target" = "armeb-bsd-user" ; then
1442  mkdir -p $target_dir/nwfpe
1443fi
1444
1445#
1446# don't use ln -sf as not all "ln -sf" over write the file/link
1447#
1448rm -f $target_dir/Makefile
1449ln -s $source_path/Makefile.target $target_dir/Makefile
1450
1451
1452echo "# Automatically generated by configure - do not modify" > $config_mak
1453echo "/* Automatically generated by configure - do not modify */" > $config_h
1454
1455
1456echo "include ../config-host.mak" >> $config_mak
1457echo "#include \"../config-host.h\"" >> $config_h
1458
1459bflt="no"
1460elfload32="no"
1461target_nptl="no"
1462interp_prefix1=`echo "$interp_prefix" | sed "s/%M/$target_cpu/g"`
1463echo "#define CONFIG_QEMU_PREFIX \"$interp_prefix1\"" >> $config_h
1464gdb_xml_files=""
1465
1466# Make sure the target and host cpus are compatible
1467if test "$kvm" = "yes" -a ! \( "$target_cpu" = "$cpu" -o \
1468  \( "$target_cpu" = "x86_64" -a "$cpu" = "i386"   \) -o \
1469  \( "$target_cpu" = "i386"   -a "$cpu" = "x86_64" \) \) ; then
1470  kvm="no"
1471fi
1472# Disable KVM for linux-user
1473if test "$kvm" = "yes" -a "$target_softmmu" = "no" ; then
1474  kvm="no"
1475fi
1476
1477case "$target_cpu" in
1478  i386)
1479    echo "TARGET_ARCH=i386" >> $config_mak
1480    echo "#define TARGET_ARCH \"i386\"" >> $config_h
1481    echo "#define TARGET_I386 1" >> $config_h
1482    if test $kqemu = "yes" -a "$target_softmmu" = "yes"
1483    then
1484      echo "#define USE_KQEMU 1" >> $config_h
1485    fi
1486    if test "$kvm" = "yes" ; then
1487      echo "CONFIG_KVM=yes" >> $config_mak
1488      echo "KVM_CFLAGS=$kvm_cflags" >> $config_mak
1489      echo "#define CONFIG_KVM 1" >> $config_h
1490    fi
1491    gcc3minver=`$cc --version 2> /dev/null| fgrep "(GCC) 3." | awk '{ print $3 }' | cut -f2 -d.`
1492    if test -n "$gcc3minver" && test $gcc3minver -gt 3
1493    then
1494      echo "HAVE_GT_GCC_3_3=true" >> $config_mak
1495    else
1496      echo "HAVE_GT_GCC_3_3=false" >> $config_mak
1497    fi
1498  ;;
1499  x86_64)
1500    echo "TARGET_ARCH=x86_64" >> $config_mak
1501    echo "#define TARGET_ARCH \"x86_64\"" >> $config_h
1502    echo "#define TARGET_I386 1" >> $config_h
1503    echo "#define TARGET_X86_64 1" >> $config_h
1504    if test $kqemu = "yes" -a "$target_softmmu" = "yes" -a $cpu = "x86_64"
1505    then
1506      echo "#define USE_KQEMU 1" >> $config_h
1507    fi
1508    if test "$kvm" = "yes" ; then
1509      echo "CONFIG_KVM=yes" >> $config_mak
1510      echo "KVM_CFLAGS=$kvm_cflags" >> $config_mak
1511      echo "#define CONFIG_KVM 1" >> $config_h
1512    fi
1513  ;;
1514  alpha)
1515    echo "TARGET_ARCH=alpha" >> $config_mak
1516    echo "#define TARGET_ARCH \"alpha\"" >> $config_h
1517    echo "#define TARGET_ALPHA 1" >> $config_h
1518  ;;
1519  arm|armeb)
1520    echo "TARGET_ARCH=arm" >> $config_mak
1521    echo "#define TARGET_ARCH \"arm\"" >> $config_h
1522    echo "#define TARGET_ARM 1" >> $config_h
1523    bflt="yes"
1524    target_nptl="yes"
1525    gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
1526  ;;
1527  cris)
1528    echo "TARGET_ARCH=cris" >> $config_mak
1529    echo "#define TARGET_ARCH \"cris\"" >> $config_h
1530    echo "#define TARGET_CRIS 1" >> $config_h
1531  ;;
1532  m68k)
1533    echo "TARGET_ARCH=m68k" >> $config_mak
1534    echo "#define TARGET_ARCH \"m68k\"" >> $config_h
1535    echo "#define TARGET_M68K 1" >> $config_h
1536    bflt="yes"
1537    gdb_xml_files="cf-core.xml cf-fp.xml"
1538  ;;
1539  mips|mipsel)
1540    echo "TARGET_ARCH=mips" >> $config_mak
1541    echo "#define TARGET_ARCH \"mips\"" >> $config_h
1542    echo "#define TARGET_MIPS 1" >> $config_h
1543    echo "#define TARGET_ABI_MIPSO32 1" >> $config_h
1544  ;;
1545  mipsn32|mipsn32el)
1546    echo "TARGET_ARCH=mipsn32" >> $config_mak
1547    echo "#define TARGET_ARCH \"mipsn32\"" >> $config_h
1548    echo "#define TARGET_MIPS 1" >> $config_h
1549    echo "#define TARGET_ABI_MIPSN32 1" >> $config_h
1550  ;;
1551  mips64|mips64el)
1552    echo "TARGET_ARCH=mips64" >> $config_mak
1553    echo "#define TARGET_ARCH \"mips64\"" >> $config_h
1554    echo "#define TARGET_MIPS 1" >> $config_h
1555    echo "#define TARGET_MIPS64 1" >> $config_h
1556    echo "#define TARGET_ABI_MIPSN64 1" >> $config_h
1557  ;;
1558  ppc)
1559    echo "TARGET_ARCH=ppc" >> $config_mak
1560    echo "CONFIG_DYNGEN_OP=yes" >> $config_mak
1561    echo "#define TARGET_ARCH \"ppc\"" >> $config_h
1562    echo "#define TARGET_PPC 1" >> $config_h
1563    echo "#define CONFIG_DYNGEN_OP 1" >> $config_h
1564  ;;
1565  ppcemb)
1566    echo "TARGET_ARCH=ppcemb" >> $config_mak
1567    echo "TARGET_ABI_DIR=ppc" >> $config_mak
1568    echo "CONFIG_DYNGEN_OP=yes" >> $config_mak
1569    echo "#define TARGET_ARCH \"ppcemb\"" >> $config_h
1570    echo "#define TARGET_PPC 1" >> $config_h
1571    echo "#define TARGET_PPCEMB 1" >> $config_h
1572    echo "#define CONFIG_DYNGEN_OP 1" >> $config_h
1573  ;;
1574  ppc64)
1575    echo "TARGET_ARCH=ppc64" >> $config_mak
1576    echo "TARGET_ABI_DIR=ppc" >> $config_mak
1577    echo "CONFIG_DYNGEN_OP=yes" >> $config_mak
1578    echo "#define TARGET_ARCH \"ppc64\"" >> $config_h
1579    echo "#define TARGET_PPC 1" >> $config_h
1580    echo "#define TARGET_PPC64 1" >> $config_h
1581    echo "#define CONFIG_DYNGEN_OP 1" >> $config_h
1582  ;;
1583  ppc64abi32)
1584    echo "TARGET_ARCH=ppc64" >> $config_mak
1585    echo "TARGET_ABI_DIR=ppc" >> $config_mak
1586    echo "TARGET_ARCH2=ppc64abi32" >> $config_mak
1587    echo "CONFIG_DYNGEN_OP=yes" >> $config_mak
1588    echo "#define TARGET_ARCH \"ppc64\"" >> $config_h
1589    echo "#define TARGET_PPC 1" >> $config_h
1590    echo "#define TARGET_PPC64 1" >> $config_h
1591    echo "#define TARGET_ABI32 1" >> $config_h
1592    echo "#define CONFIG_DYNGEN_OP 1" >> $config_h
1593  ;;
1594  sh4|sh4eb)
1595    echo "TARGET_ARCH=sh4" >> $config_mak
1596    echo "#define TARGET_ARCH \"sh4\"" >> $config_h
1597    echo "#define TARGET_SH4 1" >> $config_h
1598    bflt="yes"
1599    target_nptl="yes"
1600  ;;
1601  sparc)
1602    echo "TARGET_ARCH=sparc" >> $config_mak
1603    echo "#define TARGET_ARCH \"sparc\"" >> $config_h
1604    echo "#define TARGET_SPARC 1" >> $config_h
1605  ;;
1606  sparc64)
1607    echo "TARGET_ARCH=sparc64" >> $config_mak
1608    echo "#define TARGET_ARCH \"sparc64\"" >> $config_h
1609    echo "#define TARGET_SPARC 1" >> $config_h
1610    echo "#define TARGET_SPARC64 1" >> $config_h
1611    elfload32="yes"
1612  ;;
1613  sparc32plus)
1614    echo "TARGET_ARCH=sparc64" >> $config_mak
1615    echo "TARGET_ABI_DIR=sparc" >> $config_mak
1616    echo "TARGET_ARCH2=sparc32plus" >> $config_mak
1617    echo "#define TARGET_ARCH \"sparc64\"" >> $config_h
1618    echo "#define TARGET_SPARC 1" >> $config_h
1619    echo "#define TARGET_SPARC64 1" >> $config_h
1620    echo "#define TARGET_ABI32 1" >> $config_h
1621  ;;
1622  *)
1623    echo "Unsupported target CPU"
1624    exit 1
1625  ;;
1626esac
1627if test "$target_bigendian" = "yes" ; then
1628  echo "TARGET_WORDS_BIGENDIAN=yes" >> $config_mak
1629  echo "#define TARGET_WORDS_BIGENDIAN 1" >> $config_h
1630fi
1631if test "$target_softmmu" = "yes" ; then
1632  echo "CONFIG_SOFTMMU=yes" >> $config_mak
1633  echo "#define CONFIG_SOFTMMU 1" >> $config_h
1634fi
1635if test "$target_user_only" = "yes" ; then
1636  echo "CONFIG_USER_ONLY=yes" >> $config_mak
1637  echo "#define CONFIG_USER_ONLY 1" >> $config_h
1638fi
1639if test "$target_linux_user" = "yes" ; then
1640  echo "CONFIG_LINUX_USER=yes" >> $config_mak
1641  echo "#define CONFIG_LINUX_USER 1" >> $config_h
1642fi
1643if test "$target_darwin_user" = "yes" ; then
1644  echo "CONFIG_DARWIN_USER=yes" >> $config_mak
1645  echo "#define CONFIG_DARWIN_USER 1" >> $config_h
1646fi
1647list=""
1648if test ! -z "$gdb_xml_files" ; then
1649  for x in $gdb_xml_files; do
1650    list="$list $source_path/gdb-xml/$x"
1651  done
1652fi
1653echo "TARGET_XML_FILES=$list" >> $config_mak
1654
1655if test "$target_cpu" = "arm" \
1656     -o "$target_cpu" = "armeb" \
1657     -o "$target_cpu" = "m68k" \
1658     -o "$target_cpu" = "mips" \
1659     -o "$target_cpu" = "mipsel" \
1660     -o "$target_cpu" = "mipsn32" \
1661     -o "$target_cpu" = "mipsn32el" \
1662     -o "$target_cpu" = "mips64" \
1663     -o "$target_cpu" = "mips64el" \
1664     -o "$target_cpu" = "sparc" \
1665     -o "$target_cpu" = "sparc64" \
1666     -o "$target_cpu" = "sparc32plus"; then
1667  echo "CONFIG_SOFTFLOAT=yes" >> $config_mak
1668  echo "#define CONFIG_SOFTFLOAT 1" >> $config_h
1669fi
1670if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
1671  echo "TARGET_HAS_BFLT=yes" >> $config_mak
1672  echo "#define TARGET_HAS_BFLT 1" >> $config_h
1673fi
1674if test "$target_user_only" = "yes" \
1675        -a "$nptl" = "yes" -a "$target_nptl" = "yes"; then
1676  echo "#define USE_NPTL 1" >> $config_h
1677fi
1678# 32 bit ELF loader in addition to native 64 bit loader?
1679if test "$target_user_only" = "yes" -a "$elfload32" = "yes"; then
1680  echo "TARGET_HAS_ELFLOAD32=yes" >> $config_mak
1681  echo "#define TARGET_HAS_ELFLOAD32 1" >> $config_h
1682fi
1683if test "$target_bsd_user" = "yes" ; then
1684  echo "CONFIG_BSD_USER=yes" >> $config_mak
1685  echo "#define CONFIG_BSD_USER 1" >> $config_h
1686fi
1687
1688test -f ${config_h}~ && cmp -s $config_h ${config_h}~ && mv ${config_h}~ $config_h
1689
1690done # for target in $targets
1691
1692# build tree in object directory if source path is different from current one
1693if test "$source_path_used" = "yes" ; then
1694    DIRS="tests tests/cris slirp audio"
1695    FILES="Makefile tests/Makefile"
1696    FILES="$FILES tests/cris/Makefile tests/cris/.gdbinit"
1697    FILES="$FILES tests/test-mmap.c"
1698    for dir in $DIRS ; do
1699            mkdir -p $dir
1700    done
1701    # remove the link and recreate it, as not all "ln -sf" overwrite the link
1702    for f in $FILES ; do
1703        rm -f $f
1704        ln -s $source_path/$f $f
1705    done
1706fi
1707
1708rm -f $TMPO $TMPC $TMPE $TMPS $TMPI
1709