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