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