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