xref: /openbmc/qemu/configure (revision 7267c094)
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}.exe"
17
18# NB: do not call "exit" in the trap handler; this is buggy with some shells;
19# see <1285349658-3122-1-git-send-email-loic.minier@linaro.org>
20trap "rm -f $TMPC $TMPO $TMPE" EXIT INT QUIT TERM
21rm -f config.log
22
23compile_object() {
24  echo $cc $QEMU_CFLAGS -c -o $TMPO $TMPC >> config.log
25  $cc $QEMU_CFLAGS -c -o $TMPO $TMPC >> config.log 2>&1
26}
27
28compile_prog() {
29  local_cflags="$1"
30  local_ldflags="$2"
31  echo $cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags >> config.log
32  $cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags >> config.log 2>&1
33}
34
35# symbolically link $1 to $2.  Portable version of "ln -sf".
36symlink() {
37  rm -f $2
38  ln -s $1 $2
39}
40
41# check whether a command is available to this shell (may be either an
42# executable or a builtin)
43has() {
44    type "$1" >/dev/null 2>&1
45}
46
47# search for an executable in PATH
48path_of() {
49    local_command="$1"
50    local_ifs="$IFS"
51    local_dir=""
52
53    # pathname has a dir component?
54    if [ "${local_command#*/}" != "$local_command" ]; then
55        if [ -x "$local_command" ] && [ ! -d "$local_command" ]; then
56            echo "$local_command"
57            return 0
58        fi
59    fi
60    if [ -z "$local_command" ]; then
61        return 1
62    fi
63
64    IFS=:
65    for local_dir in $PATH; do
66        if [ -x "$local_dir/$local_command" ] && [ ! -d "$local_dir/$local_command" ]; then
67            echo "$local_dir/$local_command"
68            IFS="${local_ifs:-$(printf ' \t\n')}"
69            return 0
70        fi
71    done
72    # not found
73    IFS="${local_ifs:-$(printf ' \t\n')}"
74    return 1
75}
76
77# default parameters
78source_path=`dirname "$0"`
79cpu=""
80interp_prefix="/usr/gnemul/qemu-%M"
81static="no"
82sparc_cpu=""
83cross_prefix=""
84audio_drv_list=""
85audio_card_list="ac97 es1370 sb16 hda"
86audio_possible_cards="ac97 es1370 sb16 cs4231a adlib gus hda"
87block_drv_whitelist=""
88host_cc="gcc"
89helper_cflags=""
90libs_softmmu=""
91libs_tools=""
92audio_pt_int=""
93audio_win_int=""
94cc_i386=i386-pc-linux-gnu-gcc
95
96target_list=""
97
98# Default value for a variable defining feature "foo".
99#  * foo="no"  feature will only be used if --enable-foo arg is given
100#  * foo=""    feature will be searched for, and if found, will be used
101#              unless --disable-foo is given
102#  * foo="yes" this value will only be set by --enable-foo flag.
103#              feature will searched for,
104#              if not found, configure exits with error
105#
106# Always add --enable-foo and --disable-foo command line args.
107# Distributions want to ensure that several features are compiled in, and it
108# is impossible without a --enable-foo that exits if a feature is not found.
109
110bluez=""
111brlapi=""
112curl=""
113curses=""
114docs=""
115fdt=""
116nptl=""
117sdl=""
118vnc="yes"
119sparse="no"
120uuid=""
121vde=""
122vnc_tls=""
123vnc_sasl=""
124vnc_jpeg=""
125vnc_png=""
126vnc_thread="no"
127xen=""
128xen_ctrl_version=""
129linux_aio=""
130attr=""
131xfs=""
132
133vhost_net="no"
134kvm="no"
135gprof="no"
136debug_tcg="no"
137debug_mon="no"
138debug="no"
139strip_opt="yes"
140bigendian="no"
141mingw32="no"
142EXESUF=""
143prefix="/usr/local"
144mandir="\${prefix}/share/man"
145datadir="\${prefix}/share/qemu"
146docdir="\${prefix}/share/doc/qemu"
147bindir="\${prefix}/bin"
148libdir="\${prefix}/lib"
149includedir="\${prefix}/include"
150sysconfdir="\${prefix}/etc"
151confsuffix="/qemu"
152slirp="yes"
153fmod_lib=""
154fmod_inc=""
155oss_lib=""
156bsd="no"
157linux="no"
158solaris="no"
159profiler="no"
160cocoa="no"
161softmmu="yes"
162linux_user="no"
163darwin_user="no"
164bsd_user="no"
165guest_base=""
166uname_release=""
167io_thread="no"
168mixemu="no"
169aix="no"
170blobs="yes"
171pkgversion=""
172check_utests="no"
173user_pie="no"
174zero_malloc=""
175trace_backend="nop"
176trace_file="trace"
177spice=""
178rbd=""
179smartcard=""
180smartcard_nss=""
181usb_redir=""
182opengl=""
183zlib="yes"
184guest_agent="yes"
185
186# parse CC options first
187for opt do
188  optarg=`expr "x$opt" : 'x[^=]*=\(.*\)'`
189  case "$opt" in
190  --cross-prefix=*) cross_prefix="$optarg"
191  ;;
192  --cc=*) CC="$optarg"
193  ;;
194  --source-path=*) source_path="$optarg"
195  ;;
196  --cpu=*) cpu="$optarg"
197  ;;
198  --extra-cflags=*) QEMU_CFLAGS="$optarg $QEMU_CFLAGS"
199  ;;
200  --extra-ldflags=*) LDFLAGS="$optarg $LDFLAGS"
201  ;;
202  --sparc_cpu=*)
203    sparc_cpu="$optarg"
204    case $sparc_cpu in
205    v7|v8|v8plus|v8plusa)
206      cpu="sparc"
207    ;;
208    v9)
209      cpu="sparc64"
210    ;;
211    *)
212      echo "undefined SPARC architecture. Exiting";
213      exit 1
214    ;;
215    esac
216  ;;
217  esac
218done
219# OS specific
220# Using uname is really, really broken.  Once we have the right set of checks
221# we can eliminate it's usage altogether
222
223cc="${CC-${cross_prefix}gcc}"
224ar="${AR-${cross_prefix}ar}"
225objcopy="${OBJCOPY-${cross_prefix}objcopy}"
226ld="${LD-${cross_prefix}ld}"
227strip="${STRIP-${cross_prefix}strip}"
228windres="${WINDRES-${cross_prefix}windres}"
229pkg_config="${PKG_CONFIG-${cross_prefix}pkg-config}"
230sdl_config="${SDL_CONFIG-${cross_prefix}sdl-config}"
231
232# default flags for all hosts
233QEMU_CFLAGS="-fno-strict-aliasing $QEMU_CFLAGS"
234CFLAGS="-g $CFLAGS"
235QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
236QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
237QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
238QEMU_CFLAGS="-D_FORTIFY_SOURCE=2 $QEMU_CFLAGS"
239QEMU_INCLUDES="-I. -I\$(SRC_PATH) -I\$(SRC_PATH)/fpu"
240LDFLAGS="-g $LDFLAGS"
241
242# make source path absolute
243source_path=`cd "$source_path"; pwd`
244
245check_define() {
246cat > $TMPC <<EOF
247#if !defined($1)
248#error Not defined
249#endif
250int main(void) { return 0; }
251EOF
252  compile_object
253}
254
255if test ! -z "$cpu" ; then
256  # command line argument
257  :
258elif check_define __i386__ ; then
259  cpu="i386"
260elif check_define __x86_64__ ; then
261  cpu="x86_64"
262elif check_define __sparc__ ; then
263  # We can't check for 64 bit (when gcc is biarch) or V8PLUSA
264  # They must be specified using --sparc_cpu
265  if check_define __arch64__ ; then
266    cpu="sparc64"
267  else
268    cpu="sparc"
269  fi
270elif check_define _ARCH_PPC ; then
271  if check_define _ARCH_PPC64 ; then
272    cpu="ppc64"
273  else
274    cpu="ppc"
275  fi
276elif check_define __mips__ ; then
277  cpu="mips"
278elif check_define __ia64__ ; then
279  cpu="ia64"
280elif check_define __s390__ ; then
281  if check_define __s390x__ ; then
282    cpu="s390x"
283  else
284    cpu="s390"
285  fi
286else
287  cpu=`uname -m`
288fi
289
290case "$cpu" in
291  alpha|cris|ia64|lm32|m68k|microblaze|ppc|ppc64|sparc64|unicore32)
292    cpu="$cpu"
293  ;;
294  i386|i486|i586|i686|i86pc|BePC)
295    cpu="i386"
296  ;;
297  x86_64|amd64)
298    cpu="x86_64"
299  ;;
300  armv*b)
301    cpu="armv4b"
302  ;;
303  armv*l)
304    cpu="armv4l"
305  ;;
306  parisc|parisc64)
307    cpu="hppa"
308  ;;
309  mips*)
310    cpu="mips"
311  ;;
312  s390)
313    cpu="s390"
314  ;;
315  s390x)
316    cpu="s390x"
317  ;;
318  sparc|sun4[cdmuv])
319    cpu="sparc"
320  ;;
321  *)
322    echo "Unsupported CPU = $cpu"
323    exit 1
324  ;;
325esac
326
327# OS specific
328if check_define __linux__ ; then
329  targetos="Linux"
330elif check_define _WIN32 ; then
331  targetos='MINGW32'
332elif check_define __OpenBSD__ ; then
333  targetos='OpenBSD'
334elif check_define __sun__ ; then
335  targetos='SunOS'
336elif check_define __HAIKU__ ; then
337  targetos='Haiku'
338else
339  targetos=`uname -s`
340fi
341
342case $targetos in
343CYGWIN*)
344  mingw32="yes"
345  QEMU_CFLAGS="-mno-cygwin $QEMU_CFLAGS"
346  audio_possible_drivers="winwave sdl"
347  audio_drv_list="winwave"
348;;
349MINGW32*)
350  mingw32="yes"
351  audio_possible_drivers="winwave dsound sdl fmod"
352  audio_drv_list="winwave"
353;;
354GNU/kFreeBSD)
355  bsd="yes"
356  audio_drv_list="oss"
357  audio_possible_drivers="oss sdl esd pa"
358;;
359FreeBSD)
360  bsd="yes"
361  make="${MAKE-gmake}"
362  audio_drv_list="oss"
363  audio_possible_drivers="oss sdl esd pa"
364  # needed for kinfo_getvmmap(3) in libutil.h
365  LIBS="-lutil $LIBS"
366;;
367DragonFly)
368  bsd="yes"
369  make="${MAKE-gmake}"
370  audio_drv_list="oss"
371  audio_possible_drivers="oss sdl esd pa"
372;;
373NetBSD)
374  bsd="yes"
375  make="${MAKE-gmake}"
376  audio_drv_list="oss"
377  audio_possible_drivers="oss sdl esd"
378  oss_lib="-lossaudio"
379;;
380OpenBSD)
381  bsd="yes"
382  make="${MAKE-gmake}"
383  audio_drv_list="oss"
384  audio_possible_drivers="oss sdl esd"
385  oss_lib="-lossaudio"
386;;
387Darwin)
388  bsd="yes"
389  darwin="yes"
390  # on Leopard most of the system is 32-bit, so we have to ask the kernel it if we can
391  # run 64-bit userspace code
392  if [ "$cpu" = "i386" ] ; then
393    is_x86_64=`sysctl -n hw.optional.x86_64`
394    [ "$is_x86_64" = "1" ] && cpu=x86_64
395  fi
396  if [ "$cpu" = "x86_64" ] ; then
397    QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
398    LDFLAGS="-arch x86_64 $LDFLAGS"
399  else
400    QEMU_CFLAGS="-mdynamic-no-pic $QEMU_CFLAGS"
401  fi
402  darwin_user="yes"
403  cocoa="yes"
404  audio_drv_list="coreaudio"
405  audio_possible_drivers="coreaudio sdl fmod"
406  LDFLAGS="-framework CoreFoundation -framework IOKit $LDFLAGS"
407  libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
408;;
409SunOS)
410  solaris="yes"
411  make="${MAKE-gmake}"
412  install="${INSTALL-ginstall}"
413  ld="gld"
414  needs_libsunmath="no"
415  solarisrev=`uname -r | cut -f2 -d.`
416  # have to select again, because `uname -m` returns i86pc
417  # even on an x86_64 box.
418  solariscpu=`isainfo -k`
419  if test "${solariscpu}" = "amd64" ; then
420    cpu="x86_64"
421  fi
422  if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then
423    if test "$solarisrev" -le 9 ; then
424      if test -f /opt/SUNWspro/prod/lib/libsunmath.so.1; then
425        needs_libsunmath="yes"
426        QEMU_CFLAGS="-I/opt/SUNWspro/prod/include/cc $QEMU_CFLAGS"
427        LDFLAGS="-L/opt/SUNWspro/prod/lib -R/opt/SUNWspro/prod/lib $LDFLAGS"
428        LIBS="-lsunmath $LIBS"
429      else
430        echo "QEMU will not link correctly on Solaris 8/X86 or 9/x86 without"
431        echo "libsunmath from the Sun Studio compilers tools, due to a lack of"
432        echo "C99 math features in libm.so in Solaris 8/x86 and Solaris 9/x86"
433        echo "Studio 11 can be downloaded from www.sun.com."
434        exit 1
435      fi
436    fi
437  fi
438  if test -f /usr/include/sys/soundcard.h ; then
439    audio_drv_list="oss"
440  fi
441  audio_possible_drivers="oss sdl"
442# needed for CMSG_ macros in sys/socket.h
443  QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
444# needed for TIOCWIN* defines in termios.h
445  QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
446  QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
447  LIBS="-lsocket -lnsl -lresolv $LIBS"
448;;
449AIX)
450  aix="yes"
451  make="${MAKE-gmake}"
452;;
453Haiku)
454  haiku="yes"
455  QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
456  LIBS="-lposix_error_mapper -lnetwork $LIBS"
457;;
458*)
459  audio_drv_list="oss"
460  audio_possible_drivers="oss alsa sdl esd pa"
461  linux="yes"
462  linux_user="yes"
463  usb="linux"
464  kvm="yes"
465  vhost_net="yes"
466  if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then
467    audio_possible_drivers="$audio_possible_drivers fmod"
468  fi
469;;
470esac
471
472if [ "$bsd" = "yes" ] ; then
473  if [ "$darwin" != "yes" ] ; then
474    usb="bsd"
475  fi
476  bsd_user="yes"
477fi
478
479: ${make=${MAKE-make}}
480: ${install=${INSTALL-install}}
481: ${python=${PYTHON-python}}
482
483if test "$mingw32" = "yes" ; then
484  EXESUF=".exe"
485  QEMU_CFLAGS="-DWIN32_LEAN_AND_MEAN -DWINVER=0x501 $QEMU_CFLAGS"
486  # enable C99/POSIX format strings (needs mingw32-runtime 3.15 or later)
487  QEMU_CFLAGS="-D__USE_MINGW_ANSI_STDIO=1 $QEMU_CFLAGS"
488  LIBS="-lwinmm -lws2_32 -liberty -liphlpapi $LIBS"
489  prefix="c:/Program Files/Qemu"
490  mandir="\${prefix}"
491  datadir="\${prefix}"
492  docdir="\${prefix}"
493  bindir="\${prefix}"
494  sysconfdir="\${prefix}"
495  confsuffix=""
496  guest_agent="no"
497fi
498
499werror=""
500
501for opt do
502  optarg=`expr "x$opt" : 'x[^=]*=\(.*\)'`
503  case "$opt" in
504  --help|-h) show_help=yes
505  ;;
506  --version|-V) exec cat $source_path/VERSION
507  ;;
508  --prefix=*) prefix="$optarg"
509  ;;
510  --interp-prefix=*) interp_prefix="$optarg"
511  ;;
512  --source-path=*)
513  ;;
514  --cross-prefix=*)
515  ;;
516  --cc=*)
517  ;;
518  --host-cc=*) host_cc="$optarg"
519  ;;
520  --make=*) make="$optarg"
521  ;;
522  --install=*) install="$optarg"
523  ;;
524  --python=*) python="$optarg"
525  ;;
526  --extra-cflags=*)
527  ;;
528  --extra-ldflags=*)
529  ;;
530  --cpu=*)
531  ;;
532  --target-list=*) target_list="$optarg"
533  ;;
534  --enable-trace-backend=*) trace_backend="$optarg"
535  ;;
536  --with-trace-file=*) trace_file="$optarg"
537  ;;
538  --enable-gprof) gprof="yes"
539  ;;
540  --static)
541    static="yes"
542    LDFLAGS="-static $LDFLAGS"
543  ;;
544  --mandir=*) mandir="$optarg"
545  ;;
546  --bindir=*) bindir="$optarg"
547  ;;
548  --libdir=*) libdir="$optarg"
549  ;;
550  --includedir=*) includedir="$optarg"
551  ;;
552  --datadir=*) datadir="$optarg"
553  ;;
554  --docdir=*) docdir="$optarg"
555  ;;
556  --sysconfdir=*) sysconfdir="$optarg"
557  ;;
558  --disable-sdl) sdl="no"
559  ;;
560  --enable-sdl) sdl="yes"
561  ;;
562  --disable-vnc) vnc="no"
563  ;;
564  --enable-vnc) vnc="yes"
565  ;;
566  --fmod-lib=*) fmod_lib="$optarg"
567  ;;
568  --fmod-inc=*) fmod_inc="$optarg"
569  ;;
570  --oss-lib=*) oss_lib="$optarg"
571  ;;
572  --audio-card-list=*) audio_card_list=`echo "$optarg" | sed -e 's/,/ /g'`
573  ;;
574  --audio-drv-list=*) audio_drv_list="$optarg"
575  ;;
576  --block-drv-whitelist=*) block_drv_whitelist=`echo "$optarg" | sed -e 's/,/ /g'`
577  ;;
578  --enable-debug-tcg) debug_tcg="yes"
579  ;;
580  --disable-debug-tcg) debug_tcg="no"
581  ;;
582  --enable-debug-mon) debug_mon="yes"
583  ;;
584  --disable-debug-mon) debug_mon="no"
585  ;;
586  --enable-debug)
587      # Enable debugging options that aren't excessively noisy
588      debug_tcg="yes"
589      debug_mon="yes"
590      debug="yes"
591      strip_opt="no"
592  ;;
593  --enable-sparse) sparse="yes"
594  ;;
595  --disable-sparse) sparse="no"
596  ;;
597  --disable-strip) strip_opt="no"
598  ;;
599  --disable-vnc-tls) vnc_tls="no"
600  ;;
601  --enable-vnc-tls) vnc_tls="yes"
602  ;;
603  --disable-vnc-sasl) vnc_sasl="no"
604  ;;
605  --enable-vnc-sasl) vnc_sasl="yes"
606  ;;
607  --disable-vnc-jpeg) vnc_jpeg="no"
608  ;;
609  --enable-vnc-jpeg) vnc_jpeg="yes"
610  ;;
611  --disable-vnc-png) vnc_png="no"
612  ;;
613  --enable-vnc-png) vnc_png="yes"
614  ;;
615  --disable-vnc-thread) vnc_thread="no"
616  ;;
617  --enable-vnc-thread) vnc_thread="yes"
618  ;;
619  --disable-slirp) slirp="no"
620  ;;
621  --disable-uuid) uuid="no"
622  ;;
623  --enable-uuid) uuid="yes"
624  ;;
625  --disable-vde) vde="no"
626  ;;
627  --enable-vde) vde="yes"
628  ;;
629  --disable-xen) xen="no"
630  ;;
631  --enable-xen) xen="yes"
632  ;;
633  --disable-brlapi) brlapi="no"
634  ;;
635  --enable-brlapi) brlapi="yes"
636  ;;
637  --disable-bluez) bluez="no"
638  ;;
639  --enable-bluez) bluez="yes"
640  ;;
641  --disable-kvm) kvm="no"
642  ;;
643  --enable-kvm) kvm="yes"
644  ;;
645  --disable-spice) spice="no"
646  ;;
647  --enable-spice) spice="yes"
648  ;;
649  --enable-profiler) profiler="yes"
650  ;;
651  --enable-cocoa)
652      cocoa="yes" ;
653      sdl="no" ;
654      audio_drv_list="coreaudio `echo $audio_drv_list | sed s,coreaudio,,g`"
655  ;;
656  --disable-system) softmmu="no"
657  ;;
658  --enable-system) softmmu="yes"
659  ;;
660  --disable-user)
661      linux_user="no" ;
662      bsd_user="no" ;
663      darwin_user="no"
664  ;;
665  --enable-user) ;;
666  --disable-linux-user) linux_user="no"
667  ;;
668  --enable-linux-user) linux_user="yes"
669  ;;
670  --disable-darwin-user) darwin_user="no"
671  ;;
672  --enable-darwin-user) darwin_user="yes"
673  ;;
674  --disable-bsd-user) bsd_user="no"
675  ;;
676  --enable-bsd-user) bsd_user="yes"
677  ;;
678  --enable-guest-base) guest_base="yes"
679  ;;
680  --disable-guest-base) guest_base="no"
681  ;;
682  --enable-user-pie) user_pie="yes"
683  ;;
684  --disable-user-pie) user_pie="no"
685  ;;
686  --enable-uname-release=*) uname_release="$optarg"
687  ;;
688  --sparc_cpu=*)
689  ;;
690  --enable-werror) werror="yes"
691  ;;
692  --disable-werror) werror="no"
693  ;;
694  --disable-curses) curses="no"
695  ;;
696  --enable-curses) curses="yes"
697  ;;
698  --disable-curl) curl="no"
699  ;;
700  --enable-curl) curl="yes"
701  ;;
702  --disable-fdt) fdt="no"
703  ;;
704  --enable-fdt) fdt="yes"
705  ;;
706  --disable-check-utests) check_utests="no"
707  ;;
708  --enable-check-utests) check_utests="yes"
709  ;;
710  --disable-nptl) nptl="no"
711  ;;
712  --enable-nptl) nptl="yes"
713  ;;
714  --enable-mixemu) mixemu="yes"
715  ;;
716  --disable-linux-aio) linux_aio="no"
717  ;;
718  --enable-linux-aio) linux_aio="yes"
719  ;;
720  --disable-attr) attr="no"
721  ;;
722  --enable-attr) attr="yes"
723  ;;
724  --enable-io-thread) io_thread="yes"
725  ;;
726  --disable-blobs) blobs="no"
727  ;;
728  --with-pkgversion=*) pkgversion=" ($optarg)"
729  ;;
730  --disable-docs) docs="no"
731  ;;
732  --enable-docs) docs="yes"
733  ;;
734  --disable-vhost-net) vhost_net="no"
735  ;;
736  --enable-vhost-net) vhost_net="yes"
737  ;;
738  --disable-opengl) opengl="no"
739  ;;
740  --enable-opengl) opengl="yes"
741  ;;
742  --*dir)
743  ;;
744  --disable-rbd) rbd="no"
745  ;;
746  --enable-rbd) rbd="yes"
747  ;;
748  --disable-smartcard) smartcard="no"
749  ;;
750  --enable-smartcard) smartcard="yes"
751  ;;
752  --disable-smartcard-nss) smartcard_nss="no"
753  ;;
754  --enable-smartcard-nss) smartcard_nss="yes"
755  ;;
756  --disable-usb-redir) usb_redir="no"
757  ;;
758  --enable-usb-redir) usb_redir="yes"
759  ;;
760  --disable-zlib-test) zlib="no"
761  ;;
762  --enable-guest-agent) guest_agent="yes"
763  ;;
764  --disable-guest-agent) guest_agent="no"
765  ;;
766  *) echo "ERROR: unknown option $opt"; show_help="yes"
767  ;;
768  esac
769done
770
771#
772# If cpu ~= sparc and  sparc_cpu hasn't been defined, plug in the right
773# QEMU_CFLAGS/LDFLAGS (assume sparc_v8plus for 32-bit and sparc_v9 for 64-bit)
774#
775host_guest_base="no"
776case "$cpu" in
777    sparc) case $sparc_cpu in
778           v7|v8)
779             QEMU_CFLAGS="-mcpu=${sparc_cpu} -D__sparc_${sparc_cpu}__ $QEMU_CFLAGS"
780           ;;
781           v8plus|v8plusa)
782             QEMU_CFLAGS="-mcpu=ultrasparc -D__sparc_${sparc_cpu}__ $QEMU_CFLAGS"
783           ;;
784           *) # sparc_cpu not defined in the command line
785             QEMU_CFLAGS="-mcpu=ultrasparc -D__sparc_v8plus__ $QEMU_CFLAGS"
786           esac
787           LDFLAGS="-m32 $LDFLAGS"
788           QEMU_CFLAGS="-m32 -ffixed-g2 -ffixed-g3 $QEMU_CFLAGS"
789           if test "$solaris" = "no" ; then
790             QEMU_CFLAGS="-ffixed-g1 -ffixed-g6 $QEMU_CFLAGS"
791             helper_cflags="-ffixed-i0"
792           fi
793           ;;
794    sparc64)
795           QEMU_CFLAGS="-m64 -mcpu=ultrasparc -D__sparc_v9__ $QEMU_CFLAGS"
796           LDFLAGS="-m64 $LDFLAGS"
797           QEMU_CFLAGS="-ffixed-g5 -ffixed-g6 -ffixed-g7 $QEMU_CFLAGS"
798           if test "$solaris" != "no" ; then
799             QEMU_CFLAGS="-ffixed-g1 $QEMU_CFLAGS"
800           fi
801           ;;
802    s390)
803           QEMU_CFLAGS="-m31 -march=z990 $QEMU_CFLAGS"
804           LDFLAGS="-m31 $LDFLAGS"
805           host_guest_base="yes"
806           ;;
807    s390x)
808           QEMU_CFLAGS="-m64 -march=z990 $QEMU_CFLAGS"
809           LDFLAGS="-m64 $LDFLAGS"
810           host_guest_base="yes"
811           ;;
812    i386)
813           QEMU_CFLAGS="-m32 $QEMU_CFLAGS"
814           LDFLAGS="-m32 $LDFLAGS"
815           cc_i386='$(CC) -m32'
816           helper_cflags="-fomit-frame-pointer"
817           host_guest_base="yes"
818           ;;
819    x86_64)
820           QEMU_CFLAGS="-m64 $QEMU_CFLAGS"
821           LDFLAGS="-m64 $LDFLAGS"
822           cc_i386='$(CC) -m32'
823           host_guest_base="yes"
824           ;;
825    arm*)
826           host_guest_base="yes"
827           ;;
828    ppc*)
829           host_guest_base="yes"
830           ;;
831    mips*)
832           host_guest_base="yes"
833           ;;
834    ia64*)
835           host_guest_base="yes"
836           ;;
837    hppa*)
838           host_guest_base="yes"
839           ;;
840    unicore32*)
841           host_guest_base="yes"
842           ;;
843esac
844
845[ -z "$guest_base" ] && guest_base="$host_guest_base"
846
847
848default_target_list=""
849
850# these targets are portable
851if [ "$softmmu" = "yes" ] ; then
852    default_target_list="\
853i386-softmmu \
854x86_64-softmmu \
855arm-softmmu \
856cris-softmmu \
857lm32-softmmu \
858m68k-softmmu \
859microblaze-softmmu \
860microblazeel-softmmu \
861mips-softmmu \
862mipsel-softmmu \
863mips64-softmmu \
864mips64el-softmmu \
865ppc-softmmu \
866ppcemb-softmmu \
867ppc64-softmmu \
868sh4-softmmu \
869sh4eb-softmmu \
870sparc-softmmu \
871sparc64-softmmu \
872s390x-softmmu \
873"
874fi
875# the following are Linux specific
876if [ "$linux_user" = "yes" ] ; then
877    default_target_list="${default_target_list}\
878i386-linux-user \
879x86_64-linux-user \
880alpha-linux-user \
881arm-linux-user \
882armeb-linux-user \
883cris-linux-user \
884m68k-linux-user \
885microblaze-linux-user \
886microblazeel-linux-user \
887mips-linux-user \
888mipsel-linux-user \
889ppc-linux-user \
890ppc64-linux-user \
891ppc64abi32-linux-user \
892sh4-linux-user \
893sh4eb-linux-user \
894sparc-linux-user \
895sparc64-linux-user \
896sparc32plus-linux-user \
897unicore32-linux-user \
898s390x-linux-user \
899"
900fi
901# the following are Darwin specific
902if [ "$darwin_user" = "yes" ] ; then
903    default_target_list="$default_target_list i386-darwin-user ppc-darwin-user "
904fi
905# the following are BSD specific
906if [ "$bsd_user" = "yes" ] ; then
907    default_target_list="${default_target_list}\
908i386-bsd-user \
909x86_64-bsd-user \
910sparc-bsd-user \
911sparc64-bsd-user \
912"
913fi
914
915if test x"$show_help" = x"yes" ; then
916cat << EOF
917
918Usage: configure [options]
919Options: [defaults in brackets after descriptions]
920
921EOF
922echo "Standard options:"
923echo "  --help                   print this message"
924echo "  --prefix=PREFIX          install in PREFIX [$prefix]"
925echo "  --interp-prefix=PREFIX   where to find shared libraries, etc."
926echo "                           use %M for cpu name [$interp_prefix]"
927echo "  --target-list=LIST       set target list (default: build everything)"
928echo "Available targets: $default_target_list" | \
929    fold -s -w 53 | sed -e 's/^/                           /'
930echo ""
931echo "Advanced options (experts only):"
932echo "  --source-path=PATH       path of source code [$source_path]"
933echo "  --cross-prefix=PREFIX    use PREFIX for compile tools [$cross_prefix]"
934echo "  --cc=CC                  use C compiler CC [$cc]"
935echo "  --host-cc=CC             use C compiler CC [$host_cc] for code run at"
936echo "                           build time"
937echo "  --extra-cflags=CFLAGS    append extra C compiler flags QEMU_CFLAGS"
938echo "  --extra-ldflags=LDFLAGS  append extra linker flags LDFLAGS"
939echo "  --make=MAKE              use specified make [$make]"
940echo "  --install=INSTALL        use specified install [$install]"
941echo "  --python=PYTHON          use specified python [$python]"
942echo "  --static                 enable static build [$static]"
943echo "  --mandir=PATH            install man pages in PATH"
944echo "  --datadir=PATH           install firmware in PATH"
945echo "  --docdir=PATH            install documentation in PATH"
946echo "  --bindir=PATH            install binaries in PATH"
947echo "  --sysconfdir=PATH        install config in PATH/qemu"
948echo "  --enable-debug-tcg       enable TCG debugging"
949echo "  --disable-debug-tcg      disable TCG debugging (default)"
950echo "  --enable-debug           enable common debug build options"
951echo "  --enable-sparse          enable sparse checker"
952echo "  --disable-sparse         disable sparse checker (default)"
953echo "  --disable-strip          disable stripping binaries"
954echo "  --disable-werror         disable compilation abort on warning"
955echo "  --disable-sdl            disable SDL"
956echo "  --enable-sdl             enable SDL"
957echo "  --disable-vnc            disable VNC"
958echo "  --enable-vnc             enable VNC"
959echo "  --enable-cocoa           enable COCOA (Mac OS X only)"
960echo "  --audio-drv-list=LIST    set audio drivers list:"
961echo "                           Available drivers: $audio_possible_drivers"
962echo "  --audio-card-list=LIST   set list of emulated audio cards [$audio_card_list]"
963echo "                           Available cards: $audio_possible_cards"
964echo "  --block-drv-whitelist=L  set block driver whitelist"
965echo "                           (affects only QEMU, not qemu-img)"
966echo "  --enable-mixemu          enable mixer emulation"
967echo "  --disable-xen            disable xen backend driver support"
968echo "  --enable-xen             enable xen backend driver support"
969echo "  --disable-brlapi         disable BrlAPI"
970echo "  --enable-brlapi          enable BrlAPI"
971echo "  --disable-vnc-tls        disable TLS encryption for VNC server"
972echo "  --enable-vnc-tls         enable TLS encryption for VNC server"
973echo "  --disable-vnc-sasl       disable SASL encryption for VNC server"
974echo "  --enable-vnc-sasl        enable SASL encryption for VNC server"
975echo "  --disable-vnc-jpeg       disable JPEG lossy compression for VNC server"
976echo "  --enable-vnc-jpeg        enable JPEG lossy compression for VNC server"
977echo "  --disable-vnc-png        disable PNG compression for VNC server (default)"
978echo "  --enable-vnc-png         enable PNG compression for VNC server"
979echo "  --disable-vnc-thread     disable threaded VNC server"
980echo "  --enable-vnc-thread      enable threaded VNC server"
981echo "  --disable-curses         disable curses output"
982echo "  --enable-curses          enable curses output"
983echo "  --disable-curl           disable curl connectivity"
984echo "  --enable-curl            enable curl connectivity"
985echo "  --disable-fdt            disable fdt device tree"
986echo "  --enable-fdt             enable fdt device tree"
987echo "  --disable-check-utests   disable check unit-tests"
988echo "  --enable-check-utests    enable check unit-tests"
989echo "  --disable-bluez          disable bluez stack connectivity"
990echo "  --enable-bluez           enable bluez stack connectivity"
991echo "  --disable-slirp          disable SLIRP userspace network connectivity"
992echo "  --disable-kvm            disable KVM acceleration support"
993echo "  --enable-kvm             enable KVM acceleration support"
994echo "  --disable-nptl           disable usermode NPTL support"
995echo "  --enable-nptl            enable usermode NPTL support"
996echo "  --enable-system          enable all system emulation targets"
997echo "  --disable-system         disable all system emulation targets"
998echo "  --enable-user            enable supported user emulation targets"
999echo "  --disable-user           disable all user emulation targets"
1000echo "  --enable-linux-user      enable all linux usermode emulation targets"
1001echo "  --disable-linux-user     disable all linux usermode emulation targets"
1002echo "  --enable-darwin-user     enable all darwin usermode emulation targets"
1003echo "  --disable-darwin-user    disable all darwin usermode emulation targets"
1004echo "  --enable-bsd-user        enable all BSD usermode emulation targets"
1005echo "  --disable-bsd-user       disable all BSD usermode emulation targets"
1006echo "  --enable-guest-base      enable GUEST_BASE support for usermode"
1007echo "                           emulation targets"
1008echo "  --disable-guest-base     disable GUEST_BASE support"
1009echo "  --enable-user-pie        build usermode emulation targets as PIE"
1010echo "  --disable-user-pie       do not build usermode emulation targets as PIE"
1011echo "  --fmod-lib               path to FMOD library"
1012echo "  --fmod-inc               path to FMOD includes"
1013echo "  --oss-lib                path to OSS library"
1014echo "  --enable-uname-release=R Return R for uname -r in usermode emulation"
1015echo "  --sparc_cpu=V            Build qemu for Sparc architecture v7, v8, v8plus, v8plusa, v9"
1016echo "  --disable-uuid           disable uuid support"
1017echo "  --enable-uuid            enable uuid support"
1018echo "  --disable-vde            disable support for vde network"
1019echo "  --enable-vde             enable support for vde network"
1020echo "  --disable-linux-aio      disable Linux AIO support"
1021echo "  --enable-linux-aio       enable Linux AIO support"
1022echo "  --disable-attr           disables attr and xattr support"
1023echo "  --enable-attr            enable attr and xattr support"
1024echo "  --enable-io-thread       enable IO thread"
1025echo "  --disable-blobs          disable installing provided firmware blobs"
1026echo "  --enable-docs            enable documentation build"
1027echo "  --disable-docs           disable documentation build"
1028echo "  --disable-vhost-net      disable vhost-net acceleration support"
1029echo "  --enable-vhost-net       enable vhost-net acceleration support"
1030echo "  --enable-trace-backend=B Set trace backend"
1031echo "                           Available backends:" $("$source_path"/scripts/tracetool --list-backends)
1032echo "  --with-trace-file=NAME   Full PATH,NAME of file to store traces"
1033echo "                           Default:trace-<pid>"
1034echo "  --disable-spice          disable spice"
1035echo "  --enable-spice           enable spice"
1036echo "  --enable-rbd             enable building the rados block device (rbd)"
1037echo "  --disable-smartcard      disable smartcard support"
1038echo "  --enable-smartcard       enable smartcard support"
1039echo "  --disable-smartcard-nss  disable smartcard nss support"
1040echo "  --enable-smartcard-nss   enable smartcard nss support"
1041echo "  --disable-usb-redir      disable usb network redirection support"
1042echo "  --enable-usb-redir       enable usb network redirection support"
1043echo "  --disable-guest-agent    disable building of the QEMU Guest Agent"
1044echo "  --enable-guest-agent     enable building of the QEMU Guest Agent"
1045echo ""
1046echo "NOTE: The object files are built at the place where configure is launched"
1047exit 1
1048fi
1049
1050# check that the C compiler works.
1051cat > $TMPC <<EOF
1052int main(void) {}
1053EOF
1054
1055if compile_object ; then
1056  : C compiler works ok
1057else
1058    echo "ERROR: \"$cc\" either does not exist or does not work"
1059    exit 1
1060fi
1061
1062gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1063gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
1064gcc_flags="-Wmissing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
1065gcc_flags="-fstack-protector-all -Wendif-labels $gcc_flags"
1066cat > $TMPC << EOF
1067int main(void) { return 0; }
1068EOF
1069for flag in $gcc_flags; do
1070    if compile_prog "-Werror $QEMU_CFLAGS" "-Werror $flag" ; then
1071	QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1072    fi
1073done
1074
1075#
1076# Solaris specific configure tool chain decisions
1077#
1078if test "$solaris" = "yes" ; then
1079  if has $install; then
1080    :
1081  else
1082    echo "Solaris install program not found. Use --install=/usr/ucb/install or"
1083    echo "install fileutils from www.blastwave.org using pkg-get -i fileutils"
1084    echo "to get ginstall which is used by default (which lives in /opt/csw/bin)"
1085    exit 1
1086  fi
1087  if test "`path_of $install`" = "/usr/sbin/install" ; then
1088    echo "Error: Solaris /usr/sbin/install is not an appropriate install program."
1089    echo "try ginstall from the GNU fileutils available from www.blastwave.org"
1090    echo "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
1091    exit 1
1092  fi
1093  if has ar; then
1094    :
1095  else
1096    echo "Error: No path includes ar"
1097    if test -f /usr/ccs/bin/ar ; then
1098      echo "Add /usr/ccs/bin to your path and rerun configure"
1099    fi
1100    exit 1
1101  fi
1102fi
1103
1104if test "$guest_agent" != "no" ; then
1105  if has $python; then
1106    :
1107  else
1108    echo "Python not found. Use --python=/path/to/python"
1109    exit 1
1110  fi
1111fi
1112
1113if test -z "$target_list" ; then
1114    target_list="$default_target_list"
1115else
1116    target_list=`echo "$target_list" | sed -e 's/,/ /g'`
1117fi
1118if test -z "$target_list" ; then
1119    echo "No targets enabled"
1120    exit 1
1121fi
1122# see if system emulation was really requested
1123case " $target_list " in
1124  *"-softmmu "*) softmmu=yes
1125  ;;
1126  *) softmmu=no
1127  ;;
1128esac
1129
1130feature_not_found() {
1131  feature=$1
1132
1133  echo "ERROR"
1134  echo "ERROR: User requested feature $feature"
1135  echo "ERROR: configure was not able to find it"
1136  echo "ERROR"
1137  exit 1;
1138}
1139
1140if test -z "$cross_prefix" ; then
1141
1142# ---
1143# big/little endian test
1144cat > $TMPC << EOF
1145#include <inttypes.h>
1146int main(int argc, char ** argv){
1147        volatile uint32_t i=0x01234567;
1148        return (*((uint8_t*)(&i))) == 0x67;
1149}
1150EOF
1151
1152if compile_prog "" "" ; then
1153$TMPE && bigendian="yes"
1154else
1155echo big/little test failed
1156fi
1157
1158else
1159
1160# if cross compiling, cannot launch a program, so make a static guess
1161case "$cpu" in
1162  armv4b|hppa|m68k|mips|mips64|ppc|ppc64|s390|s390x|sparc|sparc64)
1163    bigendian=yes
1164  ;;
1165esac
1166
1167fi
1168
1169# host long bits test, actually a pointer size test
1170cat > $TMPC << EOF
1171int sizeof_pointer_is_8[sizeof(void *) == 8 ? 1 : -1];
1172EOF
1173if compile_object; then
1174hostlongbits=64
1175else
1176hostlongbits=32
1177fi
1178
1179
1180##########################################
1181# NPTL probe
1182
1183if test "$nptl" != "no" ; then
1184  cat > $TMPC <<EOF
1185#include <sched.h>
1186#include <linux/futex.h>
1187void foo()
1188{
1189#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
1190#error bork
1191#endif
1192}
1193EOF
1194
1195  if compile_object ; then
1196    nptl=yes
1197  else
1198    if test "$nptl" = "yes" ; then
1199      feature_not_found "nptl"
1200    fi
1201    nptl=no
1202  fi
1203fi
1204
1205##########################################
1206# zlib check
1207
1208if test "$zlib" != "no" ; then
1209    cat > $TMPC << EOF
1210#include <zlib.h>
1211int main(void) { zlibVersion(); return 0; }
1212EOF
1213    if compile_prog "" "-lz" ; then
1214        :
1215    else
1216        echo
1217        echo "Error: zlib check failed"
1218        echo "Make sure to have the zlib libs and headers installed."
1219        echo
1220        exit 1
1221    fi
1222fi
1223
1224##########################################
1225# xen probe
1226
1227if test "$xen" != "no" ; then
1228  xen_libs="-lxenstore -lxenctrl -lxenguest"
1229
1230  # Xen unstable
1231  cat > $TMPC <<EOF
1232#include <xenctrl.h>
1233#include <xs.h>
1234#include <stdint.h>
1235#include <xen/hvm/hvm_info_table.h>
1236#if !defined(HVM_MAX_VCPUS)
1237# error HVM_MAX_VCPUS not defined
1238#endif
1239int main(void) {
1240  xc_interface *xc;
1241  xs_daemon_open();
1242  xc = xc_interface_open(0, 0, 0);
1243  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
1244  xc_gnttab_open(NULL, 0);
1245  xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
1246  return 0;
1247}
1248EOF
1249  if compile_prog "" "$xen_libs" ; then
1250    xen_ctrl_version=410
1251    xen=yes
1252
1253  # Xen 4.0.0
1254  elif (
1255      cat > $TMPC <<EOF
1256#include <xenctrl.h>
1257#include <xs.h>
1258#include <stdint.h>
1259#include <xen/hvm/hvm_info_table.h>
1260#if !defined(HVM_MAX_VCPUS)
1261# error HVM_MAX_VCPUS not defined
1262#endif
1263int main(void) {
1264  struct xen_add_to_physmap xatp = {
1265    .domid = 0, .space = XENMAPSPACE_gmfn, .idx = 0, .gpfn = 0,
1266  };
1267  xs_daemon_open();
1268  xc_interface_open();
1269  xc_gnttab_open();
1270  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
1271  xc_memory_op(0, XENMEM_add_to_physmap, &xatp);
1272  return 0;
1273}
1274EOF
1275      compile_prog "" "$xen_libs"
1276    ) ; then
1277    xen_ctrl_version=400
1278    xen=yes
1279
1280  # Xen 3.4.0
1281  elif (
1282      cat > $TMPC <<EOF
1283#include <xenctrl.h>
1284#include <xs.h>
1285int main(void) {
1286  struct xen_add_to_physmap xatp = {
1287    .domid = 0, .space = XENMAPSPACE_gmfn, .idx = 0, .gpfn = 0,
1288  };
1289  xs_daemon_open();
1290  xc_interface_open();
1291  xc_gnttab_open();
1292  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
1293  xc_memory_op(0, XENMEM_add_to_physmap, &xatp);
1294  return 0;
1295}
1296EOF
1297      compile_prog "" "$xen_libs"
1298    ) ; then
1299    xen_ctrl_version=340
1300    xen=yes
1301
1302  # Xen 3.3.0
1303  elif (
1304      cat > $TMPC <<EOF
1305#include <xenctrl.h>
1306#include <xs.h>
1307int main(void) {
1308  xs_daemon_open();
1309  xc_interface_open();
1310  xc_gnttab_open();
1311  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
1312  return 0;
1313}
1314EOF
1315      compile_prog "" "$xen_libs"
1316    ) ; then
1317    xen_ctrl_version=330
1318    xen=yes
1319
1320  # Xen not found or unsupported
1321  else
1322    if test "$xen" = "yes" ; then
1323      feature_not_found "xen"
1324    fi
1325    xen=no
1326  fi
1327
1328  if test "$xen" = yes; then
1329    libs_softmmu="$xen_libs $libs_softmmu"
1330  fi
1331fi
1332
1333##########################################
1334# pkg-config probe
1335
1336if ! has $pkg_config; then
1337  echo warning: proceeding without "$pkg_config" >&2
1338  pkg_config=/bin/false
1339fi
1340
1341##########################################
1342# libtool probe
1343
1344if ! has libtool; then
1345    libtool=
1346else
1347    libtool=libtool
1348fi
1349
1350##########################################
1351# Sparse probe
1352if test "$sparse" != "no" ; then
1353  if has cgcc; then
1354    sparse=yes
1355  else
1356    if test "$sparse" = "yes" ; then
1357      feature_not_found "sparse"
1358    fi
1359    sparse=no
1360  fi
1361fi
1362
1363##########################################
1364# SDL probe
1365
1366# Look for sdl configuration program (pkg-config or sdl-config).  Try
1367# sdl-config even without cross prefix, and favour pkg-config over sdl-config.
1368if test "`basename $sdl_config`" != sdl-config && ! has ${sdl_config}; then
1369  sdl_config=sdl-config
1370fi
1371
1372if $pkg_config sdl --modversion >/dev/null 2>&1; then
1373  sdlconfig="$pkg_config sdl"
1374  _sdlversion=`$sdlconfig --modversion 2>/dev/null | sed 's/[^0-9]//g'`
1375elif has ${sdl_config}; then
1376  sdlconfig="$sdl_config"
1377  _sdlversion=`$sdlconfig --version | sed 's/[^0-9]//g'`
1378else
1379  if test "$sdl" = "yes" ; then
1380    feature_not_found "sdl"
1381  fi
1382  sdl=no
1383fi
1384if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
1385  echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
1386fi
1387
1388sdl_too_old=no
1389if test "$sdl" != "no" ; then
1390  cat > $TMPC << EOF
1391#include <SDL.h>
1392#undef main /* We don't want SDL to override our main() */
1393int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
1394EOF
1395  sdl_cflags=`$sdlconfig --cflags 2> /dev/null`
1396  if test "$static" = "yes" ; then
1397    sdl_libs=`$sdlconfig --static-libs 2>/dev/null`
1398  else
1399    sdl_libs=`$sdlconfig --libs 2> /dev/null`
1400  fi
1401  if compile_prog "$sdl_cflags" "$sdl_libs" ; then
1402    if test "$_sdlversion" -lt 121 ; then
1403      sdl_too_old=yes
1404    else
1405      if test "$cocoa" = "no" ; then
1406        sdl=yes
1407      fi
1408    fi
1409
1410    # static link with sdl ? (note: sdl.pc's --static --libs is broken)
1411    if test "$sdl" = "yes" -a "$static" = "yes" ; then
1412      if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
1413         sdl_libs="$sdl_libs `aalib-config --static-libs 2>/dev/null`"
1414         sdl_cflags="$sdl_cflags `aalib-config --cflags 2>/dev/null`"
1415      fi
1416      if compile_prog "$sdl_cflags" "$sdl_libs" ; then
1417	:
1418      else
1419        sdl=no
1420      fi
1421    fi # static link
1422  else # sdl not found
1423    if test "$sdl" = "yes" ; then
1424      feature_not_found "sdl"
1425    fi
1426    sdl=no
1427  fi # sdl compile test
1428fi
1429
1430if test "$sdl" = "yes" ; then
1431  cat > $TMPC <<EOF
1432#include <SDL.h>
1433#if defined(SDL_VIDEO_DRIVER_X11)
1434#include <X11/XKBlib.h>
1435#else
1436#error No x11 support
1437#endif
1438int main(void) { return 0; }
1439EOF
1440  if compile_prog "$sdl_cflags" "$sdl_libs" ; then
1441    sdl_libs="$sdl_libs -lX11"
1442  fi
1443  if test "$mingw32" = "yes" ; then
1444    sdl_libs="`echo $sdl_libs | sed s/-mwindows//g` -mconsole"
1445  fi
1446  libs_softmmu="$sdl_libs $libs_softmmu"
1447fi
1448
1449##########################################
1450# VNC TLS detection
1451if test "$vnc" = "yes" -a "$vnc_tls" != "no" ; then
1452  cat > $TMPC <<EOF
1453#include <gnutls/gnutls.h>
1454int main(void) { gnutls_session_t s; gnutls_init(&s, GNUTLS_SERVER); return 0; }
1455EOF
1456  vnc_tls_cflags=`$pkg_config --cflags gnutls 2> /dev/null`
1457  vnc_tls_libs=`$pkg_config --libs gnutls 2> /dev/null`
1458  if compile_prog "$vnc_tls_cflags" "$vnc_tls_libs" ; then
1459    vnc_tls=yes
1460    libs_softmmu="$vnc_tls_libs $libs_softmmu"
1461  else
1462    if test "$vnc_tls" = "yes" ; then
1463      feature_not_found "vnc-tls"
1464    fi
1465    vnc_tls=no
1466  fi
1467fi
1468
1469##########################################
1470# VNC SASL detection
1471if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then
1472  cat > $TMPC <<EOF
1473#include <sasl/sasl.h>
1474#include <stdio.h>
1475int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
1476EOF
1477  # Assuming Cyrus-SASL installed in /usr prefix
1478  vnc_sasl_cflags=""
1479  vnc_sasl_libs="-lsasl2"
1480  if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
1481    vnc_sasl=yes
1482    libs_softmmu="$vnc_sasl_libs $libs_softmmu"
1483  else
1484    if test "$vnc_sasl" = "yes" ; then
1485      feature_not_found "vnc-sasl"
1486    fi
1487    vnc_sasl=no
1488  fi
1489fi
1490
1491##########################################
1492# VNC JPEG detection
1493if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then
1494cat > $TMPC <<EOF
1495#include <stdio.h>
1496#include <jpeglib.h>
1497int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
1498EOF
1499    vnc_jpeg_cflags=""
1500    vnc_jpeg_libs="-ljpeg"
1501  if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
1502    vnc_jpeg=yes
1503    libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
1504  else
1505    if test "$vnc_jpeg" = "yes" ; then
1506      feature_not_found "vnc-jpeg"
1507    fi
1508    vnc_jpeg=no
1509  fi
1510fi
1511
1512##########################################
1513# VNC PNG detection
1514if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then
1515cat > $TMPC <<EOF
1516//#include <stdio.h>
1517#include <png.h>
1518#include <stddef.h>
1519int main(void) {
1520    png_structp png_ptr;
1521    png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
1522    return 0;
1523}
1524EOF
1525  if $pkg_config libpng --modversion >/dev/null 2>&1; then
1526    vnc_png_cflags=`$pkg_config libpng --cflags 2> /dev/null`
1527    vnc_png_libs=`$pkg_config libpng --libs 2> /dev/null`
1528  else
1529    vnc_png_cflags=""
1530    vnc_png_libs="-lpng"
1531  fi
1532  if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
1533    vnc_png=yes
1534    libs_softmmu="$vnc_png_libs $libs_softmmu"
1535    QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
1536  else
1537    if test "$vnc_png" = "yes" ; then
1538      feature_not_found "vnc-png"
1539    fi
1540    vnc_png=no
1541  fi
1542fi
1543
1544##########################################
1545# fnmatch() probe, used for ACL routines
1546fnmatch="no"
1547cat > $TMPC << EOF
1548#include <fnmatch.h>
1549int main(void)
1550{
1551    fnmatch("foo", "foo", 0);
1552    return 0;
1553}
1554EOF
1555if compile_prog "" "" ; then
1556   fnmatch="yes"
1557fi
1558
1559##########################################
1560# uuid_generate() probe, used for vdi block driver
1561if test "$uuid" != "no" ; then
1562  uuid_libs="-luuid"
1563  cat > $TMPC << EOF
1564#include <uuid/uuid.h>
1565int main(void)
1566{
1567    uuid_t my_uuid;
1568    uuid_generate(my_uuid);
1569    return 0;
1570}
1571EOF
1572  if compile_prog "" "$uuid_libs" ; then
1573    uuid="yes"
1574    libs_softmmu="$uuid_libs $libs_softmmu"
1575    libs_tools="$uuid_libs $libs_tools"
1576  else
1577    if test "$uuid" = "yes" ; then
1578      feature_not_found "uuid"
1579    fi
1580    uuid=no
1581  fi
1582fi
1583
1584##########################################
1585# xfsctl() probe, used for raw-posix
1586if test "$xfs" != "no" ; then
1587  cat > $TMPC << EOF
1588#include <xfs/xfs.h>
1589int main(void)
1590{
1591    xfsctl(NULL, 0, 0, NULL);
1592    return 0;
1593}
1594EOF
1595  if compile_prog "" "" ; then
1596    xfs="yes"
1597  else
1598    if test "$xfs" = "yes" ; then
1599      feature_not_found "xfs"
1600    fi
1601    xfs=no
1602  fi
1603fi
1604
1605##########################################
1606# vde libraries probe
1607if test "$vde" != "no" ; then
1608  vde_libs="-lvdeplug"
1609  cat > $TMPC << EOF
1610#include <libvdeplug.h>
1611int main(void)
1612{
1613    struct vde_open_args a = {0, 0, 0};
1614    vde_open("", "", &a);
1615    return 0;
1616}
1617EOF
1618  if compile_prog "" "$vde_libs" ; then
1619    vde=yes
1620    libs_softmmu="$vde_libs $libs_softmmu"
1621    libs_tools="$vde_libs $libs_tools"
1622  else
1623    if test "$vde" = "yes" ; then
1624      feature_not_found "vde"
1625    fi
1626    vde=no
1627  fi
1628fi
1629
1630##########################################
1631# Sound support libraries probe
1632
1633audio_drv_probe()
1634{
1635    drv=$1
1636    hdr=$2
1637    lib=$3
1638    exp=$4
1639    cfl=$5
1640        cat > $TMPC << EOF
1641#include <$hdr>
1642int main(void) { $exp }
1643EOF
1644    if compile_prog "$cfl" "$lib" ; then
1645        :
1646    else
1647        echo
1648        echo "Error: $drv check failed"
1649        echo "Make sure to have the $drv libs and headers installed."
1650        echo
1651        exit 1
1652    fi
1653}
1654
1655audio_drv_list=`echo "$audio_drv_list" | sed -e 's/,/ /g'`
1656for drv in $audio_drv_list; do
1657    case $drv in
1658    alsa)
1659    audio_drv_probe $drv alsa/asoundlib.h -lasound \
1660        "snd_pcm_t **handle; return snd_pcm_close(*handle);"
1661    libs_softmmu="-lasound $libs_softmmu"
1662    ;;
1663
1664    fmod)
1665    if test -z $fmod_lib || test -z $fmod_inc; then
1666        echo
1667        echo "Error: You must specify path to FMOD library and headers"
1668        echo "Example: --fmod-inc=/path/include/fmod --fmod-lib=/path/lib/libfmod-3.74.so"
1669        echo
1670        exit 1
1671    fi
1672    audio_drv_probe $drv fmod.h $fmod_lib "return FSOUND_GetVersion();" "-I $fmod_inc"
1673    libs_softmmu="$fmod_lib $libs_softmmu"
1674    ;;
1675
1676    esd)
1677    audio_drv_probe $drv esd.h -lesd 'return esd_play_stream(0, 0, "", 0);'
1678    libs_softmmu="-lesd $libs_softmmu"
1679    audio_pt_int="yes"
1680    ;;
1681
1682    pa)
1683    audio_drv_probe $drv pulse/simple.h "-lpulse-simple -lpulse" \
1684        "pa_simple *s = 0; pa_simple_free(s); return 0;"
1685    libs_softmmu="-lpulse -lpulse-simple $libs_softmmu"
1686    audio_pt_int="yes"
1687    ;;
1688
1689    coreaudio)
1690      libs_softmmu="-framework CoreAudio $libs_softmmu"
1691    ;;
1692
1693    dsound)
1694      libs_softmmu="-lole32 -ldxguid $libs_softmmu"
1695      audio_win_int="yes"
1696    ;;
1697
1698    oss)
1699      libs_softmmu="$oss_lib $libs_softmmu"
1700    ;;
1701
1702    sdl|wav)
1703    # XXX: Probes for CoreAudio, DirectSound, SDL(?)
1704    ;;
1705
1706    winwave)
1707      libs_softmmu="-lwinmm $libs_softmmu"
1708      audio_win_int="yes"
1709    ;;
1710
1711    *)
1712    echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
1713        echo
1714        echo "Error: Unknown driver '$drv' selected"
1715        echo "Possible drivers are: $audio_possible_drivers"
1716        echo
1717        exit 1
1718    }
1719    ;;
1720    esac
1721done
1722
1723##########################################
1724# BrlAPI probe
1725
1726if test "$brlapi" != "no" ; then
1727  brlapi_libs="-lbrlapi"
1728  cat > $TMPC << EOF
1729#include <brlapi.h>
1730#include <stddef.h>
1731int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
1732EOF
1733  if compile_prog "" "$brlapi_libs" ; then
1734    brlapi=yes
1735    libs_softmmu="$brlapi_libs $libs_softmmu"
1736  else
1737    if test "$brlapi" = "yes" ; then
1738      feature_not_found "brlapi"
1739    fi
1740    brlapi=no
1741  fi
1742fi
1743
1744##########################################
1745# curses probe
1746if test "$mingw32" = "yes" ; then
1747    curses_list="-lpdcurses"
1748else
1749    curses_list="-lncurses -lcurses"
1750fi
1751
1752if test "$curses" != "no" ; then
1753  curses_found=no
1754  cat > $TMPC << EOF
1755#include <curses.h>
1756#ifdef __OpenBSD__
1757#define resize_term resizeterm
1758#endif
1759int main(void) { resize_term(0, 0); return curses_version(); }
1760EOF
1761  for curses_lib in $curses_list; do
1762    if compile_prog "" "$curses_lib" ; then
1763      curses_found=yes
1764      libs_softmmu="$curses_lib $libs_softmmu"
1765      break
1766    fi
1767  done
1768  if test "$curses_found" = "yes" ; then
1769    curses=yes
1770  else
1771    if test "$curses" = "yes" ; then
1772      feature_not_found "curses"
1773    fi
1774    curses=no
1775  fi
1776fi
1777
1778##########################################
1779# curl probe
1780
1781if $pkg_config libcurl --modversion >/dev/null 2>&1; then
1782  curlconfig="$pkg_config libcurl"
1783else
1784  curlconfig=curl-config
1785fi
1786
1787if test "$curl" != "no" ; then
1788  cat > $TMPC << EOF
1789#include <curl/curl.h>
1790int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
1791EOF
1792  curl_cflags=`$curlconfig --cflags 2>/dev/null`
1793  curl_libs=`$curlconfig --libs 2>/dev/null`
1794  if compile_prog "$curl_cflags" "$curl_libs" ; then
1795    curl=yes
1796    libs_tools="$curl_libs $libs_tools"
1797    libs_softmmu="$curl_libs $libs_softmmu"
1798  else
1799    if test "$curl" = "yes" ; then
1800      feature_not_found "curl"
1801    fi
1802    curl=no
1803  fi
1804fi # test "$curl"
1805
1806##########################################
1807# check framework probe
1808
1809if test "$check_utests" != "no" ; then
1810  cat > $TMPC << EOF
1811#include <check.h>
1812int main(void) { suite_create("qemu test"); return 0; }
1813EOF
1814  check_libs=`$pkg_config --libs check`
1815  if compile_prog "" $check_libs ; then
1816    check_utests=yes
1817    libs_tools="$check_libs $libs_tools"
1818  else
1819    if test "$check_utests" = "yes" ; then
1820      feature_not_found "check"
1821    fi
1822    check_utests=no
1823  fi
1824fi # test "$check_utests"
1825
1826##########################################
1827# bluez support probe
1828if test "$bluez" != "no" ; then
1829  cat > $TMPC << EOF
1830#include <bluetooth/bluetooth.h>
1831int main(void) { return bt_error(0); }
1832EOF
1833  bluez_cflags=`$pkg_config --cflags bluez 2> /dev/null`
1834  bluez_libs=`$pkg_config --libs bluez 2> /dev/null`
1835  if compile_prog "$bluez_cflags" "$bluez_libs" ; then
1836    bluez=yes
1837    libs_softmmu="$bluez_libs $libs_softmmu"
1838  else
1839    if test "$bluez" = "yes" ; then
1840      feature_not_found "bluez"
1841    fi
1842    bluez="no"
1843  fi
1844fi
1845
1846##########################################
1847# glib support probe
1848if $pkg_config --modversion gthread-2.0 > /dev/null 2>&1 ; then
1849    glib_cflags=`$pkg_config --cflags gthread-2.0 2>/dev/null`
1850    glib_libs=`$pkg_config --libs gthread-2.0 2>/dev/null`
1851    LIBS="$glib_libs $LIBS"
1852else
1853    echo "glib-2.0 required to compile QEMU"
1854    exit 1
1855fi
1856
1857##########################################
1858# pthread probe
1859PTHREADLIBS_LIST="-lpthread -lpthreadGC2"
1860
1861pthread=no
1862cat > $TMPC << EOF
1863#include <pthread.h>
1864int main(void) { pthread_create(0,0,0,0); return 0; }
1865EOF
1866if compile_prog "" "" ; then
1867  pthread=yes
1868else
1869  for pthread_lib in $PTHREADLIBS_LIST; do
1870    if compile_prog "" "$pthread_lib" ; then
1871      pthread=yes
1872      LIBS="$pthread_lib $LIBS"
1873      break
1874    fi
1875  done
1876fi
1877
1878if test "$mingw32" != yes -a "$pthread" = no; then
1879  echo
1880  echo "Error: pthread check failed"
1881  echo "Make sure to have the pthread libs and headers installed."
1882  echo
1883  exit 1
1884fi
1885
1886##########################################
1887# rbd probe
1888if test "$rbd" != "no" ; then
1889  cat > $TMPC <<EOF
1890#include <stdio.h>
1891#include <rbd/librbd.h>
1892int main(void) {
1893    rados_t cluster;
1894    rados_create(&cluster, NULL);
1895    return 0;
1896}
1897EOF
1898  rbd_libs="-lrbd -lrados"
1899  if compile_prog "" "$rbd_libs" ; then
1900    rbd=yes
1901    libs_tools="$rbd_libs $libs_tools"
1902    libs_softmmu="$rbd_libs $libs_softmmu"
1903  else
1904    if test "$rbd" = "yes" ; then
1905      feature_not_found "rados block device"
1906    fi
1907    rbd=no
1908  fi
1909fi
1910
1911##########################################
1912# linux-aio probe
1913
1914if test "$linux_aio" != "no" ; then
1915  cat > $TMPC <<EOF
1916#include <libaio.h>
1917#include <sys/eventfd.h>
1918#include <stddef.h>
1919int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
1920EOF
1921  if compile_prog "" "-laio" ; then
1922    linux_aio=yes
1923    libs_softmmu="$libs_softmmu -laio"
1924    libs_tools="$libs_tools -laio"
1925  else
1926    if test "$linux_aio" = "yes" ; then
1927      feature_not_found "linux AIO"
1928    fi
1929    linux_aio=no
1930  fi
1931fi
1932
1933##########################################
1934# attr probe
1935
1936if test "$attr" != "no" ; then
1937  cat > $TMPC <<EOF
1938#include <stdio.h>
1939#include <sys/types.h>
1940#include <attr/xattr.h>
1941int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
1942EOF
1943  if compile_prog "" "-lattr" ; then
1944    attr=yes
1945    LIBS="-lattr $LIBS"
1946  else
1947    if test "$attr" = "yes" ; then
1948      feature_not_found "ATTR"
1949    fi
1950    attr=no
1951  fi
1952fi
1953
1954##########################################
1955# iovec probe
1956cat > $TMPC <<EOF
1957#include <sys/types.h>
1958#include <sys/uio.h>
1959#include <unistd.h>
1960int main(void) { struct iovec iov; return 0; }
1961EOF
1962iovec=no
1963if compile_prog "" "" ; then
1964  iovec=yes
1965fi
1966
1967##########################################
1968# preadv probe
1969cat > $TMPC <<EOF
1970#include <sys/types.h>
1971#include <sys/uio.h>
1972#include <unistd.h>
1973int main(void) { preadv; }
1974EOF
1975preadv=no
1976if compile_prog "" "" ; then
1977  preadv=yes
1978fi
1979
1980##########################################
1981# fdt probe
1982if test "$fdt" != "no" ; then
1983  fdt_libs="-lfdt"
1984  cat > $TMPC << EOF
1985int main(void) { return 0; }
1986EOF
1987  if compile_prog "" "$fdt_libs" ; then
1988    fdt=yes
1989  else
1990    if test "$fdt" = "yes" ; then
1991      feature_not_found "fdt"
1992    fi
1993    fdt_libs=
1994    fdt=no
1995  fi
1996fi
1997
1998##########################################
1999# opengl probe, used by milkymist-tmu2
2000if test "$opengl" != "no" ; then
2001  opengl_libs="-lGL"
2002  cat > $TMPC << EOF
2003#include <X11/Xlib.h>
2004#include <GL/gl.h>
2005#include <GL/glx.h>
2006int main(void) { GL_VERSION; return 0; }
2007EOF
2008  if compile_prog "" "-lGL" ; then
2009    opengl=yes
2010  else
2011    if test "$opengl" = "yes" ; then
2012      feature_not_found "opengl"
2013    fi
2014    opengl_libs=
2015    opengl=no
2016  fi
2017fi
2018
2019#
2020# Check for xxxat() functions when we are building linux-user
2021# emulator.  This is done because older glibc versions don't
2022# have syscall stubs for these implemented.
2023#
2024atfile=no
2025cat > $TMPC << EOF
2026#define _ATFILE_SOURCE
2027#include <sys/types.h>
2028#include <fcntl.h>
2029#include <unistd.h>
2030
2031int
2032main(void)
2033{
2034	/* try to unlink nonexisting file */
2035	return (unlinkat(AT_FDCWD, "nonexistent_file", 0));
2036}
2037EOF
2038if compile_prog "" "" ; then
2039  atfile=yes
2040fi
2041
2042# Check for inotify functions when we are building linux-user
2043# emulator.  This is done because older glibc versions don't
2044# have syscall stubs for these implemented.  In that case we
2045# don't provide them even if kernel supports them.
2046#
2047inotify=no
2048cat > $TMPC << EOF
2049#include <sys/inotify.h>
2050
2051int
2052main(void)
2053{
2054	/* try to start inotify */
2055	return inotify_init();
2056}
2057EOF
2058if compile_prog "" "" ; then
2059  inotify=yes
2060fi
2061
2062inotify1=no
2063cat > $TMPC << EOF
2064#include <sys/inotify.h>
2065
2066int
2067main(void)
2068{
2069    /* try to start inotify */
2070    return inotify_init1(0);
2071}
2072EOF
2073if compile_prog "" "" ; then
2074  inotify1=yes
2075fi
2076
2077# check if utimensat and futimens are supported
2078utimens=no
2079cat > $TMPC << EOF
2080#define _ATFILE_SOURCE
2081#include <stddef.h>
2082#include <fcntl.h>
2083
2084int main(void)
2085{
2086    utimensat(AT_FDCWD, "foo", NULL, 0);
2087    futimens(0, NULL);
2088    return 0;
2089}
2090EOF
2091if compile_prog "" "" ; then
2092  utimens=yes
2093fi
2094
2095# check if pipe2 is there
2096pipe2=no
2097cat > $TMPC << EOF
2098#include <unistd.h>
2099#include <fcntl.h>
2100
2101int main(void)
2102{
2103    int pipefd[2];
2104    pipe2(pipefd, O_CLOEXEC);
2105    return 0;
2106}
2107EOF
2108if compile_prog "" "" ; then
2109  pipe2=yes
2110fi
2111
2112# check if accept4 is there
2113accept4=no
2114cat > $TMPC << EOF
2115#include <sys/socket.h>
2116#include <stddef.h>
2117
2118int main(void)
2119{
2120    accept4(0, NULL, NULL, SOCK_CLOEXEC);
2121    return 0;
2122}
2123EOF
2124if compile_prog "" "" ; then
2125  accept4=yes
2126fi
2127
2128# check if tee/splice is there. vmsplice was added same time.
2129splice=no
2130cat > $TMPC << EOF
2131#include <unistd.h>
2132#include <fcntl.h>
2133#include <limits.h>
2134
2135int main(void)
2136{
2137    int len, fd;
2138    len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
2139    splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
2140    return 0;
2141}
2142EOF
2143if compile_prog "" "" ; then
2144  splice=yes
2145fi
2146
2147##########################################
2148# signalfd probe
2149signalfd="no"
2150cat > $TMPC << EOF
2151#define _GNU_SOURCE
2152#include <unistd.h>
2153#include <sys/syscall.h>
2154#include <signal.h>
2155int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
2156EOF
2157
2158if compile_prog "" "" ; then
2159  signalfd=yes
2160elif test "$kvm" = "yes" -a "$io_thread" != "yes"; then
2161  echo
2162  echo "ERROR: Host kernel lacks signalfd() support,"
2163  echo "but KVM depends on it when the IO thread is disabled."
2164  echo
2165  exit 1
2166fi
2167
2168# check if eventfd is supported
2169eventfd=no
2170cat > $TMPC << EOF
2171#include <sys/eventfd.h>
2172
2173int main(void)
2174{
2175    int efd = eventfd(0, 0);
2176    return 0;
2177}
2178EOF
2179if compile_prog "" "" ; then
2180  eventfd=yes
2181fi
2182
2183# check for fallocate
2184fallocate=no
2185cat > $TMPC << EOF
2186#include <fcntl.h>
2187
2188int main(void)
2189{
2190    fallocate(0, 0, 0, 0);
2191    return 0;
2192}
2193EOF
2194if compile_prog "$ARCH_CFLAGS" "" ; then
2195  fallocate=yes
2196fi
2197
2198# check for sync_file_range
2199sync_file_range=no
2200cat > $TMPC << EOF
2201#include <fcntl.h>
2202
2203int main(void)
2204{
2205    sync_file_range(0, 0, 0, 0);
2206    return 0;
2207}
2208EOF
2209if compile_prog "$ARCH_CFLAGS" "" ; then
2210  sync_file_range=yes
2211fi
2212
2213# check for linux/fiemap.h and FS_IOC_FIEMAP
2214fiemap=no
2215cat > $TMPC << EOF
2216#include <sys/ioctl.h>
2217#include <linux/fs.h>
2218#include <linux/fiemap.h>
2219
2220int main(void)
2221{
2222    ioctl(0, FS_IOC_FIEMAP, 0);
2223    return 0;
2224}
2225EOF
2226if compile_prog "$ARCH_CFLAGS" "" ; then
2227  fiemap=yes
2228fi
2229
2230# check for dup3
2231dup3=no
2232cat > $TMPC << EOF
2233#include <unistd.h>
2234
2235int main(void)
2236{
2237    dup3(0, 0, 0);
2238    return 0;
2239}
2240EOF
2241if compile_prog "" "" ; then
2242  dup3=yes
2243fi
2244
2245# check for epoll support
2246epoll=no
2247cat > $TMPC << EOF
2248#include <sys/epoll.h>
2249
2250int main(void)
2251{
2252    epoll_create(0);
2253    return 0;
2254}
2255EOF
2256if compile_prog "$ARCH_CFLAGS" "" ; then
2257  epoll=yes
2258fi
2259
2260# epoll_create1 and epoll_pwait are later additions
2261# so we must check separately for their presence
2262epoll_create1=no
2263cat > $TMPC << EOF
2264#include <sys/epoll.h>
2265
2266int main(void)
2267{
2268    /* Note that we use epoll_create1 as a value, not as
2269     * a function being called. This is necessary so that on
2270     * old SPARC glibc versions where the function was present in
2271     * the library but not declared in the header file we will
2272     * fail the configure check. (Otherwise we will get a compiler
2273     * warning but not an error, and will proceed to fail the
2274     * qemu compile where we compile with -Werror.)
2275     */
2276    epoll_create1;
2277    return 0;
2278}
2279EOF
2280if compile_prog "$ARCH_CFLAGS" "" ; then
2281  epoll_create1=yes
2282fi
2283
2284epoll_pwait=no
2285cat > $TMPC << EOF
2286#include <sys/epoll.h>
2287
2288int main(void)
2289{
2290    epoll_pwait(0, 0, 0, 0, 0);
2291    return 0;
2292}
2293EOF
2294if compile_prog "$ARCH_CFLAGS" "" ; then
2295  epoll_pwait=yes
2296fi
2297
2298# Check if tools are available to build documentation.
2299if test "$docs" != "no" ; then
2300  if has makeinfo && has pod2man; then
2301    docs=yes
2302  else
2303    if test "$docs" = "yes" ; then
2304      feature_not_found "docs"
2305    fi
2306    docs=no
2307  fi
2308fi
2309
2310# Search for bswap_32 function
2311byteswap_h=no
2312cat > $TMPC << EOF
2313#include <byteswap.h>
2314int main(void) { return bswap_32(0); }
2315EOF
2316if compile_prog "" "" ; then
2317  byteswap_h=yes
2318fi
2319
2320# Search for bswap_32 function
2321bswap_h=no
2322cat > $TMPC << EOF
2323#include <sys/endian.h>
2324#include <sys/types.h>
2325#include <machine/bswap.h>
2326int main(void) { return bswap32(0); }
2327EOF
2328if compile_prog "" "" ; then
2329  bswap_h=yes
2330fi
2331
2332##########################################
2333# Do we need librt
2334cat > $TMPC <<EOF
2335#include <signal.h>
2336#include <time.h>
2337int main(void) { clockid_t id; return clock_gettime(id, NULL); }
2338EOF
2339
2340if compile_prog "" "" ; then
2341  :
2342elif compile_prog "" "-lrt" ; then
2343  LIBS="-lrt $LIBS"
2344fi
2345
2346if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
2347        "$aix" != "yes" -a "$haiku" != "yes" ; then
2348    libs_softmmu="-lutil $libs_softmmu"
2349fi
2350
2351##########################################
2352# check if the compiler defines offsetof
2353
2354need_offsetof=yes
2355cat > $TMPC << EOF
2356#include <stddef.h>
2357int main(void) { struct s { int f; }; return offsetof(struct s, f); }
2358EOF
2359if compile_prog "" "" ; then
2360    need_offsetof=no
2361fi
2362
2363##########################################
2364# check if the compiler understands attribute warn_unused_result
2365#
2366# This could be smarter, but gcc -Werror does not error out even when warning
2367# about attribute warn_unused_result
2368
2369gcc_attribute_warn_unused_result=no
2370cat > $TMPC << EOF
2371#if defined(__GNUC__) && (__GNUC__ < 4) && defined(__GNUC_MINOR__) && (__GNUC__ < 4)
2372#error gcc 3.3 or older
2373#endif
2374int main(void) { return 0;}
2375EOF
2376if compile_prog "" ""; then
2377    gcc_attribute_warn_unused_result=yes
2378fi
2379
2380# spice probe
2381if test "$spice" != "no" ; then
2382  cat > $TMPC << EOF
2383#include <spice.h>
2384int main(void) { spice_server_new(); return 0; }
2385EOF
2386  spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
2387  spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
2388  if $pkg_config --atleast-version=0.6.0 spice-server >/dev/null 2>&1 && \
2389     compile_prog "$spice_cflags" "$spice_libs" ; then
2390    spice="yes"
2391    libs_softmmu="$libs_softmmu $spice_libs"
2392    QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
2393  else
2394    if test "$spice" = "yes" ; then
2395      feature_not_found "spice"
2396    fi
2397    spice="no"
2398  fi
2399fi
2400
2401# check for libcacard for smartcard support
2402if test "$smartcard" != "no" ; then
2403    smartcard="yes"
2404    smartcard_cflags=""
2405    # TODO - what's the minimal nss version we support?
2406    if test "$smartcard_nss" != "no"; then
2407        if $pkg_config --atleast-version=3.12.8 nss >/dev/null 2>&1 ; then
2408            smartcard_nss="yes"
2409            smartcard_cflags="-I\$(SRC_PATH)/libcacard"
2410            libcacard_libs=$($pkg_config --libs nss 2>/dev/null)
2411            libcacard_cflags=$($pkg_config --cflags nss 2>/dev/null)
2412            QEMU_CFLAGS="$QEMU_CFLAGS $smartcard_cflags $libcacard_cflags"
2413            LIBS="$libcacard_libs $LIBS"
2414        else
2415            if test "$smartcard_nss" = "yes"; then
2416                feature_not_found "nss"
2417            fi
2418            smartcard_nss="no"
2419        fi
2420    fi
2421fi
2422if test "$smartcard" = "no" ; then
2423    smartcard_nss="no"
2424fi
2425
2426# check for usbredirparser for usb network redirection support
2427if test "$usb_redir" != "no" ; then
2428    if $pkg_config libusbredirparser >/dev/null 2>&1 ; then
2429        usb_redir="yes"
2430        usb_redir_cflags=$($pkg_config --cflags libusbredirparser 2>/dev/null)
2431        usb_redir_libs=$($pkg_config --libs libusbredirparser 2>/dev/null)
2432        QEMU_CFLAGS="$QEMU_CFLAGS $usb_redir_cflags"
2433        LIBS="$LIBS $usb_redir_libs"
2434    else
2435        if test "$usb_redir" = "yes"; then
2436            feature_not_found "usb-redir"
2437        fi
2438        usb_redir="no"
2439    fi
2440fi
2441
2442##########################################
2443
2444##########################################
2445# check if we have fdatasync
2446
2447fdatasync=no
2448cat > $TMPC << EOF
2449#include <unistd.h>
2450int main(void) {
2451#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
2452return fdatasync(0);
2453#else
2454#abort Not supported
2455#endif
2456}
2457EOF
2458if compile_prog "" "" ; then
2459    fdatasync=yes
2460fi
2461
2462##########################################
2463# check if we have madvise
2464
2465madvise=no
2466cat > $TMPC << EOF
2467#include <sys/types.h>
2468#include <sys/mman.h>
2469#include <stddef.h>
2470int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
2471EOF
2472if compile_prog "" "" ; then
2473    madvise=yes
2474fi
2475
2476##########################################
2477# check if we have posix_madvise
2478
2479posix_madvise=no
2480cat > $TMPC << EOF
2481#include <sys/mman.h>
2482#include <stddef.h>
2483int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
2484EOF
2485if compile_prog "" "" ; then
2486    posix_madvise=yes
2487fi
2488
2489##########################################
2490# check if trace backend exists
2491
2492sh "$source_path/scripts/tracetool" "--$trace_backend" --check-backend > /dev/null 2> /dev/null
2493if test "$?" -ne 0 ; then
2494  echo
2495  echo "Error: invalid trace backend"
2496  echo "Please choose a supported trace backend."
2497  echo
2498  exit 1
2499fi
2500
2501##########################################
2502# For 'ust' backend, test if ust headers are present
2503if test "$trace_backend" = "ust"; then
2504  cat > $TMPC << EOF
2505#include <ust/tracepoint.h>
2506#include <ust/marker.h>
2507int main(void) { return 0; }
2508EOF
2509  if compile_prog "" "" ; then
2510    LIBS="-lust $LIBS"
2511  else
2512    echo
2513    echo "Error: Trace backend 'ust' missing libust header files"
2514    echo
2515    exit 1
2516  fi
2517fi
2518
2519##########################################
2520# For 'dtrace' backend, test if 'dtrace' command is present
2521if test "$trace_backend" = "dtrace"; then
2522  if ! has 'dtrace' ; then
2523    echo
2524    echo "Error: dtrace command is not found in PATH $PATH"
2525    echo
2526    exit 1
2527  fi
2528  trace_backend_stap="no"
2529  if has 'stap' ; then
2530    trace_backend_stap="yes"
2531  fi
2532fi
2533
2534##########################################
2535# __sync_fetch_and_and requires at least -march=i486. Many toolchains
2536# use i686 as default anyway, but for those that don't, an explicit
2537# specification is necessary
2538if test "$vhost_net" = "yes" && test "$cpu" = "i386"; then
2539  cat > $TMPC << EOF
2540int sfaa(unsigned *ptr)
2541{
2542  return __sync_fetch_and_and(ptr, 0);
2543}
2544
2545int main(int argc, char **argv)
2546{
2547  int val = 42;
2548  sfaa(&val);
2549  return val;
2550}
2551EOF
2552  if ! compile_prog "" "" ; then
2553    CFLAGS+="-march=i486"
2554  fi
2555fi
2556
2557##########################################
2558# check if we have makecontext
2559
2560ucontext_coroutine=no
2561if test "$darwin" != "yes"; then
2562  cat > $TMPC << EOF
2563#include <ucontext.h>
2564int main(void) { makecontext(0, 0, 0); }
2565EOF
2566  if compile_prog "" "" ; then
2567      ucontext_coroutine=yes
2568  fi
2569fi
2570
2571##########################################
2572# End of CC checks
2573# After here, no more $cc or $ld runs
2574
2575if test "$debug" = "no" ; then
2576  CFLAGS="-O2 $CFLAGS"
2577fi
2578
2579# Consult white-list to determine whether to enable werror
2580# by default.  Only enable by default for git builds
2581z_version=`cut -f3 -d. $source_path/VERSION`
2582
2583if test -z "$werror" ; then
2584    if test "$z_version" = "50" -a \
2585        "$linux" = "yes" ; then
2586        werror="yes"
2587    else
2588        werror="no"
2589    fi
2590fi
2591
2592# Disable zero malloc errors for official releases unless explicitly told to
2593# enable/disable
2594if test -z "$zero_malloc" ; then
2595    if test "$z_version" = "50" ; then
2596	zero_malloc="no"
2597    else
2598	zero_malloc="yes"
2599    fi
2600fi
2601
2602if test "$werror" = "yes" ; then
2603    QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
2604fi
2605
2606if test "$solaris" = "no" ; then
2607    if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
2608        LDFLAGS="-Wl,--warn-common $LDFLAGS"
2609    fi
2610fi
2611
2612# Use ASLR, no-SEH and DEP if available
2613if test "$mingw32" = "yes" ; then
2614    for flag in --dynamicbase --no-seh --nxcompat; do
2615        if $ld --help 2>/dev/null | grep ".$flag" >/dev/null 2>/dev/null ; then
2616            LDFLAGS="-Wl,$flag $LDFLAGS"
2617        fi
2618    done
2619fi
2620
2621confdir=$sysconfdir$confsuffix
2622
2623tools=
2624if test "$softmmu" = yes ; then
2625  tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools"
2626  if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
2627      tools="qemu-nbd\$(EXESUF) $tools"
2628    if [ "$guest_agent" = "yes" ]; then
2629      tools="qemu-ga\$(EXESUF) $tools"
2630    fi
2631    if [ "$check_utests" = "yes" ]; then
2632      tools="check-qint check-qstring check-qdict check-qlist $tools"
2633      tools="check-qfloat check-qjson $tools"
2634    fi
2635  fi
2636fi
2637
2638# Mac OS X ships with a broken assembler
2639roms=
2640if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
2641        "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
2642        "$softmmu" = yes ; then
2643  roms="optionrom"
2644fi
2645if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
2646  roms="$roms spapr-rtas"
2647fi
2648
2649echo "Install prefix    $prefix"
2650echo "BIOS directory    `eval echo $datadir`"
2651echo "binary directory  `eval echo $bindir`"
2652echo "library directory `eval echo $libdir`"
2653echo "include directory `eval echo $includedir`"
2654echo "config directory  `eval echo $sysconfdir`"
2655if test "$mingw32" = "no" ; then
2656echo "Manual directory  `eval echo $mandir`"
2657echo "ELF interp prefix $interp_prefix"
2658fi
2659echo "Source path       $source_path"
2660echo "C compiler        $cc"
2661echo "Host C compiler   $host_cc"
2662echo "CFLAGS            $CFLAGS"
2663echo "QEMU_CFLAGS       $QEMU_CFLAGS"
2664echo "LDFLAGS           $LDFLAGS"
2665echo "make              $make"
2666echo "install           $install"
2667echo "python            $python"
2668echo "host CPU          $cpu"
2669echo "host big endian   $bigendian"
2670echo "target list       $target_list"
2671echo "tcg debug enabled $debug_tcg"
2672echo "Mon debug enabled $debug_mon"
2673echo "gprof enabled     $gprof"
2674echo "sparse enabled    $sparse"
2675echo "strip binaries    $strip_opt"
2676echo "profiler          $profiler"
2677echo "static build      $static"
2678echo "-Werror enabled   $werror"
2679if test "$darwin" = "yes" ; then
2680    echo "Cocoa support     $cocoa"
2681fi
2682echo "SDL support       $sdl"
2683echo "curses support    $curses"
2684echo "curl support      $curl"
2685echo "check support     $check_utests"
2686echo "mingw32 support   $mingw32"
2687echo "Audio drivers     $audio_drv_list"
2688echo "Extra audio cards $audio_card_list"
2689echo "Block whitelist   $block_drv_whitelist"
2690echo "Mixer emulation   $mixemu"
2691echo "VNC support       $vnc"
2692if test "$vnc" = "yes" ; then
2693    echo "VNC TLS support   $vnc_tls"
2694    echo "VNC SASL support  $vnc_sasl"
2695    echo "VNC JPEG support  $vnc_jpeg"
2696    echo "VNC PNG support   $vnc_png"
2697    echo "VNC thread        $vnc_thread"
2698fi
2699if test -n "$sparc_cpu"; then
2700    echo "Target Sparc Arch $sparc_cpu"
2701fi
2702echo "xen support       $xen"
2703echo "brlapi support    $brlapi"
2704echo "bluez  support    $bluez"
2705echo "Documentation     $docs"
2706[ ! -z "$uname_release" ] && \
2707echo "uname -r          $uname_release"
2708echo "NPTL support      $nptl"
2709echo "GUEST_BASE        $guest_base"
2710echo "PIE user targets  $user_pie"
2711echo "vde support       $vde"
2712echo "IO thread         $io_thread"
2713echo "Linux AIO support $linux_aio"
2714echo "ATTR/XATTR support $attr"
2715echo "Install blobs     $blobs"
2716echo "KVM support       $kvm"
2717echo "fdt support       $fdt"
2718echo "preadv support    $preadv"
2719echo "fdatasync         $fdatasync"
2720echo "madvise           $madvise"
2721echo "posix_madvise     $posix_madvise"
2722echo "uuid support      $uuid"
2723echo "vhost-net support $vhost_net"
2724echo "Trace backend     $trace_backend"
2725echo "Trace output file $trace_file-<pid>"
2726echo "spice support     $spice"
2727echo "rbd support       $rbd"
2728echo "xfsctl support    $xfs"
2729echo "nss used          $smartcard_nss"
2730echo "usb net redir     $usb_redir"
2731echo "OpenGL support    $opengl"
2732echo "build guest agent $guest_agent"
2733
2734if test "$sdl_too_old" = "yes"; then
2735echo "-> Your SDL version is too old - please upgrade to have SDL support"
2736fi
2737
2738config_host_mak="config-host.mak"
2739config_host_ld="config-host.ld"
2740
2741echo "# Automatically generated by configure - do not modify" > $config_host_mak
2742printf "# Configured with:" >> $config_host_mak
2743printf " '%s'" "$0" "$@" >> $config_host_mak
2744echo >> $config_host_mak
2745
2746echo all: >> $config_host_mak
2747echo "prefix=$prefix" >> $config_host_mak
2748echo "bindir=$bindir" >> $config_host_mak
2749echo "libdir=$libdir" >> $config_host_mak
2750echo "includedir=$includedir" >> $config_host_mak
2751echo "mandir=$mandir" >> $config_host_mak
2752echo "datadir=$datadir" >> $config_host_mak
2753echo "sysconfdir=$sysconfdir" >> $config_host_mak
2754echo "docdir=$docdir" >> $config_host_mak
2755echo "confdir=$confdir" >> $config_host_mak
2756
2757case "$cpu" in
2758  i386|x86_64|alpha|cris|hppa|ia64|lm32|m68k|microblaze|mips|mips64|ppc|ppc64|s390|s390x|sparc|sparc64|unicore32)
2759    ARCH=$cpu
2760  ;;
2761  armv4b|armv4l)
2762    ARCH=arm
2763  ;;
2764esac
2765echo "ARCH=$ARCH" >> $config_host_mak
2766if test "$debug_tcg" = "yes" ; then
2767  echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
2768fi
2769if test "$debug_mon" = "yes" ; then
2770  echo "CONFIG_DEBUG_MONITOR=y" >> $config_host_mak
2771fi
2772if test "$debug" = "yes" ; then
2773  echo "CONFIG_DEBUG_EXEC=y" >> $config_host_mak
2774fi
2775if test "$strip_opt" = "yes" ; then
2776  echo "STRIP=${strip}" >> $config_host_mak
2777fi
2778if test "$bigendian" = "yes" ; then
2779  echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
2780fi
2781echo "HOST_LONG_BITS=$hostlongbits" >> $config_host_mak
2782if test "$mingw32" = "yes" ; then
2783  echo "CONFIG_WIN32=y" >> $config_host_mak
2784  rc_version=`cat $source_path/VERSION`
2785  version_major=${rc_version%%.*}
2786  rc_version=${rc_version#*.}
2787  version_minor=${rc_version%%.*}
2788  rc_version=${rc_version#*.}
2789  version_subminor=${rc_version%%.*}
2790  version_micro=0
2791  echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
2792  echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
2793else
2794  echo "CONFIG_POSIX=y" >> $config_host_mak
2795fi
2796
2797if test "$linux" = "yes" ; then
2798  echo "CONFIG_LINUX=y" >> $config_host_mak
2799fi
2800
2801if test "$darwin" = "yes" ; then
2802  echo "CONFIG_DARWIN=y" >> $config_host_mak
2803fi
2804
2805if test "$aix" = "yes" ; then
2806  echo "CONFIG_AIX=y" >> $config_host_mak
2807fi
2808
2809if test "$solaris" = "yes" ; then
2810  echo "CONFIG_SOLARIS=y" >> $config_host_mak
2811  echo "CONFIG_SOLARIS_VERSION=$solarisrev" >> $config_host_mak
2812  if test "$needs_libsunmath" = "yes" ; then
2813    echo "CONFIG_NEEDS_LIBSUNMATH=y" >> $config_host_mak
2814  fi
2815fi
2816if test "$haiku" = "yes" ; then
2817  echo "CONFIG_HAIKU=y" >> $config_host_mak
2818fi
2819if test "$static" = "yes" ; then
2820  echo "CONFIG_STATIC=y" >> $config_host_mak
2821fi
2822if test "$profiler" = "yes" ; then
2823  echo "CONFIG_PROFILER=y" >> $config_host_mak
2824fi
2825if test "$slirp" = "yes" ; then
2826  echo "CONFIG_SLIRP=y" >> $config_host_mak
2827  QEMU_INCLUDES="-I\$(SRC_PATH)/slirp $QEMU_INCLUDES"
2828fi
2829if test "$vde" = "yes" ; then
2830  echo "CONFIG_VDE=y" >> $config_host_mak
2831fi
2832for card in $audio_card_list; do
2833    def=CONFIG_`echo $card | tr '[:lower:]' '[:upper:]'`
2834    echo "$def=y" >> $config_host_mak
2835done
2836echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
2837for drv in $audio_drv_list; do
2838    def=CONFIG_`echo $drv | tr '[:lower:]' '[:upper:]'`
2839    echo "$def=y" >> $config_host_mak
2840    if test "$drv" = "fmod"; then
2841        echo "FMOD_CFLAGS=-I$fmod_inc" >> $config_host_mak
2842    fi
2843done
2844if test "$audio_pt_int" = "yes" ; then
2845  echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
2846fi
2847if test "$audio_win_int" = "yes" ; then
2848  echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
2849fi
2850echo "CONFIG_BDRV_WHITELIST=$block_drv_whitelist" >> $config_host_mak
2851if test "$mixemu" = "yes" ; then
2852  echo "CONFIG_MIXEMU=y" >> $config_host_mak
2853fi
2854if test "$vnc" = "yes" ; then
2855  echo "CONFIG_VNC=y" >> $config_host_mak
2856fi
2857if test "$vnc_tls" = "yes" ; then
2858  echo "CONFIG_VNC_TLS=y" >> $config_host_mak
2859  echo "VNC_TLS_CFLAGS=$vnc_tls_cflags" >> $config_host_mak
2860fi
2861if test "$vnc_sasl" = "yes" ; then
2862  echo "CONFIG_VNC_SASL=y" >> $config_host_mak
2863  echo "VNC_SASL_CFLAGS=$vnc_sasl_cflags" >> $config_host_mak
2864fi
2865if test "$vnc_jpeg" = "yes" ; then
2866  echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
2867  echo "VNC_JPEG_CFLAGS=$vnc_jpeg_cflags" >> $config_host_mak
2868fi
2869if test "$vnc_png" = "yes" ; then
2870  echo "CONFIG_VNC_PNG=y" >> $config_host_mak
2871  echo "VNC_PNG_CFLAGS=$vnc_png_cflags" >> $config_host_mak
2872fi
2873if test "$vnc_thread" = "yes" ; then
2874  echo "CONFIG_VNC_THREAD=y" >> $config_host_mak
2875fi
2876if test "$fnmatch" = "yes" ; then
2877  echo "CONFIG_FNMATCH=y" >> $config_host_mak
2878fi
2879if test "$uuid" = "yes" ; then
2880  echo "CONFIG_UUID=y" >> $config_host_mak
2881fi
2882if test "$xfs" = "yes" ; then
2883  echo "CONFIG_XFS=y" >> $config_host_mak
2884fi
2885qemu_version=`head $source_path/VERSION`
2886echo "VERSION=$qemu_version" >>$config_host_mak
2887echo "PKGVERSION=$pkgversion" >>$config_host_mak
2888echo "SRC_PATH=$source_path" >> $config_host_mak
2889echo "TARGET_DIRS=$target_list" >> $config_host_mak
2890if [ "$docs" = "yes" ] ; then
2891  echo "BUILD_DOCS=yes" >> $config_host_mak
2892fi
2893if test "$sdl" = "yes" ; then
2894  echo "CONFIG_SDL=y" >> $config_host_mak
2895  echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
2896fi
2897if test "$cocoa" = "yes" ; then
2898  echo "CONFIG_COCOA=y" >> $config_host_mak
2899fi
2900if test "$curses" = "yes" ; then
2901  echo "CONFIG_CURSES=y" >> $config_host_mak
2902fi
2903if test "$atfile" = "yes" ; then
2904  echo "CONFIG_ATFILE=y" >> $config_host_mak
2905fi
2906if test "$utimens" = "yes" ; then
2907  echo "CONFIG_UTIMENSAT=y" >> $config_host_mak
2908fi
2909if test "$pipe2" = "yes" ; then
2910  echo "CONFIG_PIPE2=y" >> $config_host_mak
2911fi
2912if test "$accept4" = "yes" ; then
2913  echo "CONFIG_ACCEPT4=y" >> $config_host_mak
2914fi
2915if test "$splice" = "yes" ; then
2916  echo "CONFIG_SPLICE=y" >> $config_host_mak
2917fi
2918if test "$eventfd" = "yes" ; then
2919  echo "CONFIG_EVENTFD=y" >> $config_host_mak
2920fi
2921if test "$fallocate" = "yes" ; then
2922  echo "CONFIG_FALLOCATE=y" >> $config_host_mak
2923fi
2924if test "$sync_file_range" = "yes" ; then
2925  echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
2926fi
2927if test "$fiemap" = "yes" ; then
2928  echo "CONFIG_FIEMAP=y" >> $config_host_mak
2929fi
2930if test "$dup3" = "yes" ; then
2931  echo "CONFIG_DUP3=y" >> $config_host_mak
2932fi
2933if test "$epoll" = "yes" ; then
2934  echo "CONFIG_EPOLL=y" >> $config_host_mak
2935fi
2936if test "$epoll_create1" = "yes" ; then
2937  echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
2938fi
2939if test "$epoll_pwait" = "yes" ; then
2940  echo "CONFIG_EPOLL_PWAIT=y" >> $config_host_mak
2941fi
2942if test "$inotify" = "yes" ; then
2943  echo "CONFIG_INOTIFY=y" >> $config_host_mak
2944fi
2945if test "$inotify1" = "yes" ; then
2946  echo "CONFIG_INOTIFY1=y" >> $config_host_mak
2947fi
2948if test "$byteswap_h" = "yes" ; then
2949  echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
2950fi
2951if test "$bswap_h" = "yes" ; then
2952  echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
2953fi
2954if test "$curl" = "yes" ; then
2955  echo "CONFIG_CURL=y" >> $config_host_mak
2956  echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
2957fi
2958if test "$brlapi" = "yes" ; then
2959  echo "CONFIG_BRLAPI=y" >> $config_host_mak
2960fi
2961if test "$bluez" = "yes" ; then
2962  echo "CONFIG_BLUEZ=y" >> $config_host_mak
2963  echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
2964fi
2965echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
2966if test "$xen" = "yes" ; then
2967  echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
2968  echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
2969fi
2970if test "$io_thread" = "yes" ; then
2971  echo "CONFIG_IOTHREAD=y" >> $config_host_mak
2972fi
2973if test "$linux_aio" = "yes" ; then
2974  echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
2975fi
2976if test "$attr" = "yes" ; then
2977  echo "CONFIG_ATTR=y" >> $config_host_mak
2978fi
2979if test "$linux" = "yes" ; then
2980  if test "$attr" = "yes" ; then
2981    echo "CONFIG_VIRTFS=y" >> $config_host_mak
2982  fi
2983fi
2984if test "$blobs" = "yes" ; then
2985  echo "INSTALL_BLOBS=yes" >> $config_host_mak
2986fi
2987if test "$iovec" = "yes" ; then
2988  echo "CONFIG_IOVEC=y" >> $config_host_mak
2989fi
2990if test "$preadv" = "yes" ; then
2991  echo "CONFIG_PREADV=y" >> $config_host_mak
2992fi
2993if test "$fdt" = "yes" ; then
2994  echo "CONFIG_FDT=y" >> $config_host_mak
2995fi
2996if test "$signalfd" = "yes" ; then
2997  echo "CONFIG_SIGNALFD=y" >> $config_host_mak
2998fi
2999if test "$need_offsetof" = "yes" ; then
3000  echo "CONFIG_NEED_OFFSETOF=y" >> $config_host_mak
3001fi
3002if test "$gcc_attribute_warn_unused_result" = "yes" ; then
3003  echo "CONFIG_GCC_ATTRIBUTE_WARN_UNUSED_RESULT=y" >> $config_host_mak
3004fi
3005if test "$fdatasync" = "yes" ; then
3006  echo "CONFIG_FDATASYNC=y" >> $config_host_mak
3007fi
3008if test "$madvise" = "yes" ; then
3009  echo "CONFIG_MADVISE=y" >> $config_host_mak
3010fi
3011if test "$posix_madvise" = "yes" ; then
3012  echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
3013fi
3014
3015if test "$spice" = "yes" ; then
3016  echo "CONFIG_SPICE=y" >> $config_host_mak
3017fi
3018
3019if test "$smartcard" = "yes" ; then
3020  echo "CONFIG_SMARTCARD=y" >> $config_host_mak
3021fi
3022
3023if test "$smartcard_nss" = "yes" ; then
3024  echo "CONFIG_SMARTCARD_NSS=y" >> $config_host_mak
3025fi
3026
3027if test "$usb_redir" = "yes" ; then
3028  echo "CONFIG_USB_REDIR=y" >> $config_host_mak
3029fi
3030
3031if test "$opengl" = "yes" ; then
3032  echo "CONFIG_OPENGL=y" >> $config_host_mak
3033fi
3034
3035# XXX: suppress that
3036if [ "$bsd" = "yes" ] ; then
3037  echo "CONFIG_BSD=y" >> $config_host_mak
3038fi
3039
3040echo "CONFIG_UNAME_RELEASE=\"$uname_release\"" >> $config_host_mak
3041
3042if test "$zero_malloc" = "yes" ; then
3043  echo "CONFIG_ZERO_MALLOC=y" >> $config_host_mak
3044fi
3045if test "$rbd" = "yes" ; then
3046  echo "CONFIG_RBD=y" >> $config_host_mak
3047fi
3048
3049if test "$ucontext_coroutine" = "yes" ; then
3050  echo "CONFIG_UCONTEXT_COROUTINE=y" >> $config_host_mak
3051fi
3052
3053# USB host support
3054case "$usb" in
3055linux)
3056  echo "HOST_USB=linux" >> $config_host_mak
3057;;
3058bsd)
3059  echo "HOST_USB=bsd" >> $config_host_mak
3060;;
3061*)
3062  echo "HOST_USB=stub" >> $config_host_mak
3063;;
3064esac
3065
3066echo "TRACE_BACKEND=$trace_backend" >> $config_host_mak
3067if test "$trace_backend" = "simple"; then
3068  echo "CONFIG_SIMPLE_TRACE=y" >> $config_host_mak
3069fi
3070# Set the appropriate trace file.
3071if test "$trace_backend" = "simple"; then
3072  trace_file="\"$trace_file-\" FMT_pid"
3073fi
3074if test "$trace_backend" = "dtrace" -a "$trace_backend_stap" = "yes" ; then
3075  echo "CONFIG_SYSTEMTAP_TRACE=y" >> $config_host_mak
3076fi
3077echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
3078
3079echo "TOOLS=$tools" >> $config_host_mak
3080echo "ROMS=$roms" >> $config_host_mak
3081echo "MAKE=$make" >> $config_host_mak
3082echo "INSTALL=$install" >> $config_host_mak
3083echo "INSTALL_DIR=$install -d -m0755 -p" >> $config_host_mak
3084echo "INSTALL_DATA=$install -m0644 -p" >> $config_host_mak
3085echo "INSTALL_PROG=$install -m0755 -p" >> $config_host_mak
3086echo "PYTHON=$python" >> $config_host_mak
3087echo "CC=$cc" >> $config_host_mak
3088echo "CC_I386=$cc_i386" >> $config_host_mak
3089echo "HOST_CC=$host_cc" >> $config_host_mak
3090echo "AR=$ar" >> $config_host_mak
3091echo "OBJCOPY=$objcopy" >> $config_host_mak
3092echo "LD=$ld" >> $config_host_mak
3093echo "WINDRES=$windres" >> $config_host_mak
3094echo "LIBTOOL=$libtool" >> $config_host_mak
3095echo "CFLAGS=$CFLAGS" >> $config_host_mak
3096echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
3097echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
3098if test "$sparse" = "yes" ; then
3099  echo "CC           := REAL_CC=\"\$(CC)\" cgcc"       >> $config_host_mak
3100  echo "HOST_CC      := REAL_CC=\"\$(HOST_CC)\" cgcc"  >> $config_host_mak
3101  echo "QEMU_CFLAGS  += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
3102fi
3103echo "HELPER_CFLAGS=$helper_cflags" >> $config_host_mak
3104echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
3105echo "ARLIBS_BEGIN=$arlibs_begin" >> $config_host_mak
3106echo "ARLIBS_END=$arlibs_end" >> $config_host_mak
3107echo "LIBS+=$LIBS" >> $config_host_mak
3108echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
3109echo "EXESUF=$EXESUF" >> $config_host_mak
3110
3111# generate list of library paths for linker script
3112
3113$ld --verbose -v 2> /dev/null | grep SEARCH_DIR > ${config_host_ld}
3114
3115if test -f ${config_host_ld}~ ; then
3116  if cmp -s $config_host_ld ${config_host_ld}~ ; then
3117    mv ${config_host_ld}~ $config_host_ld
3118  else
3119    rm ${config_host_ld}~
3120  fi
3121fi
3122
3123for d in libdis libdis-user; do
3124    mkdir -p $d
3125    symlink $source_path/Makefile.dis $d/Makefile
3126    echo > $d/config.mak
3127done
3128if test "$static" = "no" -a "$user_pie" = "yes" ; then
3129  echo "QEMU_CFLAGS+=-fpie" > libdis-user/config.mak
3130fi
3131
3132for target in $target_list; do
3133target_dir="$target"
3134config_target_mak=$target_dir/config-target.mak
3135target_arch2=`echo $target | cut -d '-' -f 1`
3136target_bigendian="no"
3137
3138case "$target_arch2" in
3139  armeb|lm32|m68k|microblaze|mips|mipsn32|mips64|ppc|ppcemb|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus)
3140  target_bigendian=yes
3141  ;;
3142esac
3143target_softmmu="no"
3144target_user_only="no"
3145target_linux_user="no"
3146target_darwin_user="no"
3147target_bsd_user="no"
3148case "$target" in
3149  ${target_arch2}-softmmu)
3150    target_softmmu="yes"
3151    ;;
3152  ${target_arch2}-linux-user)
3153    if test "$linux" != "yes" ; then
3154      echo "ERROR: Target '$target' is only available on a Linux host"
3155      exit 1
3156    fi
3157    target_user_only="yes"
3158    target_linux_user="yes"
3159    ;;
3160  ${target_arch2}-darwin-user)
3161    if test "$darwin" != "yes" ; then
3162      echo "ERROR: Target '$target' is only available on a Darwin host"
3163      exit 1
3164    fi
3165    target_user_only="yes"
3166    target_darwin_user="yes"
3167    ;;
3168  ${target_arch2}-bsd-user)
3169    if test "$bsd" != "yes" ; then
3170      echo "ERROR: Target '$target' is only available on a BSD host"
3171      exit 1
3172    fi
3173    target_user_only="yes"
3174    target_bsd_user="yes"
3175    ;;
3176  *)
3177    echo "ERROR: Target '$target' not recognised"
3178    exit 1
3179    ;;
3180esac
3181
3182mkdir -p $target_dir
3183mkdir -p $target_dir/fpu
3184mkdir -p $target_dir/tcg
3185mkdir -p $target_dir/ide
3186mkdir -p $target_dir/9pfs
3187if test "$target" = "arm-linux-user" -o "$target" = "armeb-linux-user" -o "$target" = "arm-bsd-user" -o "$target" = "armeb-bsd-user" ; then
3188  mkdir -p $target_dir/nwfpe
3189fi
3190symlink $source_path/Makefile.target $target_dir/Makefile
3191
3192
3193echo "# Automatically generated by configure - do not modify" > $config_target_mak
3194
3195bflt="no"
3196target_nptl="no"
3197interp_prefix1=`echo "$interp_prefix" | sed "s/%M/$target_arch2/g"`
3198echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
3199gdb_xml_files=""
3200target_short_alignment=2
3201target_int_alignment=4
3202target_long_alignment=4
3203target_llong_alignment=8
3204target_libs_softmmu=
3205
3206TARGET_ARCH="$target_arch2"
3207TARGET_BASE_ARCH=""
3208TARGET_ABI_DIR=""
3209
3210case "$target_arch2" in
3211  i386)
3212    target_phys_bits=64
3213  ;;
3214  x86_64)
3215    TARGET_BASE_ARCH=i386
3216    target_phys_bits=64
3217    target_long_alignment=8
3218  ;;
3219  alpha)
3220    target_phys_bits=64
3221    target_long_alignment=8
3222    target_nptl="yes"
3223  ;;
3224  arm|armeb)
3225    TARGET_ARCH=arm
3226    bflt="yes"
3227    target_nptl="yes"
3228    gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
3229    target_phys_bits=32
3230    target_llong_alignment=4
3231  ;;
3232  cris)
3233    target_nptl="yes"
3234    target_phys_bits=32
3235  ;;
3236  lm32)
3237    target_phys_bits=32
3238    target_libs_softmmu="$opengl_libs"
3239  ;;
3240  m68k)
3241    bflt="yes"
3242    gdb_xml_files="cf-core.xml cf-fp.xml"
3243    target_phys_bits=32
3244    target_int_alignment=2
3245    target_long_alignment=2
3246    target_llong_alignment=2
3247  ;;
3248  microblaze|microblazeel)
3249    TARGET_ARCH=microblaze
3250    bflt="yes"
3251    target_nptl="yes"
3252    target_phys_bits=32
3253    target_libs_softmmu="$fdt_libs"
3254  ;;
3255  mips|mipsel)
3256    TARGET_ARCH=mips
3257    echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
3258    target_nptl="yes"
3259    target_phys_bits=64
3260  ;;
3261  mipsn32|mipsn32el)
3262    TARGET_ARCH=mipsn32
3263    TARGET_BASE_ARCH=mips
3264    echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
3265    target_phys_bits=64
3266  ;;
3267  mips64|mips64el)
3268    TARGET_ARCH=mips64
3269    TARGET_BASE_ARCH=mips
3270    echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
3271    target_phys_bits=64
3272    target_long_alignment=8
3273  ;;
3274  ppc)
3275    gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
3276    target_phys_bits=32
3277    target_nptl="yes"
3278    target_libs_softmmu="$fdt_libs"
3279  ;;
3280  ppcemb)
3281    TARGET_BASE_ARCH=ppc
3282    TARGET_ABI_DIR=ppc
3283    gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
3284    target_phys_bits=64
3285    target_nptl="yes"
3286    target_libs_softmmu="$fdt_libs"
3287  ;;
3288  ppc64)
3289    TARGET_BASE_ARCH=ppc
3290    TARGET_ABI_DIR=ppc
3291    gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
3292    target_phys_bits=64
3293    target_long_alignment=8
3294    target_libs_softmmu="$fdt_libs"
3295  ;;
3296  ppc64abi32)
3297    TARGET_ARCH=ppc64
3298    TARGET_BASE_ARCH=ppc
3299    TARGET_ABI_DIR=ppc
3300    echo "TARGET_ABI32=y" >> $config_target_mak
3301    gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
3302    target_phys_bits=64
3303    target_libs_softmmu="$fdt_libs"
3304  ;;
3305  sh4|sh4eb)
3306    TARGET_ARCH=sh4
3307    bflt="yes"
3308    target_nptl="yes"
3309    target_phys_bits=32
3310  ;;
3311  sparc)
3312    target_phys_bits=64
3313  ;;
3314  sparc64)
3315    TARGET_BASE_ARCH=sparc
3316    target_phys_bits=64
3317    target_long_alignment=8
3318  ;;
3319  sparc32plus)
3320    TARGET_ARCH=sparc64
3321    TARGET_BASE_ARCH=sparc
3322    TARGET_ABI_DIR=sparc
3323    echo "TARGET_ABI32=y" >> $config_target_mak
3324    target_phys_bits=64
3325  ;;
3326  s390x)
3327    target_nptl="yes"
3328    target_phys_bits=64
3329    target_long_alignment=8
3330  ;;
3331  unicore32)
3332    target_phys_bits=32
3333  ;;
3334  *)
3335    echo "Unsupported target CPU"
3336    exit 1
3337  ;;
3338esac
3339echo "TARGET_SHORT_ALIGNMENT=$target_short_alignment" >> $config_target_mak
3340echo "TARGET_INT_ALIGNMENT=$target_int_alignment" >> $config_target_mak
3341echo "TARGET_LONG_ALIGNMENT=$target_long_alignment" >> $config_target_mak
3342echo "TARGET_LLONG_ALIGNMENT=$target_llong_alignment" >> $config_target_mak
3343echo "TARGET_ARCH=$TARGET_ARCH" >> $config_target_mak
3344target_arch_name="`echo $TARGET_ARCH | tr '[:lower:]' '[:upper:]'`"
3345echo "TARGET_$target_arch_name=y" >> $config_target_mak
3346echo "TARGET_ARCH2=$target_arch2" >> $config_target_mak
3347# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
3348if [ "$TARGET_BASE_ARCH" = "" ]; then
3349  TARGET_BASE_ARCH=$TARGET_ARCH
3350fi
3351echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
3352if [ "$TARGET_ABI_DIR" = "" ]; then
3353  TARGET_ABI_DIR=$TARGET_ARCH
3354fi
3355echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
3356case "$target_arch2" in
3357  i386|x86_64)
3358    if test "$xen" = "yes" -a "$target_softmmu" = "yes" ; then
3359      target_phys_bits=64
3360      echo "CONFIG_XEN=y" >> $config_target_mak
3361    else
3362      echo "CONFIG_NO_XEN=y" >> $config_target_mak
3363    fi
3364    ;;
3365  *)
3366    echo "CONFIG_NO_XEN=y" >> $config_target_mak
3367esac
3368case "$target_arch2" in
3369  i386|x86_64|ppcemb|ppc|ppc64|s390x)
3370    # Make sure the target and host cpus are compatible
3371    if test "$kvm" = "yes" -a "$target_softmmu" = "yes" -a \
3372      \( "$target_arch2" = "$cpu" -o \
3373      \( "$target_arch2" = "ppcemb" -a "$cpu" = "ppc" \) -o \
3374      \( "$target_arch2" = "ppc64"  -a "$cpu" = "ppc" \) -o \
3375      \( "$target_arch2" = "ppc"    -a "$cpu" = "ppc64" \) -o \
3376      \( "$target_arch2" = "ppcemb" -a "$cpu" = "ppc64" \) -o \
3377      \( "$target_arch2" = "x86_64" -a "$cpu" = "i386"   \) -o \
3378      \( "$target_arch2" = "i386"   -a "$cpu" = "x86_64" \) \) ; then
3379      echo "CONFIG_KVM=y" >> $config_target_mak
3380      if test "$vhost_net" = "yes" ; then
3381        echo "CONFIG_VHOST_NET=y" >> $config_target_mak
3382      fi
3383    fi
3384esac
3385if test "$target_bigendian" = "yes" ; then
3386  echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
3387fi
3388if test "$target_softmmu" = "yes" ; then
3389  echo "TARGET_PHYS_ADDR_BITS=$target_phys_bits" >> $config_target_mak
3390  echo "CONFIG_SOFTMMU=y" >> $config_target_mak
3391  echo "LIBS+=$libs_softmmu $target_libs_softmmu" >> $config_target_mak
3392  echo "HWDIR=../libhw$target_phys_bits" >> $config_target_mak
3393  echo "subdir-$target: subdir-libhw$target_phys_bits" >> $config_host_mak
3394fi
3395if test "$target_user_only" = "yes" ; then
3396  echo "CONFIG_USER_ONLY=y" >> $config_target_mak
3397fi
3398if test "$target_linux_user" = "yes" ; then
3399  echo "CONFIG_LINUX_USER=y" >> $config_target_mak
3400fi
3401if test "$target_darwin_user" = "yes" ; then
3402  echo "CONFIG_DARWIN_USER=y" >> $config_target_mak
3403fi
3404if test "$smartcard_nss" = "yes" ; then
3405  echo "subdir-$target: subdir-libcacard" >> $config_host_mak
3406  echo "libcacard_libs=$libcacard_libs" >> $config_host_mak
3407  echo "libcacard_cflags=$libcacard_cflags" >> $config_host_mak
3408fi
3409list=""
3410if test ! -z "$gdb_xml_files" ; then
3411  for x in $gdb_xml_files; do
3412    list="$list $source_path/gdb-xml/$x"
3413  done
3414  echo "TARGET_XML_FILES=$list" >> $config_target_mak
3415fi
3416
3417if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
3418  echo "TARGET_HAS_BFLT=y" >> $config_target_mak
3419fi
3420if test "$target_user_only" = "yes" \
3421        -a "$nptl" = "yes" -a "$target_nptl" = "yes"; then
3422  echo "CONFIG_USE_NPTL=y" >> $config_target_mak
3423fi
3424if test "$target_user_only" = "yes" -a "$guest_base" = "yes"; then
3425  echo "CONFIG_USE_GUEST_BASE=y" >> $config_target_mak
3426fi
3427if test "$target_bsd_user" = "yes" ; then
3428  echo "CONFIG_BSD_USER=y" >> $config_target_mak
3429fi
3430
3431# generate QEMU_CFLAGS/LDFLAGS for targets
3432
3433cflags=""
3434includes=""
3435ldflags=""
3436
3437if test "$ARCH" = "sparc64" ; then
3438  includes="-I\$(SRC_PATH)/tcg/sparc $includes"
3439elif test "$ARCH" = "s390x" ; then
3440  includes="-I\$(SRC_PATH)/tcg/s390 $includes"
3441elif test "$ARCH" = "x86_64" ; then
3442  includes="-I\$(SRC_PATH)/tcg/i386 $includes"
3443else
3444  includes="-I\$(SRC_PATH)/tcg/\$(ARCH) $includes"
3445fi
3446includes="-I\$(SRC_PATH)/tcg $includes"
3447
3448if test "$target_user_only" = "yes" ; then
3449    libdis_config_mak=libdis-user/config.mak
3450else
3451    libdis_config_mak=libdis/config.mak
3452fi
3453
3454for i in $ARCH $TARGET_BASE_ARCH ; do
3455  case "$i" in
3456  alpha)
3457    echo "CONFIG_ALPHA_DIS=y"  >> $config_target_mak
3458    echo "CONFIG_ALPHA_DIS=y"  >> $libdis_config_mak
3459  ;;
3460  arm)
3461    echo "CONFIG_ARM_DIS=y"  >> $config_target_mak
3462    echo "CONFIG_ARM_DIS=y"  >> $libdis_config_mak
3463  ;;
3464  cris)
3465    echo "CONFIG_CRIS_DIS=y"  >> $config_target_mak
3466    echo "CONFIG_CRIS_DIS=y"  >> $libdis_config_mak
3467  ;;
3468  hppa)
3469    echo "CONFIG_HPPA_DIS=y"  >> $config_target_mak
3470    echo "CONFIG_HPPA_DIS=y"  >> $libdis_config_mak
3471  ;;
3472  i386|x86_64)
3473    echo "CONFIG_I386_DIS=y"  >> $config_target_mak
3474    echo "CONFIG_I386_DIS=y"  >> $libdis_config_mak
3475  ;;
3476  ia64*)
3477    echo "CONFIG_IA64_DIS=y"  >> $config_target_mak
3478    echo "CONFIG_IA64_DIS=y"  >> $libdis_config_mak
3479  ;;
3480  m68k)
3481    echo "CONFIG_M68K_DIS=y"  >> $config_target_mak
3482    echo "CONFIG_M68K_DIS=y"  >> $libdis_config_mak
3483  ;;
3484  microblaze*)
3485    echo "CONFIG_MICROBLAZE_DIS=y"  >> $config_target_mak
3486    echo "CONFIG_MICROBLAZE_DIS=y"  >> $libdis_config_mak
3487  ;;
3488  mips*)
3489    echo "CONFIG_MIPS_DIS=y"  >> $config_target_mak
3490    echo "CONFIG_MIPS_DIS=y"  >> $libdis_config_mak
3491  ;;
3492  ppc*)
3493    echo "CONFIG_PPC_DIS=y"  >> $config_target_mak
3494    echo "CONFIG_PPC_DIS=y"  >> $libdis_config_mak
3495  ;;
3496  s390*)
3497    echo "CONFIG_S390_DIS=y"  >> $config_target_mak
3498    echo "CONFIG_S390_DIS=y"  >> $libdis_config_mak
3499  ;;
3500  sh4)
3501    echo "CONFIG_SH4_DIS=y"  >> $config_target_mak
3502    echo "CONFIG_SH4_DIS=y"  >> $libdis_config_mak
3503  ;;
3504  sparc*)
3505    echo "CONFIG_SPARC_DIS=y"  >> $config_target_mak
3506    echo "CONFIG_SPARC_DIS=y"  >> $libdis_config_mak
3507  ;;
3508  esac
3509done
3510
3511case "$ARCH" in
3512alpha)
3513  # Ensure there's only a single GP
3514  cflags="-msmall-data $cflags"
3515;;
3516esac
3517
3518if test "$target_softmmu" = "yes" ; then
3519  case "$TARGET_BASE_ARCH" in
3520  arm)
3521    cflags="-DHAS_AUDIO $cflags"
3522  ;;
3523  lm32)
3524    cflags="-DHAS_AUDIO $cflags"
3525  ;;
3526  i386|mips|ppc)
3527    cflags="-DHAS_AUDIO -DHAS_AUDIO_CHOICE $cflags"
3528  ;;
3529  esac
3530fi
3531
3532if test "$target_user_only" = "yes" -a "$static" = "no" -a \
3533	"$user_pie" = "yes" ; then
3534  cflags="-fpie $cflags"
3535  ldflags="-pie $ldflags"
3536fi
3537
3538if test "$target_softmmu" = "yes" -a \( \
3539        "$TARGET_ARCH" = "microblaze" -o \
3540        "$TARGET_ARCH" = "cris" \) ; then
3541  echo "CONFIG_NEED_MMU=y" >> $config_target_mak
3542fi
3543
3544if test "$gprof" = "yes" ; then
3545  echo "TARGET_GPROF=yes" >> $config_target_mak
3546  if test "$target_linux_user" = "yes" ; then
3547    cflags="-p $cflags"
3548    ldflags="-p $ldflags"
3549  fi
3550  if test "$target_softmmu" = "yes" ; then
3551    ldflags="-p $ldflags"
3552    echo "GPROF_CFLAGS=-p" >> $config_target_mak
3553  fi
3554fi
3555
3556linker_script="-Wl,-T../config-host.ld -Wl,-T,\$(SRC_PATH)/\$(ARCH).ld"
3557if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
3558  case "$ARCH" in
3559  sparc)
3560    # -static is used to avoid g1/g3 usage by the dynamic linker
3561    ldflags="$linker_script -static $ldflags"
3562    ;;
3563  alpha | s390x)
3564    # The default placement of the application is fine.
3565    ;;
3566  *)
3567    ldflags="$linker_script $ldflags"
3568    ;;
3569  esac
3570fi
3571
3572# use included Linux headers
3573if test "$linux" = "yes" ; then
3574  includes="-I\$(SRC_PATH)/linux-headers $includes"
3575  mkdir -p linux-headers
3576  case "$cpu" in
3577  i386|x86_64)
3578    symlink $source_path/linux-headers/asm-x86 linux-headers/asm
3579    ;;
3580  ppcemb|ppc|ppc64)
3581    symlink $source_path/linux-headers/asm-powerpc linux-headers/asm
3582    ;;
3583  s390x)
3584    symlink $source_path/linux-headers/asm-s390 linux-headers/asm
3585    ;;
3586  esac
3587fi
3588
3589echo "LDFLAGS+=$ldflags" >> $config_target_mak
3590echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
3591echo "QEMU_INCLUDES+=$includes" >> $config_target_mak
3592
3593done # for target in $targets
3594
3595# build tree in object directory in case the source is not in the current directory
3596DIRS="tests tests/cris slirp audio block net pc-bios/optionrom"
3597DIRS="$DIRS pc-bios/spapr-rtas"
3598DIRS="$DIRS roms/seabios roms/vgabios"
3599DIRS="$DIRS fsdev ui"
3600DIRS="$DIRS qapi"
3601DIRS="$DIRS qga"
3602FILES="Makefile tests/Makefile"
3603FILES="$FILES tests/cris/Makefile tests/cris/.gdbinit"
3604FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
3605FILES="$FILES pc-bios/spapr-rtas/Makefile"
3606FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
3607for bios_file in $source_path/pc-bios/*.bin $source_path/pc-bios/*.rom $source_path/pc-bios/*.dtb $source_path/pc-bios/openbios-*; do
3608    FILES="$FILES pc-bios/`basename $bios_file`"
3609done
3610mkdir -p $DIRS
3611for f in $FILES ; do
3612    if [ -e "$source_path/$f" ] && ! [ -e "$f" ]; then
3613        symlink "$source_path/$f" "$f"
3614    fi
3615done
3616
3617# temporary config to build submodules
3618for rom in seabios vgabios ; do
3619    config_mak=roms/$rom/config.mak
3620    echo "# Automatically generated by configure - do not modify" > $config_mak
3621    echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
3622    echo "CC=$cc" >> $config_mak
3623    echo "BCC=bcc" >> $config_mak
3624    echo "CPP=${cross_prefix}cpp" >> $config_mak
3625    echo "OBJCOPY=objcopy" >> $config_mak
3626    echo "IASL=iasl" >> $config_mak
3627    echo "LD=$ld" >> $config_mak
3628done
3629
3630for hwlib in 32 64; do
3631  d=libhw$hwlib
3632  mkdir -p $d
3633  mkdir -p $d/ide
3634  symlink $source_path/Makefile.hw $d/Makefile
3635  mkdir -p $d/9pfs
3636  echo "QEMU_CFLAGS+=-DTARGET_PHYS_ADDR_BITS=$hwlib" > $d/config.mak
3637done
3638
3639if [ "$source_path" != `pwd` ]; then
3640    # out of tree build
3641    mkdir -p libcacard
3642    rm -f libcacard/Makefile
3643    symlink "$source_path/libcacard/Makefile" libcacard/Makefile
3644fi
3645
3646d=libuser
3647mkdir -p $d
3648symlink $source_path/Makefile.user $d/Makefile
3649if test "$static" = "no" -a "$user_pie" = "yes" ; then
3650  echo "QEMU_CFLAGS+=-fpie" > $d/config.mak
3651fi
3652
3653if test "$docs" = "yes" ; then
3654  mkdir -p QMP
3655fi
3656