X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=configure;h=5f463b05b5c11db3bc490e411951f32ed68ed662;hb=be59ce1f48720b385c124f7567aedd5829f96540;hp=6a37d6e72765140fb228fdcc6ab68707b56d537a;hpb=4ffcedb674469fb18bae562974fff610e9d4d8c7;p=qemu.git diff --git a/configure b/configure index 6a37d6e72..5f463b05b 100755 --- a/configure +++ b/configure @@ -13,7 +13,7 @@ fi TMPC="${TMPDIR1}/qemu-conf-${RANDOM}-$$-${RANDOM}.c" TMPO="${TMPDIR1}/qemu-conf-${RANDOM}-$$-${RANDOM}.o" -TMPE="${TMPDIR1}/qemu-conf-${RANDOM}-$$-${RANDOM}" +TMPE="${TMPDIR1}/qemu-conf-${RANDOM}-$$-${RANDOM}.exe" trap "rm -f $TMPC $TMPO $TMPE ; exit" 0 2 3 15 @@ -38,6 +38,7 @@ cc="gcc" audio_drv_list="" audio_card_list="ac97 es1370 sb16" audio_possible_cards="ac97 es1370 sb16 cs4231a adlib gus" +block_drv_whitelist="" host_cc="gcc" ar="ar" make="make" @@ -48,6 +49,7 @@ helper_cflags="" libs_softmmu="" libs_tools="" audio_pt_int="" +audio_win_int="" # parse CC options first for opt do @@ -89,6 +91,26 @@ ar="${cross_prefix}${ar}" objcopy="${cross_prefix}${objcopy}" ld="${cross_prefix}${ld}" +# default flags for all hosts +QEMU_CFLAGS="-fno-strict-aliasing $QEMU_CFLAGS" +CFLAGS="-g $CFLAGS" +QEMU_CFLAGS="-Wall -Wundef -Wendif-labels -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS" +QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS" +QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS" +QEMU_CFLAGS="-U_FORTIFY_SOURCE $QEMU_CFLAGS" +QEMU_CFLAGS="-I. -I\$(SRC_PATH) $QEMU_CFLAGS" +LDFLAGS="-g $LDFLAGS" + +gcc_flags="-Wold-style-declaration -Wold-style-definition" +cat > $TMPC << EOF +int main(void) { } +EOF +for flag in $gcc_flags; do + if compile_prog "$QEMU_CFLAGS" "$flag" ; then + QEMU_CFLAGS="$flag $QEMU_CFLAGS" + fi +done + # check that the C compiler works. cat > $TMPC </dev/null)"; then - sparse="no" -fi - # # Solaris specific configure tool chain decisions # @@ -748,7 +858,7 @@ feature_not_found() { echo "ERROR" echo "ERROR: User requested feature $feature" - echo "ERROR: configure was not able to found it" + echo "ERROR: configure was not able to find it" echo "ERROR" exit 1; } @@ -775,7 +885,7 @@ else # if cross compiling, cannot launch a program, so make a static guess case "$cpu" in - armv4b|hppa|m68k|mips|mips64|ppc|ppc64|s390|sparc|sparc64) + armv4b|hppa|m68k|mips|mips64|ppc|ppc64|s390|s390x|sparc|sparc64) bigendian=yes ;; esac @@ -785,13 +895,17 @@ fi # host long bits test hostlongbits="32" case "$cpu" in - x86_64|alpha|ia64|sparc64|ppc64) + x86_64|alpha|ia64|sparc64|ppc64|s390x) hostlongbits=64 ;; esac -# Check host NPTL support -cat > $TMPC < $TMPC < #include void foo() @@ -802,10 +916,14 @@ void foo() } EOF -if compile_object ; then - : -else - nptl="no" + if compile_object ; then + nptl=yes + else + if test "$nptl" = "yes" ; then + feature_not_found "nptl" + fi + nptl=no + fi fi ########################################## @@ -828,7 +946,7 @@ fi ########################################## # xen probe -if test "$xen" = "yes" ; then +if test "$xen" != "no" ; then xen_libs="-lxenstore -lxenctrl -lxenguest" cat > $TMPC < @@ -836,9 +954,26 @@ if test "$xen" = "yes" ; then int main(void) { xs_daemon_open(); xc_interface_open(); return 0; } EOF if compile_prog "" "$xen_libs" ; then + xen=yes libs_softmmu="$xen_libs $libs_softmmu" else - xen="no" + if test "$xen" = "yes" ; then + feature_not_found "xen" + fi + xen=no + fi +fi + +########################################## +# Sparse probe +if test "$sparse" != "no" ; then + if test -x "$(which cgcc 2>/dev/null)"; then + sparse=yes + else + if test "$sparse" = "yes" ; then + feature_not_found "sparse" + fi + sparse=no fi fi @@ -847,8 +982,7 @@ fi sdl_too_old=no -if test "$sdl" = "yes" ; then - sdl=no +if test "$sdl" != "no" ; then cat > $TMPC << EOF #include #undef main /* We don't want SDL to override our main() */ @@ -879,6 +1013,11 @@ EOF sdl=no fi fi # static link + else # sdl not found + if test "$sdl" = "yes" ; then + feature_not_found "sdl" + fi + sdl=no fi # sdl compile test fi @@ -903,36 +1042,44 @@ fi ########################################## # VNC TLS detection -if test "$vnc_tls" = "yes" ; then -cat > $TMPC < $TMPC < int main(void) { gnutls_session_t s; gnutls_init(&s, GNUTLS_SERVER); return 0; } EOF - vnc_tls_cflags=`pkg-config --cflags gnutls 2> /dev/null` - vnc_tls_libs=`pkg-config --libs gnutls 2> /dev/null` - if compile_prog "$vnc_tls_cflags" "$vnc_tls_libs" ; then - libs_softmmu="$vnc_tls_libs $libs_softmmu" - else - vnc_tls="no" + vnc_tls_cflags=`pkg-config --cflags gnutls 2> /dev/null` + vnc_tls_libs=`pkg-config --libs gnutls 2> /dev/null` + if compile_prog "$vnc_tls_cflags" "$vnc_tls_libs" ; then + vnc_tls=yes + libs_softmmu="$vnc_tls_libs $libs_softmmu" + else + if test "$vnc_tls" = "yes" ; then + feature_not_found "vnc-tls" fi + vnc_tls=no + fi fi ########################################## # VNC SASL detection -if test "$vnc_sasl" = "yes" ; then -cat > $TMPC < $TMPC < #include int main(void) { sasl_server_init(NULL, "qemu"); return 0; } EOF - # Assuming Cyrus-SASL installed in /usr prefix - vnc_sasl_cflags="" - vnc_sasl_libs="-lsasl2" - if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then - libs_softmmu="$vnc_sasl_libs $libs_softmmu" - else - vnc_sasl="no" + # Assuming Cyrus-SASL installed in /usr prefix + vnc_sasl_cflags="" + vnc_sasl_libs="-lsasl2" + if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then + vnc_sasl=yes + libs_softmmu="$vnc_sasl_libs $libs_softmmu" + else + if test "$vnc_sasl" = "yes" ; then + feature_not_found "vnc-sasl" fi + vnc_sasl=no + fi fi ########################################## @@ -950,10 +1097,34 @@ if compile_prog "" "" ; then fnmatch="yes" fi +########################################## +# uuid_generate() probe, used for vdi block driver +if test "$uuid" != "no" ; then + uuid_libs="-luuid" + cat > $TMPC << EOF +#include +int main(void) +{ + uuid_t my_uuid; + uuid_generate(my_uuid); + return 0; +} +EOF + if compile_prog "" "$uuid_libs" ; then + uuid="yes" + libs_softmmu="$uuid_libs $libs_softmmu" + libs_tools="$uuid_libs $libs_tools" + else + if test "$uuid" = "yes" ; then + feature_not_found "uuid" + fi + uuid=no + fi +fi + ########################################## # vde libraries probe -if test "$vde" = "yes" ; then - vde=no +if test "$vde" != "no" ; then vde_libs="-lvdeplug" cat > $TMPC << EOF #include @@ -968,6 +1139,11 @@ EOF vde=yes libs_softmmu="$vde_libs $libs_softmmu" libs_tools="$vde_libs $libs_tools" + else + if test "$vde" = "yes" ; then + feature_not_found "vde" + fi + vde=no fi fi @@ -1024,9 +1200,9 @@ for drv in $audio_drv_list; do ;; pa) - audio_drv_probe $drv pulse/simple.h -lpulse-simple \ + audio_drv_probe $drv pulse/simple.h "-lpulse-simple -lpulse" \ "pa_simple *s = NULL; pa_simple_free(s); return 0;" - libs_softmmu="-lpulse-simple $libs_softmmu" + libs_softmmu="-lpulse -lpulse-simple $libs_softmmu" audio_pt_int="yes" ;; @@ -1036,6 +1212,7 @@ for drv in $audio_drv_list; do dsound) libs_softmmu="-lole32 -ldxguid $libs_softmmu" + audio_win_int="yes" ;; oss) @@ -1046,6 +1223,11 @@ for drv in $audio_drv_list; do # XXX: Probes for CoreAudio, DirectSound, SDL(?) ;; + winwave) + libs_softmmu="-lwinmm $libs_softmmu" + audio_win_int="yes" + ;; + *) echo "$audio_possible_drivers" | grep -q "\<$drv\>" || { echo @@ -1082,8 +1264,8 @@ fi # curses probe curses_list="-lncurses -lcurses" -if test "$curses" = "yes" ; then - curses=no +if test "$curses" != "no" ; then + curses_found=no cat > $TMPC << EOF #include #ifdef __OpenBSD__ @@ -1093,18 +1275,25 @@ int main(void) { resize_term(0, 0); return curses_version(); } EOF for curses_lib in $curses_list; do if compile_prog "" "$curses_lib" ; then - curses=yes + curses_found=yes libs_softmmu="$curses_lib $libs_softmmu" break fi done + if test "$curses_found" = "yes" ; then + curses=yes + else + if test "$curses" = "yes" ; then + feature_not_found "curses" + fi + curses=no + fi fi ########################################## # curl probe -if test "$curl" = "yes" ; then - curl=no +if test "$curl" != "no" ; then cat > $TMPC << EOF #include int main(void) { return curl_easy_init(); } @@ -1115,15 +1304,37 @@ EOF curl=yes libs_tools="$curl_libs $libs_tools" libs_softmmu="$curl_libs $libs_softmmu" + else + if test "$curl" = "yes" ; then + feature_not_found "curl" + fi + curl=no fi fi # test "$curl" +########################################## +# check framework probe + +if test "$check_utests" != "no" ; then + cat > $TMPC << EOF +#include +int main(void) { suite_create("qemu test"); return 0; } +EOF + check_libs=`pkg-config --libs check` + if compile_prog "" $check_libs ; then + check_utests=yes + libs_tools="$check_libs $libs_tools" + else + if test "$check_utests" = "yes" ; then + feature_not_found "check" + fi + check_utests=no + fi +fi # test "$check_utests" + ########################################## # bluez support probe -if test "$bluez" = "yes" ; then - `pkg-config bluez 2> /dev/null` || bluez="no" -fi -if test "$bluez" = "yes" ; then +if test "$bluez" != "no" ; then cat > $TMPC << EOF #include int main(void) { return bt_error(0); } @@ -1131,15 +1342,19 @@ EOF bluez_cflags=`pkg-config --cflags bluez 2> /dev/null` bluez_libs=`pkg-config --libs bluez 2> /dev/null` if compile_prog "$bluez_cflags" "$bluez_libs" ; then + bluez=yes libs_softmmu="$bluez_libs $libs_softmmu" else + if test "$bluez" = "yes" ; then + feature_not_found "bluez" + fi bluez="no" fi fi ########################################## # kvm probe -if test "$kvm" = "yes" ; then +if test "$kvm" != "no" ; then cat > $TMPC < #if !defined(KVM_API_VERSION) || KVM_API_VERSION < 12 || KVM_API_VERSION > 12 @@ -1163,6 +1378,8 @@ EOF kvm_cflags="$kvm_cflags -I$kerneldir/arch/x86/include" elif test "$cpu" = "ppc" -a -d "$kerneldir/arch/powerpc/include" ; then kvm_cflags="$kvm_cflags -I$kerneldir/arch/powerpc/include" + elif test "$cpu" = "s390x" -a -d "$kerneldir/arch/s390/include" ; then + kvm_cflags="$kvm_cflags -I$kerneldir/arch/s390/include" elif test -d "$kerneldir/arch/$cpu/include" ; then kvm_cflags="$kvm_cflags -I$kerneldir/arch/$cpu/include" fi @@ -1170,20 +1387,23 @@ EOF kvm_cflags="" fi if compile_prog "$kvm_cflags" "" ; then - : + kvm=yes else - kvm="no"; - if [ -x "`which awk 2>/dev/null`" ] && \ - [ -x "`which grep 2>/dev/null`" ]; then - kvmerr=`LANG=C $cc $QEMU_CFLAGS -o $TMPE $kvm_cflags $TMPC 2>&1 \ + if test "$kvm" = "yes" ; then + if [ -x "`which awk 2>/dev/null`" ] && \ + [ -x "`which grep 2>/dev/null`" ]; then + kvmerr=`LANG=C $cc $QEMU_CFLAGS -o $TMPE $kvm_cflags $TMPC 2>&1 \ | grep "error: " \ | awk -F "error: " '{if (NR>1) printf(", "); printf("%s",$2);}'` - if test "$kvmerr" != "" ; then - kvm="no - (${kvmerr})\n\ - NOTE: To enable KVM support, update your kernel to 2.6.29+ or install \ -recent kvm-kmod from http://sourceforge.net/projects/kvm." + if test "$kvmerr" != "" ; then + echo -e "${kvmerr}\n\ + NOTE: To enable KVM support, update your kernel to 2.6.29+ or install \ + recent kvm-kmod from http://sourceforge.net/projects/kvm." + fi fi + feature_not_found "kvm" fi + kvm=no fi fi @@ -1204,7 +1424,7 @@ for pthread_lib in $PTHREADLIBS_LIST; do fi done -if test "$pthread" = no; then +if test "$mingw32" != yes -a "$pthread" = no; then echo echo "Error: pthread check failed" echo "Make sure to have the pthread libs and headers installed." @@ -1212,6 +1432,26 @@ if test "$pthread" = no; then exit 1 fi +########################################## +# linux-aio probe + +if test "$linux_aio" != "no" ; then + cat > $TMPC < +#include +int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; } +EOF + if compile_prog "" "-laio" ; then + linux_aio=yes + LIBS="$LIBS -laio" + else + if test "$linux_aio" = "yes" ; then + feature_not_found "linux AIO" + fi + linux_aio=no + fi +fi + ########################################## # iovec probe cat > $TMPC < $TMPC << EOF int main(void) { return 0; } @@ -1249,6 +1488,11 @@ EOF if compile_prog "" "$fdt_libs" ; then fdt=yes libs_softmmu="$fdt_libs $libs_softmmu" + else + if test "$fdt" = "yes" ; then + feature_not_found "fdt" + fi + fdt=no fi fi @@ -1332,6 +1576,23 @@ if compile_prog "" "" ; then pipe2=yes fi +# check if accept4 is there +accept4=no +cat > $TMPC << EOF +#define _GNU_SOURCE +#include +#include + +int main(void) +{ + accept4(0, NULL, NULL, SOCK_CLOEXEC); + return 0; +} +EOF +if compile_prog "" "" ; then + accept4=yes +fi + # check if tee/splice is there. vmsplice was added same time. splice=no cat > $TMPC << EOF @@ -1352,12 +1613,65 @@ if compile_prog "" "" ; then splice=yes fi +# check if eventfd is supported +eventfd=no +cat > $TMPC << EOF +#include + +int main(void) +{ + int efd = eventfd(0, 0); + return 0; +} +EOF +if compile_prog "" "" ; then + eventfd=yes +fi + +# check for fallocate +fallocate=no +cat > $TMPC << EOF +#include + +int main(void) +{ + fallocate(0, 0, 0, 0); + return 0; +} +EOF +if compile_prog "$ARCH_CFLAGS" "" ; then + fallocate=yes +fi + +# check for dup3 +dup3=no +cat > $TMPC << EOF +#include + +int main(void) +{ + dup3(0, 0, 0); + return 0; +} +EOF +if compile_prog "" "" ; then + dup3=yes +fi + # Check if tools are available to build documentation. -if test "$build_docs" = "yes" -a \( ! -x "`which texi2html 2>/dev/null`" -o ! -x "`which pod2man 2>/dev/null`" \) ; then - build_docs="no" +if test "$docs" != "no" ; then + if test -x "`which texi2html 2>/dev/null`" -a \ + -x "`which pod2man 2>/dev/null`" ; then + docs=yes + else + if test "$docs" = "yes" ; then + feature_not_found "docs" + fi + docs=no + fi fi -# Search for bsawp_32 function +# Search for bswap_32 function byteswap_h=no cat > $TMPC << EOF #include @@ -1367,7 +1681,7 @@ if compile_prog "" "" ; then byteswap_h=yes fi -# Search for bsawp_32 function +# Search for bswap_32 function bswap_h=no cat > $TMPC << EOF #include @@ -1412,7 +1726,7 @@ if check_linker_flags --whole-archive --no-whole-archive ; then arlibs_end="-Wl,--no-whole-archive" elif check_linker_flags -z,allextract -z,defaultextract ; then # Solaris ld - arlibs_begin"=-Wl,-z,allextract" + arlibs_begin="-Wl,-z,allextract" arlibs_end="-Wl,-z,defaultextract" elif check_linker_flags -all_load ; then # Mac OS X @@ -1424,31 +1738,64 @@ else exit 1 fi -if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaries" != yes -a \ +if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \ "$aix" != "yes" ; then libs_softmmu="-lutil $libs_softmmu" fi +########################################## +# check if the compiler defines offsetof + +need_offsetof=yes +cat > $TMPC << EOF +#include +int main(void) { struct s { int f; }; return offsetof(struct s, f); } +EOF +if compile_prog "" "" ; then + need_offsetof=no +fi + +########################################## +# check if the compiler understands attribute warn_unused_result +# +# This could be smarter, but gcc -Werror does not error out even when warning +# about attribute warn_unused_result + +gcc_attribute_warn_unused_result=no +cat > $TMPC << EOF +#if defined(__GNUC__) && (__GNUC__ < 4) && defined(__GNUC_MINOR__) && (__GNUC__ < 4) +#error gcc 3.3 or older +#endif +int main(void) { return 0;} +EOF +if compile_prog "" ""; then + gcc_attribute_warn_unused_result=yes +fi + +########################################## +# check if we have fdatasync + +fdatasync=no +cat > $TMPC << EOF +#include +int main(void) { return fdatasync(0); } +EOF +if compile_prog "" "" ; then + fdatasync=yes +fi + # End of CC checks # After here, no more $cc or $ld runs -# default flags for all hosts -QEMU_CFLAGS="-fno-strict-aliasing $QEMU_CFLAGS" -CFLAGS="-g $CFLAGS" if test "$debug" = "no" ; then CFLAGS="-O2 $CFLAGS" fi -QEMU_CFLAGS="-Wall -Wundef -Wendif-labels -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS" -QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS" -QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS" -QEMU_CFLAGS="-U_FORTIFY_SOURCE $QEMU_CFLAGS" -QEMU_CFLAGS="-I. -I\$(SRC_PATH) -MMD -MP -MT \$@ $QEMU_CFLAGS" -LDFLAGS="-g $LDFLAGS" # Consult white-list to determine whether to enable werror # by default. Only enable by default for git builds +z_version=`cut -f3 -d. $source_path/VERSION` + if test -z "$werror" ; then - z_version=`cut -f3 -d. $source_path/VERSION` if test "$z_version" = "50" -a \ "$linux" = "yes" ; then werror="yes" @@ -1457,6 +1804,16 @@ if test -z "$werror" ; then fi fi +# Disable zero malloc errors for official releases unless explicitly told to +# enable/disable +if test -z "$zero_malloc" ; then + if test "$z_version" = "50" ; then + zero_malloc="no" + else + zero_malloc="yes" + fi +fi + if test "$werror" = "yes" ; then QEMU_CFLAGS="-Werror $QEMU_CFLAGS" fi @@ -1516,9 +1873,11 @@ fi echo "SDL support $sdl" echo "curses support $curses" echo "curl support $curl" +echo "check support $check_utests" echo "mingw32 support $mingw32" echo "Audio drivers $audio_drv_list" echo "Extra audio cards $audio_card_list" +echo "Block whitelist $block_drv_whitelist" echo "Mixer emulation $mixemu" echo "VNC TLS support $vnc_tls" echo "VNC SASL support $vnc_sasl" @@ -1527,30 +1886,30 @@ if test -n "$sparc_cpu"; then fi echo "xen support $xen" echo "brlapi support $brlapi" -echo "Documentation $build_docs" +echo "bluez support $bluez" +echo "Documentation $docs" [ ! -z "$uname_release" ] && \ echo "uname -r $uname_release" echo "NPTL support $nptl" echo "GUEST_BASE $guest_base" +echo "PIE user targets $user_pie" echo "vde support $vde" echo "IO thread $io_thread" +echo "Linux AIO support $linux_aio" echo "Install blobs $blobs" -echo -e "KVM support $kvm" +echo "KVM support $kvm" echo "fdt support $fdt" echo "preadv support $preadv" +echo "fdatasync $fdatasync" +echo "uuid support $uuid" if test $sdl_too_old = "yes"; then echo "-> Your SDL version is too old - please upgrade to have SDL support" fi config_host_mak="config-host.mak" -config_host_h="config-host.h" config_host_ld="config-host.ld" -#echo "Creating $config_host_mak and $config_host_h" - -test -f $config_host_h && mv $config_host_h ${config_host_h}~ - echo "# Automatically generated by configure - do not modify" > $config_host_mak printf "# Configured with:" >> $config_host_mak printf " '%s'" "$0" "$@" >> $config_host_mak @@ -1559,7 +1918,7 @@ echo >> $config_host_mak echo "CONFIG_QEMU_SHAREDIR=\"$prefix$datasuffix\"" >> $config_host_mak case "$cpu" in - i386|x86_64|alpha|cris|hppa|ia64|m68k|microblaze|mips|mips64|ppc|ppc64|s390|sparc|sparc64) + i386|x86_64|alpha|cris|hppa|ia64|m68k|microblaze|mips|mips64|ppc|ppc64|s390|s390x|sparc|sparc64) ARCH=$cpu ;; armv4b|armv4l) @@ -1590,6 +1949,10 @@ else echo "CONFIG_POSIX=y" >> $config_host_mak fi +if test "$linux" = "yes" ; then + echo "CONFIG_LINUX=y" >> $config_host_mak +fi + if test "$darwin" = "yes" ; then echo "CONFIG_DARWIN=y" >> $config_host_mak fi @@ -1614,7 +1977,7 @@ if test $profiler = "yes" ; then fi if test "$slirp" = "yes" ; then echo "CONFIG_SLIRP=y" >> $config_host_mak - CFLAGS="-I\$(SRC_PATH)/slirp $CFLAGS" + QEMU_CFLAGS="-I\$(SRC_PATH)/slirp $QEMU_CFLAGS" fi if test "$vde" = "yes" ; then echo "CONFIG_VDE=y" >> $config_host_mak @@ -1634,6 +1997,10 @@ done if test "$audio_pt_int" = "yes" ; then echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak fi +if test "$audio_win_int" = "yes" ; then + echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak +fi +echo "CONFIG_BDRV_WHITELIST=$block_drv_whitelist" >> $config_host_mak if test "$mixemu" = "yes" ; then echo "CONFIG_MIXEMU=y" >> $config_host_mak fi @@ -1648,6 +2015,9 @@ fi if test "$fnmatch" = "yes" ; then echo "CONFIG_FNMATCH=y" >> $config_host_mak fi +if test "$uuid" = "yes" ; then + echo "CONFIG_UUID=y" >> $config_host_mak +fi qemu_version=`head $source_path/VERSION` echo "VERSION=$qemu_version" >>$config_host_mak echo "PKGVERSION=$pkgversion" >>$config_host_mak @@ -1656,7 +2026,7 @@ if [ "$source_path_used" = "yes" ]; then echo "VPATH=$source_path" >> $config_host_mak fi echo "TARGET_DIRS=$target_list" >> $config_host_mak -if [ "$build_docs" = "yes" ] ; then +if [ "$docs" = "yes" ] ; then echo "BUILD_DOCS=yes" >> $config_host_mak fi if test "$sdl" = "yes" ; then @@ -1678,9 +2048,21 @@ fi if test "$pipe2" = "yes" ; then echo "CONFIG_PIPE2=y" >> $config_host_mak fi +if test "$accept4" = "yes" ; then + echo "CONFIG_ACCEPT4=y" >> $config_host_mak +fi if test "$splice" = "yes" ; then echo "CONFIG_SPLICE=y" >> $config_host_mak fi +if test "$eventfd" = "yes" ; then + echo "CONFIG_EVENTFD=y" >> $config_host_mak +fi +if test "$fallocate" = "yes" ; then + echo "CONFIG_FALLOCATE=y" >> $config_host_mak +fi +if test "$dup3" = "yes" ; then + echo "CONFIG_DUP3=y" >> $config_host_mak +fi if test "$inotify" = "yes" ; then echo "CONFIG_INOTIFY=y" >> $config_host_mak fi @@ -1707,6 +2089,9 @@ fi if test "$io_thread" = "yes" ; then echo "CONFIG_IOTHREAD=y" >> $config_host_mak fi +if test "$linux_aio" = "yes" ; then + echo "CONFIG_LINUX_AIO=y" >> $config_host_mak +fi if test "$blobs" = "yes" ; then echo "INSTALL_BLOBS=yes" >> $config_host_mak fi @@ -1719,6 +2104,15 @@ fi if test "$fdt" = "yes" ; then echo "CONFIG_FDT=y" >> $config_host_mak fi +if test "$need_offsetof" = "yes" ; then + echo "CONFIG_NEED_OFFSETOF=y" >> $config_host_mak +fi +if test "$gcc_attribute_warn_unused_result" = "yes" ; then + echo "CONFIG_GCC_ATTRIBUTE_WARN_UNUSED_RESULT=y" >> $config_host_mak +fi +if test "$fdatasync" = "yes" ; then + echo "CONFIG_FDATASYNC=y" >> $config_host_mak +fi # XXX: suppress that if [ "$bsd" = "yes" ] ; then @@ -1727,6 +2121,10 @@ fi echo "CONFIG_UNAME_RELEASE=\"$uname_release\"" >> $config_host_mak +if test "$zero_malloc" = "yes" ; then + echo "CONFIG_ZERO_MALLOC=y" >> $config_host_mak +fi + # USB host support case "$usb" in linux) @@ -1742,9 +2140,13 @@ esac tools= if test `expr "$target_list" : ".*softmmu.*"` != 0 ; then - tools="qemu-img\$(EXESUF) $tools" + tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools" if [ "$linux" = "yes" ] ; then - tools="qemu-nbd\$(EXESUF) qemu-io\$(EXESUF) $tools" + tools="qemu-nbd\$(EXESUF) $tools" + if [ "$check_utests" = "yes" ]; then + tools="check-qint check-qstring check-qdict check-qlist $tools" + tools="check-qfloat check-qjson $tools" + fi fi fi echo "TOOLS=$tools" >> $config_host_mak @@ -1752,7 +2154,8 @@ echo "TOOLS=$tools" >> $config_host_mak # Mac OS X ships with a broken assembler roms= if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \ - "$targetos" != "Darwin" ; then + "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \ + `expr "$target_list" : ".*softmmu.*"` != 0 ; then roms="optionrom" fi echo "ROMS=$roms" >> $config_host_mak @@ -1787,18 +2190,6 @@ echo "LIBS+=$LIBS" >> $config_host_mak echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak echo "EXESUF=$EXESUF" >> $config_host_mak -echo "/* Automatically generated by configure - do not modify */" > $config_host_h - -/bin/sh $source_path/create_config < $config_host_mak >> $config_host_h - -if test -f ${config_host_h}~ ; then - if cmp -s $config_host_h ${config_host_h}~ ; then - mv ${config_host_h}~ $config_host_h - else - rm ${config_host_h}~ - fi -fi - # generate list of library paths for linker script $ld --verbose -v 2> /dev/null | grep SEARCH_DIR > ${config_host_ld} @@ -1813,12 +2204,12 @@ fi for target in $target_list; do target_dir="$target" -config_mak=$target_dir/config.mak -config_h=$target_dir/config.h +config_target_mak=$target_dir/config-target.mak target_arch2=`echo $target | cut -d '-' -f 1` target_bigendian="no" + case "$target_arch2" in - armeb|m68k|microblaze|mips|mipsn32|mips64|ppc|ppcemb|ppc64|ppc64abi32|sh4eb|sparc|sparc64|sparc32plus) + armeb|m68k|microblaze|mips|mipsn32|mips64|ppc|ppcemb|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus) target_bigendian=yes ;; esac @@ -1832,14 +2223,26 @@ case "$target" in target_softmmu="yes" ;; ${target_arch2}-linux-user) + if test "$linux" != "yes" ; then + echo "ERROR: Target '$target' is only available on a Linux host" + exit 1 + fi target_user_only="yes" target_linux_user="yes" ;; ${target_arch2}-darwin-user) + if test "$darwin" != "yes" ; then + echo "ERROR: Target '$target' is only available on a Darwin host" + exit 1 + fi target_user_only="yes" target_darwin_user="yes" ;; ${target_arch2}-bsd-user) + if test "$bsd" != "yes" ; then + echo "ERROR: Target '$target' is only available on a BSD host" + exit 1 + fi target_user_only="yes" target_bsd_user="yes" ;; @@ -1849,13 +2252,10 @@ case "$target" in ;; esac -#echo "Creating $config_mak, $config_h and $target_dir/Makefile" - -test -f $config_h && mv $config_h ${config_h}~ - mkdir -p $target_dir mkdir -p $target_dir/fpu mkdir -p $target_dir/tcg +mkdir -p $target_dir/ide if test "$target" = "arm-linux-user" -o "$target" = "armeb-linux-user" -o "$target" = "arm-bsd-user" -o "$target" = "armeb-bsd-user" ; then mkdir -p $target_dir/nwfpe fi @@ -1867,15 +2267,13 @@ rm -f $target_dir/Makefile ln -s $source_path/Makefile.target $target_dir/Makefile -echo "# Automatically generated by configure - do not modify" > $config_mak - -echo "include ../config-host.mak" >> $config_mak +echo "# Automatically generated by configure - do not modify" > $config_target_mak bflt="no" elfload32="no" target_nptl="no" interp_prefix1=`echo "$interp_prefix" | sed "s/%M/$target_arch2/g"` -echo "CONFIG_QEMU_PREFIX=\"$interp_prefix1\"" >> $config_mak +echo "CONFIG_QEMU_PREFIX=\"$interp_prefix1\"" >> $config_target_mak gdb_xml_files="" TARGET_ARCH="$target_arch2" @@ -1916,20 +2314,20 @@ case "$target_arch2" in ;; mips|mipsel) TARGET_ARCH=mips - echo "TARGET_ABI_MIPSO32=y" >> $config_mak + echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak target_nptl="yes" target_phys_bits=64 ;; mipsn32|mipsn32el) TARGET_ARCH=mipsn32 TARGET_BASE_ARCH=mips - echo "TARGET_ABI_MIPSN32=y" >> $config_mak + echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak target_phys_bits=64 ;; mips64|mips64el) TARGET_ARCH=mips64 TARGET_BASE_ARCH=mips - echo "TARGET_ABI_MIPSN64=y" >> $config_mak + echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak target_phys_bits=64 ;; ppc) @@ -1954,7 +2352,7 @@ case "$target_arch2" in TARGET_ARCH=ppc64 TARGET_BASE_ARCH=ppc TARGET_ABI_DIR=ppc - echo "TARGET_ABI32=y" >> $config_mak + echo "TARGET_ABI32=y" >> $config_target_mak gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml" target_phys_bits=64 ;; @@ -1976,7 +2374,10 @@ case "$target_arch2" in TARGET_ARCH=sparc64 TARGET_BASE_ARCH=sparc TARGET_ABI_DIR=sparc - echo "TARGET_ABI32=y" >> $config_mak + echo "TARGET_ABI32=y" >> $config_target_mak + target_phys_bits=64 + ;; + s390x) target_phys_bits=64 ;; *) @@ -1984,30 +2385,30 @@ case "$target_arch2" in exit 1 ;; esac -echo "TARGET_ARCH=$TARGET_ARCH" >> $config_mak +echo "TARGET_ARCH=$TARGET_ARCH" >> $config_target_mak target_arch_name="`echo $TARGET_ARCH | tr '[:lower:]' '[:upper:]'`" -echo "TARGET_$target_arch_name=y" >> $config_mak -echo "TARGET_ARCH2=$target_arch2" >> $config_mak +echo "TARGET_$target_arch_name=y" >> $config_target_mak +echo "TARGET_ARCH2=$target_arch2" >> $config_target_mak # TARGET_BASE_ARCH needs to be defined after TARGET_ARCH if [ "$TARGET_BASE_ARCH" = "" ]; then TARGET_BASE_ARCH=$TARGET_ARCH fi -echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_mak +echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak if [ "$TARGET_ABI_DIR" = "" ]; then TARGET_ABI_DIR=$TARGET_ARCH fi -echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_mak +echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak if [ $target_phys_bits -lt $hostlongbits ] ; then target_phys_bits=$hostlongbits fi case "$target_arch2" in i386|x86_64) if test "$xen" = "yes" -a "$target_softmmu" = "yes" ; then - echo "CONFIG_XEN=y" >> $config_mak + echo "CONFIG_XEN=y" >> $config_target_mak fi esac case "$target_arch2" in - i386|x86_64|ppcemb|ppc|ppc64) + i386|x86_64|ppcemb|ppc|ppc64|s390x) # Make sure the target and host cpus are compatible if test "$kvm" = "yes" -a "$target_softmmu" = "yes" -a \ \( "$target_arch2" = "$cpu" -o \ @@ -2015,62 +2416,62 @@ case "$target_arch2" in \( "$target_arch2" = "ppc64" -a "$cpu" = "ppc" \) -o \ \( "$target_arch2" = "x86_64" -a "$cpu" = "i386" \) -o \ \( "$target_arch2" = "i386" -a "$cpu" = "x86_64" \) \) ; then - echo "CONFIG_KVM=y" >> $config_mak - echo "KVM_CFLAGS=$kvm_cflags" >> $config_mak + echo "CONFIG_KVM=y" >> $config_target_mak + echo "KVM_CFLAGS=$kvm_cflags" >> $config_target_mak fi esac -echo "HWLIB=../libhw$target_phys_bits/libqemuhw$target_phys_bits.a" >> $config_mak -echo "TARGET_PHYS_ADDR_BITS=$target_phys_bits" >> $config_mak -echo "subdir-$target: subdir-libhw$target_phys_bits" >> $config_host_mak +echo "TARGET_PHYS_ADDR_BITS=$target_phys_bits" >> $config_target_mak if test "$target_bigendian" = "yes" ; then - echo "TARGET_WORDS_BIGENDIAN=y" >> $config_mak + echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak fi if test "$target_softmmu" = "yes" ; then - echo "CONFIG_SOFTMMU=y" >> $config_mak - echo "LIBS+=$libs_softmmu" >> $config_mak + echo "CONFIG_SOFTMMU=y" >> $config_target_mak + echo "LIBS+=$libs_softmmu" >> $config_target_mak + echo "HWLIB=../libhw$target_phys_bits/libqemuhw$target_phys_bits.a" >> $config_target_mak + echo "subdir-$target: subdir-libhw$target_phys_bits" >> $config_host_mak fi if test "$target_user_only" = "yes" ; then - echo "CONFIG_USER_ONLY=y" >> $config_mak + echo "CONFIG_USER_ONLY=y" >> $config_target_mak fi if test "$target_linux_user" = "yes" ; then - echo "CONFIG_LINUX_USER=y" >> $config_mak + echo "CONFIG_LINUX_USER=y" >> $config_target_mak fi if test "$target_darwin_user" = "yes" ; then - echo "CONFIG_DARWIN_USER=y" >> $config_mak + echo "CONFIG_DARWIN_USER=y" >> $config_target_mak fi list="" if test ! -z "$gdb_xml_files" ; then for x in $gdb_xml_files; do list="$list $source_path/gdb-xml/$x" done + echo "TARGET_XML_FILES=$list" >> $config_target_mak fi -echo "TARGET_XML_FILES=$list" >> $config_mak case "$target_arch2" in - arm|armeb|m68k|microblaze|mips|mipsel|mipsn32|mipsn32el|mips64|mips64el|ppc|ppc64|ppc64abi32|ppcemb|sparc|sparc64|sparc32plus) - echo "CONFIG_SOFTFLOAT=y" >> $config_mak + arm|armeb|m68k|microblaze|mips|mipsel|mipsn32|mipsn32el|mips64|mips64el|ppc|ppc64|ppc64abi32|ppcemb|s390x|sparc|sparc64|sparc32plus) + echo "CONFIG_SOFTFLOAT=y" >> $config_target_mak ;; *) - echo "CONFIG_NOSOFTFLOAT=y" >> $config_mak + echo "CONFIG_NOSOFTFLOAT=y" >> $config_target_mak ;; esac if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then - echo "TARGET_HAS_BFLT=y" >> $config_mak + echo "TARGET_HAS_BFLT=y" >> $config_target_mak fi if test "$target_user_only" = "yes" \ -a "$nptl" = "yes" -a "$target_nptl" = "yes"; then - echo "CONFIG_USE_NPTL=y" >> $config_mak + echo "CONFIG_USE_NPTL=y" >> $config_target_mak fi # 32 bit ELF loader in addition to native 64 bit loader? if test "$target_user_only" = "yes" -a "$elfload32" = "yes"; then - echo "TARGET_HAS_ELFLOAD32=y" >> $config_mak + echo "TARGET_HAS_ELFLOAD32=y" >> $config_target_mak fi if test "$target_user_only" = "yes" -a "$guest_base" = "yes"; then - echo "CONFIG_USE_GUEST_BASE=y" >> $config_mak + echo "CONFIG_USE_GUEST_BASE=y" >> $config_target_mak fi if test "$target_bsd_user" = "yes" ; then - echo "CONFIG_BSD_USER=y" >> $config_mak + echo "CONFIG_BSD_USER=y" >> $config_target_mak fi # generate QEMU_CFLAGS/LDFLAGS for targets @@ -2080,6 +2481,8 @@ ldflags="" if test "$ARCH" = "sparc64" ; then cflags="-I\$(SRC_PATH)/tcg/sparc $cflags" +elif test "$ARCH" = "s390x" ; then + cflags="-I\$(SRC_PATH)/tcg/s390 $cflags" else cflags="-I\$(SRC_PATH)/tcg/\$(ARCH) $cflags" fi @@ -2089,40 +2492,40 @@ cflags="-I\$(SRC_PATH)/fpu $cflags" for i in $ARCH $TARGET_BASE_ARCH ; do case "$i" in alpha) - echo "CONFIG_ALPHA_DIS=y" >> $config_mak + echo "CONFIG_ALPHA_DIS=y" >> $config_target_mak ;; arm) - echo "CONFIG_ARM_DIS=y" >> $config_mak + echo "CONFIG_ARM_DIS=y" >> $config_target_mak ;; cris) - echo "CONFIG_CRIS_DIS=y" >> $config_mak + echo "CONFIG_CRIS_DIS=y" >> $config_target_mak ;; hppa) - echo "CONFIG_HPPA_DIS=y" >> $config_mak + echo "CONFIG_HPPA_DIS=y" >> $config_target_mak ;; i386|x86_64) - echo "CONFIG_I386_DIS=y" >> $config_mak + echo "CONFIG_I386_DIS=y" >> $config_target_mak ;; m68k) - echo "CONFIG_M68K_DIS=y" >> $config_mak + echo "CONFIG_M68K_DIS=y" >> $config_target_mak ;; microblaze) - echo "CONFIG_MICROBLAZE_DIS=y" >> $config_mak + echo "CONFIG_MICROBLAZE_DIS=y" >> $config_target_mak ;; mips*) - echo "CONFIG_MIPS_DIS=y" >> $config_mak + echo "CONFIG_MIPS_DIS=y" >> $config_target_mak ;; ppc*) - echo "CONFIG_PPC_DIS=y" >> $config_mak + echo "CONFIG_PPC_DIS=y" >> $config_target_mak ;; - s390) - echo "CONFIG_S390_DIS=y" >> $config_mak + s390*) + echo "CONFIG_S390_DIS=y" >> $config_target_mak ;; sh4) - echo "CONFIG_SH4_DIS=y" >> $config_mak + echo "CONFIG_SH4_DIS=y" >> $config_target_mak ;; sparc*) - echo "CONFIG_SPARC_DIS=y" >> $config_mak + echo "CONFIG_SPARC_DIS=y" >> $config_target_mak ;; esac done @@ -2148,37 +2551,33 @@ if test "$target_softmmu" = "yes" ; then esac fi +if test "$target_user_only" = "yes" -a "$static" = "no" -a \ + "$user_pie" = "yes" ; then + cflags="-fpie $cflags" + ldflags="-pie $ldflags" +fi + if test "$target_softmmu" = "yes" -a \( \ "$TARGET_ARCH" = "microblaze" -o \ "$TARGET_ARCH" = "cris" \) ; then - echo "CONFIG_NEED_MMU=y" >> $config_mak + echo "CONFIG_NEED_MMU=y" >> $config_target_mak fi if test "$gprof" = "yes" ; then - echo "TARGET_GPROF=yes" >> $config_mak + echo "TARGET_GPROF=yes" >> $config_target_mak if test "$target_linux_user" = "yes" ; then cflags="-p $cflags" ldflags="-p $ldflags" fi if test "$target_softmmu" = "yes" ; then ldflags="-p $ldflags" - echo "GPROF_CFLAGS=-p" >> $config_mak + echo "GPROF_CFLAGS=-p" >> $config_target_mak fi fi linker_script="-Wl,-T../config-host.ld -Wl,-T,\$(SRC_PATH)/\$(ARCH).ld" if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then case "$ARCH" in - i386) - if test "$gprof" = "yes" -o "$static" = "yes" ; then - ldflags="$linker_script $ldflags" - else - # WARNING: this LDFLAGS is _very_ tricky : qemu is an ELF shared object - # that the kernel ELF loader considers as an executable. I think this - # is the simplest way to make it self virtualizable! - ldflags="-Wl,-shared $ldflags" - fi - ;; sparc) # -static is used to avoid g1/g3 usage by the dynamic linker ldflags="$linker_script -static $ldflags" @@ -2186,7 +2585,7 @@ if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then ia64) ldflags="-Wl,-G0 $linker_script -static $ldflags" ;; - x86_64|ppc|ppc64|s390|sparc64|alpha|arm|m68k|mips|mips64) + i386|x86_64|ppc|ppc64|s390|sparc64|alpha|arm|m68k|mips|mips64) ldflags="$linker_script $ldflags" ;; esac @@ -2199,31 +2598,20 @@ if test "$target_softmmu" = "yes" ; then esac fi -echo "LDFLAGS+=$ldflags" >> $config_mak -echo "QEMU_CFLAGS+=$cflags" >> $config_mak - -echo "/* Automatically generated by configure - do not modify */" > $config_h -echo "#include \"../config-host.h\"" >> $config_h - -/bin/sh $source_path/create_config < $config_mak >> $config_h - -if test -f ${config_h}~ ; then - if cmp -s $config_h ${config_h}~ ; then - mv ${config_h}~ $config_h - else - rm ${config_h}~ - fi -fi +echo "LDFLAGS+=$ldflags" >> $config_target_mak +echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak done # for target in $targets # build tree in object directory if source path is different from current one if test "$source_path_used" = "yes" ; then - DIRS="tests tests/cris slirp audio block pc-bios/optionrom" + DIRS="tests tests/cris slirp audio block net pc-bios/optionrom" + DIRS="$DIRS roms/seabios roms/vgabios" FILES="Makefile tests/Makefile" FILES="$FILES tests/cris/Makefile tests/cris/.gdbinit" FILES="$FILES tests/test-mmap.c" FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps pc-bios/video.x" + FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile" for bios_file in $source_path/pc-bios/*.bin $source_path/pc-bios/*.dtb $source_path/pc-bios/openbios-*; do FILES="$FILES pc-bios/`basename $bios_file`" done @@ -2237,6 +2625,20 @@ if test "$source_path_used" = "yes" ; then done fi +# temporary config to build submodules +for rom in seabios vgabios ; do + config_mak=roms/$rom/config.mak + echo "# Automatically generated by configure - do not modify" >> $config_mak + echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak + echo "CC=$cc" >> $config_mak + echo "BCC=bcc" >> $config_mak + echo "CPP=${cross_prefix}cpp" >> $config_mak + echo "OBJCOPY=objcopy" >> $config_mak + echo "IASL=iasl" >> $config_mak + echo "HOST_CC=$host_cc" >> $config_mak + echo "LD=$ld" >> $config_mak +done + for hwlib in 32 64; do d=libhw$hwlib mkdir -p $d @@ -2245,3 +2647,11 @@ for hwlib in 32 64; do echo "HWLIB=libqemuhw$hwlib.a" > $d/config.mak echo "QEMU_CFLAGS+=-DTARGET_PHYS_ADDR_BITS=$hwlib" >> $d/config.mak done + +d=libuser +mkdir -p $d +rm -f $d/Makefile +ln -s $source_path/Makefile.user $d/Makefile +if test "$static" = "no" -a "$user_pie" = "yes" ; then + echo "QEMU_CFLAGS+=-fpie" > $d/config.mak +fi