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