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