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