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