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