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