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