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