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