--- qemu/configure 2018/04/24 16:42:43 1.1.1.4 +++ qemu/configure 2018/04/24 17:34:29 1.1.1.11 @@ -13,157 +13,410 @@ fi TMPC="${TMPDIR1}/qemu-conf-${RANDOM}-$$-${RANDOM}.c" TMPO="${TMPDIR1}/qemu-conf-${RANDOM}-$$-${RANDOM}.o" -TMPE="${TMPDIR1}/qemu-conf-${RANDOM}-$$-${RANDOM}" -TMPS="${TMPDIR1}/qemu-conf-${RANDOM}-$$-${RANDOM}.S" +TMPE="${TMPDIR1}/qemu-conf-${RANDOM}-$$-${RANDOM}.exe" + +trap "rm -f $TMPC $TMPO $TMPE ; exit" 0 2 3 15 + +compile_object() { + $cc $QEMU_CFLAGS -c -o $TMPO $TMPC > /dev/null 2> /dev/null +} + +compile_prog() { + local_cflags="$1" + local_ldflags="$2" + $cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags > /dev/null 2> /dev/null +} # default parameters +cpu="" prefix="" interp_prefix="/usr/gnemul/qemu-%M" static="no" +sparc_cpu="" cross_prefix="" 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" install="install" -strip="strip" -cpu=`uname -m` +objcopy="objcopy" +ld="ld" +helper_cflags="" +libs_softmmu="" +libs_tools="" +audio_pt_int="" +audio_win_int="" + +# parse CC options first +for opt do + optarg=`expr "x$opt" : 'x[^=]*=\(.*\)'` + case "$opt" in + --cross-prefix=*) cross_prefix="$optarg" + ;; + --cc=*) cc="$optarg" + ;; + --cpu=*) cpu="$optarg" + ;; + --extra-cflags=*) QEMU_CFLAGS="$optarg $QEMU_CFLAGS" + ;; + --extra-ldflags=*) LDFLAGS="$optarg $LDFLAGS" + ;; + --sparc_cpu=*) + sparc_cpu="$optarg" + case $sparc_cpu in + v7|v8|v8plus|v8plusa) + cpu="sparc" + ;; + v9) + cpu="sparc64" + ;; + *) + echo "undefined SPARC architecture. Exiting"; + exit 1 + ;; + esac + ;; + esac +done +# OS specific +# Using uname is really, really broken. Once we have the right set of checks +# we can eliminate it's usage altogether + +cc="${cross_prefix}${cc}" +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 < $TMPC < $TMPC </dev/null ; then - : C compiler works ok -else - echo "ERROR: \"$cc\" either does not exist or does not work" - exit 1 -fi - -if test "$mingw32" = "yes" ; then - linux="no" - EXESUF=".exe" - oss="no" - if [ "$cpu" = "i386" ] ; then - kqemu="yes" - fi -fi - # # Solaris specific configure tool chain decisions # if test "$solaris" = "yes" ; then - # - # gcc for solaris 10/fcs in /usr/sfw/bin doesn't compile qemu correctly - # override the check with --disable-gcc-check - # - if test "$solarisrev" -eq 10 -a "$check_gcc" = "yes" ; then - solgcc=`which $cc` - if test "$solgcc" = "/usr/sfw/bin/gcc" ; then - echo "Solaris 10/FCS gcc in /usr/sfw/bin will not compiled qemu correctly." - echo "please get gcc-3.4.3 or later, from www.blastwave.org using pkg-get -i gcc3" - echo "or get the latest patch from SunSolve for gcc" - exit 1 - fi - fi solinst=`which $install 2> /dev/null | /usr/bin/grep -v "no $install in"` if test -z "$solinst" ; then echo "Solaris install program not found. Use --install=/usr/ucb/install or" @@ -360,17 +783,67 @@ if test "$solaris" = "yes" ; then fi exit 1 fi -fi +fi if test -z "$target_list" ; then # these targets are portable if [ "$softmmu" = "yes" ] ; then - target_list="i386-softmmu ppc-softmmu sparc-softmmu x86_64-softmmu mips-softmmu mipsel-softmmu arm-softmmu" + target_list="\ +i386-softmmu \ +x86_64-softmmu \ +arm-softmmu \ +cris-softmmu \ +m68k-softmmu \ +microblaze-softmmu \ +mips-softmmu \ +mipsel-softmmu \ +mips64-softmmu \ +mips64el-softmmu \ +ppc-softmmu \ +ppcemb-softmmu \ +ppc64-softmmu \ +sh4-softmmu \ +sh4eb-softmmu \ +sparc-softmmu \ +sparc64-softmmu \ +" fi # the following are Linux specific - if [ "$user" = "yes" ] ; then - target_list="i386-user arm-user armeb-user sparc-user ppc-user mips-user mipsel-user $target_list" + if [ "$linux_user" = "yes" ] ; then + target_list="${target_list}\ +i386-linux-user \ +x86_64-linux-user \ +alpha-linux-user \ +arm-linux-user \ +armeb-linux-user \ +cris-linux-user \ +m68k-linux-user \ +microblaze-linux-user \ +mips-linux-user \ +mipsel-linux-user \ +ppc-linux-user \ +ppc64-linux-user \ +ppc64abi32-linux-user \ +sh4-linux-user \ +sh4eb-linux-user \ +sparc-linux-user \ +sparc64-linux-user \ +sparc32plus-linux-user \ +" + fi +# the following are Darwin specific + if [ "$darwin_user" = "yes" ] ; then + target_list="$target_list i386-darwin-user ppc-darwin-user " + fi +# the following are BSD specific + if [ "$bsd_user" = "yes" ] ; then + target_list="${target_list}\ +i386-bsd-user \ +x86_64-bsd-user \ +sparc-bsd-user \ +sparc64-bsd-user \ +" fi else target_list=`echo "$target_list" | sed -e 's/,/ /g'` @@ -380,6 +853,16 @@ if test -z "$target_list" ; then exit 1 fi +feature_not_found() { + feature=$1 + + echo "ERROR" + echo "ERROR: User requested feature $feature" + echo "ERROR: configure was not able to find it" + echo "ERROR" + exit 1; +} + if test -z "$cross_prefix" ; then # --- @@ -392,7 +875,7 @@ int main(int argc, char ** argv){ } EOF -if $cc -o $TMPE $TMPC 2>/dev/null ; then +if compile_prog "" "" ; then $TMPE && bigendian="yes" else echo big/little test failed @@ -401,44 +884,97 @@ fi else # if cross compiling, cannot launch a program, so make a static guess -if test "$cpu" = "powerpc" -o "$cpu" = "mips" -o "$cpu" = "s390" -o "$cpu" = "sparc" -o "$cpu" = "sparc64" -o "$cpu" = "m68k" -o "$cpu" = "armv4b"; then - bigendian="yes" -fi +case "$cpu" in + armv4b|hppa|m68k|mips|mips64|ppc|ppc64|s390|s390x|sparc|sparc64) + bigendian=yes + ;; +esac fi # host long bits test hostlongbits="32" -if test "$cpu" = "sparc64" -o "$cpu" = "ia64" -o "$cpu" = "x86_64" -o "$cpu" = "alpha"; then - hostlongbits="64" -fi +case "$cpu" in + x86_64|alpha|ia64|sparc64|ppc64|s390x) + hostlongbits=64 + ;; +esac -# check gcc options support -cat > $TMPC < $TMPC < +#include +void foo() +{ +#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT) +#error bork +#endif } EOF -have_gcc3_options="no" -if $cc -fno-reorder-blocks -fno-optimize-sibling-calls -o $TMPO $TMPC 2> /dev/null ; then - have_gcc3_options="yes" + if compile_object ; then + nptl=yes + else + if test "$nptl" = "yes" ; then + feature_not_found "nptl" + fi + nptl=no + fi fi -# Check for gcc4, error if pre-gcc4 -if test "$check_gcc" = "yes" ; then - cat > $TMPC < $TMPC << EOF +#include +int main(void) { zlibVersion(); return 0; } +EOF +if compile_prog "" "-lz" ; then + : +else + echo + echo "Error: zlib check failed" + echo "Make sure to have the zlib libs and headers installed." + echo + exit 1 +fi + +########################################## +# xen probe + +if test "$xen" != "no" ; then + xen_libs="-lxenstore -lxenctrl -lxenguest" + cat > $TMPC < +#include +int main(void) { xs_daemon_open(); xc_interface_open(); return 0; } EOF - if $cc -o $TMPO $TMPC 2>/dev/null ; then - echo "ERROR: \"$cc\" looks like gcc 4.x" - echo "QEMU is known to have problems when compiled with gcc 4.x" - echo "It is recommended that you use gcc 3.x to build QEMU" - echo "To use this compiler anyway, configure with --disable-gcc-check" - exit 1; + if compile_prog "" "$xen_libs" ; then + xen=yes + libs_softmmu="$xen_libs $libs_softmmu" + else + 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 ########################################## @@ -446,325 +982,1283 @@ fi sdl_too_old=no -if test -z "$sdl" ; then - -sdl_config="sdl-config" -sdl=no -sdl_static=no - -if test "$mingw32" = "yes" -a ! -z "$cross_prefix" ; then -# win32 cross compilation case - sdl_config="i386-mingw32msvc-sdl-config" - sdl=yes -else -# normal SDL probe -cat > $TMPC << EOF +if test "$sdl" != "no" ; then + cat > $TMPC << EOF #include #undef main /* We don't want SDL to override our main() */ int main( void ) { return SDL_Init (SDL_INIT_VIDEO); } EOF + sdl_cflags=`sdl-config --cflags 2> /dev/null` + sdl_libs=`sdl-config --libs 2> /dev/null` + if compile_prog "$sdl_cflags" "$sdl_libs" ; then + _sdlversion=`sdl-config --version | sed 's/[^0-9]//g'` + if test "$_sdlversion" -lt 121 ; then + sdl_too_old=yes + else + if test "$cocoa" = "no" ; then + sdl=yes + fi + fi -if $cc -o $TMPE `$sdl_config --cflags 2> /dev/null` $TMPC `$sdl_config --libs 2> /dev/null` 2> /dev/null ; then -_sdlversion=`$sdl_config --version | sed 's/[^0-9]//g'` -if test "$_sdlversion" -lt 121 ; then -sdl_too_old=yes -else -sdl=yes + # static link with sdl ? + if test "$sdl" = "yes" -a "$static" = "yes" ; then + sdl_libs=`sdl-config --static-libs 2>/dev/null` + if test `sdl-config --static-libs 2>/dev/null | grep \\\-laa > /dev/null` ; then + sdl_libs="$sdl_libs `aalib-config --static-libs >2 /dev/null`" + sdl_cflags="$sd_cflags `aalib-config --cflags >2 /dev/null`" + fi + if compile_prog "$sdl_cflags" "$sdl_libs" ; then + : + else + 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 -# static link with sdl ? if test "$sdl" = "yes" ; then -aa="no" -`$sdl_config --static-libs | grep \\\-laa > /dev/null` && aa="yes" -sdl_static_libs=`$sdl_config --static-libs` -if [ "$aa" = "yes" ] ; then - sdl_static_libs="$sdl_static_libs `aalib-config --static-libs`" + cat > $TMPC < +#if defined(SDL_VIDEO_DRIVER_X11) +#include +#else +#error No x11 support +#endif +int main(void) { return 0; } +EOF + if compile_prog "$sdl_cflags" "$sdl_libs" ; then + sdl_libs="$sdl_libs -lX11" + fi + if test "$mingw32" = "yes" ; then + sdl_libs="`echo $sdl_libs | sed s/-mwindows//g` -mconsole" + fi + libs_softmmu="$sdl_libs $libs_softmmu" fi -if $cc -o $TMPE `$sdl_config --cflags 2> /dev/null` $TMPC $sdl_static_libs 2> /dev/null; then - sdl_static=yes +########################################## +# VNC TLS detection +if test "$vnc_tls" != "no" ; then + cat > $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 + 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 -fi # static link - -fi # sdl compile test - -fi # cross compilation -fi # -z $sdl - -# Check if tools are available to build documentation. -if [ -x "`which texi2html`" ] && [ -x "`which pod2man`" ]; then - build_docs="yes" +########################################## +# VNC SASL detection +if test "$vnc_sasl" != "no" ; then + cat > $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 + 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 -if test "$mingw32" = "yes" ; then -if test -z "$prefix" ; then - prefix="/c/Program Files/Qemu" +########################################## +# fnmatch() probe, used for ACL routines +fnmatch="no" +cat > $TMPC << EOF +#include +int main(void) +{ + fnmatch("foo", "foo", 0); + return 0; +} +EOF +if compile_prog "" "" ; then + fnmatch="yes" fi -mandir="$prefix" -datadir="$prefix" -docdir="$prefix" -bindir="$prefix" -else -if test -z "$prefix" ; then - prefix="/usr/local" -fi -mandir="$prefix/share/man" -datadir="$prefix/share/qemu" -docdir="$prefix/share/doc/qemu" -bindir="$prefix/bin" + +########################################## +# 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" != "no" ; then + vde_libs="-lvdeplug" + cat > $TMPC << EOF +#include +int main(void) +{ + struct vde_open_args a = {0, 0, 0}; + vde_open("", "", &a); + return 0; +} +EOF + if compile_prog "" "$vde_libs" ; then + 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 + +########################################## +# Sound support libraries probe + +audio_drv_probe() +{ + drv=$1 + hdr=$2 + lib=$3 + exp=$4 + cfl=$5 + cat > $TMPC << EOF +#include <$hdr> +int main(void) { $exp } +EOF + if compile_prog "$cfl" "$lib" ; then + : + else + echo + echo "Error: $drv check failed" + echo "Make sure to have the $drv libs and headers installed." + echo + exit 1 + fi +} + +audio_drv_list=`echo "$audio_drv_list" | sed -e 's/,/ /g'` +for drv in $audio_drv_list; do + case $drv in + alsa) + audio_drv_probe $drv alsa/asoundlib.h -lasound \ + "snd_pcm_t **handle; return snd_pcm_close(*handle);" + libs_softmmu="-lasound $libs_softmmu" + ;; + + fmod) + if test -z $fmod_lib || test -z $fmod_inc; then + echo + echo "Error: You must specify path to FMOD library and headers" + echo "Example: --fmod-inc=/path/include/fmod --fmod-lib=/path/lib/libfmod-3.74.so" + echo + exit 1 + fi + audio_drv_probe $drv fmod.h $fmod_lib "return FSOUND_GetVersion();" "-I $fmod_inc" + libs_softmmu="$fmod_lib $libs_softmmu" + ;; + + esd) + audio_drv_probe $drv esd.h -lesd 'return esd_play_stream(0, 0, "", 0);' + libs_softmmu="-lesd $libs_softmmu" + audio_pt_int="yes" + ;; + + pa) + audio_drv_probe $drv pulse/simple.h "-lpulse-simple -lpulse" \ + "pa_simple *s = NULL; pa_simple_free(s); return 0;" + libs_softmmu="-lpulse -lpulse-simple $libs_softmmu" + audio_pt_int="yes" + ;; + + coreaudio) + libs_softmmu="-framework CoreAudio $libs_softmmu" + ;; + + dsound) + libs_softmmu="-lole32 -ldxguid $libs_softmmu" + audio_win_int="yes" + ;; + + oss) + libs_softmmu="$oss_lib $libs_softmmu" + ;; + + sdl|wav) + # XXX: Probes for CoreAudio, DirectSound, SDL(?) + ;; + + winwave) + libs_softmmu="-lwinmm $libs_softmmu" + audio_win_int="yes" + ;; + + *) + echo "$audio_possible_drivers" | grep -q "\<$drv\>" || { + echo + echo "Error: Unknown driver '$drv' selected" + echo "Possible drivers are: $audio_possible_drivers" + echo + exit 1 + } + ;; + esac +done + +########################################## +# BrlAPI probe + +if test "$brlapi" != "no" ; then + brlapi_libs="-lbrlapi" + cat > $TMPC << EOF +#include +int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); } +EOF + if compile_prog "" "$brlapi_libs" ; then + brlapi=yes + libs_softmmu="$brlapi_libs $libs_softmmu" + else + if test "$brlapi" = "yes" ; then + feature_not_found "brlapi" + fi + brlapi=no + fi +fi + +########################################## +# curses probe +curses_list="-lncurses -lcurses" + +if test "$curses" != "no" ; then + curses_found=no + cat > $TMPC << EOF +#include +#ifdef __OpenBSD__ +#define resize_term resizeterm +#endif +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_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" != "no" ; then + cat > $TMPC << EOF +#include +int main(void) { return curl_easy_init(); } +EOF + curl_cflags=`curl-config --cflags 2>/dev/null` + curl_libs=`curl-config --libs 2>/dev/null` + if compile_prog "$curl_cflags" "$curl_libs" ; then + 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" != "no" ; then + cat > $TMPC << EOF +#include +int main(void) { return bt_error(0); } +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" != "no" ; then + cat > $TMPC < +#if !defined(KVM_API_VERSION) || KVM_API_VERSION < 12 || KVM_API_VERSION > 12 +#error Invalid KVM version +#endif +#if !defined(KVM_CAP_USER_MEMORY) +#error Missing KVM capability KVM_CAP_USER_MEMORY +#endif +#if !defined(KVM_CAP_SET_TSS_ADDR) +#error Missing KVM capability KVM_CAP_SET_TSS_ADDR +#endif +#if !defined(KVM_CAP_DESTROY_MEMORY_REGION_WORKS) +#error Missing KVM capability KVM_CAP_DESTROY_MEMORY_REGION_WORKS +#endif +int main(void) { return 0; } +EOF + if test "$kerneldir" != "" ; then + kvm_cflags=-I"$kerneldir"/include + if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) \ + -a -d "$kerneldir/arch/x86/include" ; then + 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 + else + kvm_cflags="" + fi + if compile_prog "$kvm_cflags" "" ; then + kvm=yes + else + 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 + 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 + +########################################## +# pthread probe +PTHREADLIBS_LIST="-lpthread -lpthreadGC2" + +pthread=no +cat > $TMPC << EOF +#include +int main(void) { pthread_create(0,0,0,0); return 0; } +EOF +for pthread_lib in $PTHREADLIBS_LIST; do + if compile_prog "" "$pthread_lib" ; then + pthread=yes + LIBS="$pthread_lib $LIBS" + break + fi +done + +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." + echo + 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 < +#include +#include +int main(void) { struct iovec iov; return 0; } +EOF +iovec=no +if compile_prog "" "" ; then + iovec=yes +fi + +########################################## +# preadv probe +cat > $TMPC < +#include +#include +int main(void) { preadv; } +EOF +preadv=no +if compile_prog "" "" ; then + preadv=yes +fi + +########################################## +# fdt probe +if test "$fdt" != "no" ; then + fdt_libs="-lfdt" + cat > $TMPC << EOF +int main(void) { return 0; } +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 + +# +# Check for xxxat() functions when we are building linux-user +# emulator. This is done because older glibc versions don't +# have syscall stubs for these implemented. +# +atfile=no +cat > $TMPC << EOF +#define _ATFILE_SOURCE +#include +#include +#include + +int +main(void) +{ + /* try to unlink nonexisting file */ + return (unlinkat(AT_FDCWD, "nonexistent_file", 0)); +} +EOF +if compile_prog "" "" ; then + atfile=yes +fi + +# Check for inotify functions when we are building linux-user +# emulator. This is done because older glibc versions don't +# have syscall stubs for these implemented. In that case we +# don't provide them even if kernel supports them. +# +inotify=no +cat > $TMPC << EOF +#include + +int +main(void) +{ + /* try to start inotify */ + return inotify_init(); +} +EOF +if compile_prog "" "" ; then + inotify=yes +fi + +# check if utimensat and futimens are supported +utimens=no +cat > $TMPC << EOF +#define _ATFILE_SOURCE +#define _GNU_SOURCE +#include +#include + +int main(void) +{ + utimensat(AT_FDCWD, "foo", NULL, 0); + futimens(0, NULL); + return 0; +} +EOF +if compile_prog "" "" ; then + utimens=yes +fi + +# check if pipe2 is there +pipe2=no +cat > $TMPC << EOF +#define _GNU_SOURCE +#include +#include + +int main(void) +{ + int pipefd[2]; + pipe2(pipefd, O_CLOEXEC); + return 0; +} +EOF +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 +#define _GNU_SOURCE +#include +#include +#include + +int main(void) +{ + int len, fd; + len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK); + splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE); + return 0; +} +EOF +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 "$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 bswap_32 function +byteswap_h=no +cat > $TMPC << EOF +#include +int main(void) { return bswap_32(0); } +EOF +if compile_prog "" "" ; then + byteswap_h=yes +fi + +# Search for bswap_32 function +bswap_h=no +cat > $TMPC << EOF +#include +#include +#include +int main(void) { return bswap32(0); } +EOF +if compile_prog "" "" ; then + bswap_h=yes +fi + +########################################## +# Do we need librt +cat > $TMPC < +#include +int main(void) { clockid_t id; return clock_gettime(id, NULL); } +EOF + +if compile_prog "" "" ; then + : +elif compile_prog "" "-lrt" ; then + LIBS="-lrt $LIBS" +fi + +# Determine what linker flags to use to force archive inclusion +check_linker_flags() +{ + w2= + if test "$2" ; then + w2=-Wl,$2 + fi + compile_prog "" "-Wl,$1 ${w2}" +} + +cat > $TMPC << EOF +int main(void) { } +EOF +if check_linker_flags --whole-archive --no-whole-archive ; then + # GNU ld + arlibs_begin="-Wl,--whole-archive" + arlibs_end="-Wl,--no-whole-archive" +elif check_linker_flags -z,allextract -z,defaultextract ; then + # Solaris ld + arlibs_begin="-Wl,-z,allextract" + arlibs_end="-Wl,-z,defaultextract" +elif check_linker_flags -all_load ; then + # Mac OS X + arlibs_begin="-all_load" + arlibs_end="" +else + echo "Error: your linker does not support --whole-archive or -z." + echo "Please report to qemu-devel@nongnu.org" + exit 1 +fi + +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 + +if test "$debug" = "no" ; then + CFLAGS="-O2 $CFLAGS" +fi + +# 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 + if test "$z_version" = "50" -a \ + "$linux" = "yes" ; then + werror="yes" + else + werror="no" + 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 + +if test "$solaris" = "no" ; then + if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then + LDFLAGS="-Wl,--warn-common $LDFLAGS" + fi +fi + +if test "$mingw32" = "yes" ; then + if test -z "$prefix" ; then + prefix="c:/Program Files/Qemu" + fi + mansuffix="" + datasuffix="" + docsuffix="" + binsuffix="" +else + if test -z "$prefix" ; then + prefix="/usr/local" + fi + mansuffix="/share/man" + datasuffix="/share/qemu" + docsuffix="/share/doc/qemu" + binsuffix="/bin" fi echo "Install prefix $prefix" -echo "BIOS directory $datadir" -echo "binary directory $bindir" +echo "BIOS directory $prefix$datasuffix" +echo "binary directory $prefix$binsuffix" if test "$mingw32" = "no" ; then -echo "Manual directory $mandir" +echo "Manual directory $prefix$mansuffix" echo "ELF interp prefix $interp_prefix" fi echo "Source path $source_path" echo "C compiler $cc" echo "Host C compiler $host_cc" +echo "CFLAGS $CFLAGS" +echo "QEMU_CFLAGS $QEMU_CFLAGS" +echo "LDFLAGS $LDFLAGS" echo "make $make" echo "install $install" echo "host CPU $cpu" echo "host big endian $bigendian" echo "target list $target_list" +echo "tcg debug enabled $debug_tcg" echo "gprof enabled $gprof" +echo "sparse enabled $sparse" +echo "strip binaries $strip_opt" echo "profiler $profiler" echo "static build $static" +echo "-Werror enabled $werror" if test "$darwin" = "yes" ; then echo "Cocoa support $cocoa" fi echo "SDL support $sdl" -if test "$sdl" != "no" ; then - echo "SDL static link $sdl_static" -fi +echo "curses support $curses" +echo "curl support $curl" +echo "check support $check_utests" echo "mingw32 support $mingw32" -echo "Adlib support $adlib" -echo "CoreAudio support $coreaudio" -echo "ALSA support $alsa" -echo "DSound support $dsound" -if test "$fmod" = "yes"; then - if test -z $fmod_lib || test -z $fmod_inc; then - echo - echo "Error: You must specify path to FMOD library and headers" - echo "Example: --fmod-inc=/path/include/fmod --fmod-lib=/path/lib/libfmod-3.74.so" - echo - exit 1 - fi - fmod_support=" (lib='$fmod_lib' include='$fmod_inc')" -else - fmod_support="" -fi -echo "FMOD support $fmod $fmod_support" -echo "kqemu support $kqemu" -echo "Documentation $build_docs" +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" +if test -n "$sparc_cpu"; then + echo "Target Sparc Arch $sparc_cpu" +fi +echo "xen support $xen" +echo "brlapi support $brlapi" +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 "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 -#if test "$sdl_static" = "no"; then -# echo "WARNING: cannot compile statically with SDL - qemu-fast won't have a graphical output" -#fi -config_mak="config-host.mak" -config_h="config-host.h" - -#echo "Creating $config_mak and $config_h" - -echo "# Automatically generated by configure - do not modify" > $config_mak -echo "# Configured with: $0 $@" >> $config_mak -echo "/* Automatically generated by configure - do not modify */" > $config_h - -echo "prefix=$prefix" >> $config_mak -echo "bindir=$bindir" >> $config_mak -echo "mandir=$mandir" >> $config_mak -echo "datadir=$datadir" >> $config_mak -echo "docdir=$docdir" >> $config_mak -echo "#define CONFIG_QEMU_SHAREDIR \"$datadir\"" >> $config_h -echo "MAKE=$make" >> $config_mak -echo "INSTALL=$install" >> $config_mak -echo "CC=$cc" >> $config_mak -if test "$have_gcc3_options" = "yes" ; then - echo "HAVE_GCC3_OPTIONS=yes" >> $config_mak -fi -echo "HOST_CC=$host_cc" >> $config_mak -echo "AR=$ar" >> $config_mak -echo "STRIP=$strip -s -R .comment -R .note" >> $config_mak -echo "CFLAGS=$CFLAGS" >> $config_mak -echo "LDFLAGS=$LDFLAGS" >> $config_mak -echo "EXESUF=$EXESUF" >> $config_mak -if test "$cpu" = "i386" ; then - echo "ARCH=i386" >> $config_mak - echo "#define HOST_I386 1" >> $config_h -elif test "$cpu" = "x86_64" ; then - echo "ARCH=x86_64" >> $config_mak - echo "#define HOST_X86_64 1" >> $config_h -elif test "$cpu" = "armv4b" ; then - echo "ARCH=arm" >> $config_mak - echo "#define HOST_ARM 1" >> $config_h -elif test "$cpu" = "armv4l" ; then - echo "ARCH=arm" >> $config_mak - echo "#define HOST_ARM 1" >> $config_h -elif test "$cpu" = "powerpc" ; then - echo "ARCH=ppc" >> $config_mak - echo "#define HOST_PPC 1" >> $config_h -elif test "$cpu" = "mips" ; then - echo "ARCH=mips" >> $config_mak - echo "#define HOST_MIPS 1" >> $config_h -elif test "$cpu" = "s390" ; then - echo "ARCH=s390" >> $config_mak - echo "#define HOST_S390 1" >> $config_h -elif test "$cpu" = "alpha" ; then - echo "ARCH=alpha" >> $config_mak - echo "#define HOST_ALPHA 1" >> $config_h -elif test "$cpu" = "sparc" ; then - echo "ARCH=sparc" >> $config_mak - echo "#define HOST_SPARC 1" >> $config_h -elif test "$cpu" = "sparc64" ; then - echo "ARCH=sparc64" >> $config_mak - echo "#define HOST_SPARC64 1" >> $config_h -elif test "$cpu" = "ia64" ; then - echo "ARCH=ia64" >> $config_mak - echo "#define HOST_IA64 1" >> $config_h -elif test "$cpu" = "m68k" ; then - echo "ARCH=m68k" >> $config_mak - echo "#define HOST_M68K 1" >> $config_h -else - echo "Unsupported CPU" - exit 1 + +config_host_mak="config-host.mak" +config_host_ld="config-host.ld" + +echo "# Automatically generated by configure - do not modify" > $config_host_mak +printf "# Configured with:" >> $config_host_mak +printf " '%s'" "$0" "$@" >> $config_host_mak +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|s390x|sparc|sparc64) + ARCH=$cpu + ;; + armv4b|armv4l) + ARCH=arm + ;; + *) + echo "Unsupported CPU = $cpu" + exit 1 + ;; +esac +echo "ARCH=$ARCH" >> $config_host_mak +if test "$debug_tcg" = "yes" ; then + echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak +fi +if test "$debug" = "yes" ; then + echo "CONFIG_DEBUG_EXEC=y" >> $config_host_mak +fi +if test "$strip_opt" = "yes" ; then + echo "STRIP_OPT=-s" >> $config_host_mak fi if test "$bigendian" = "yes" ; then - echo "WORDS_BIGENDIAN=yes" >> $config_mak - echo "#define WORDS_BIGENDIAN 1" >> $config_h + echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak fi -echo "#define HOST_LONG_BITS $hostlongbits" >> $config_h +echo "HOST_LONG_BITS=$hostlongbits" >> $config_host_mak if test "$mingw32" = "yes" ; then - echo "CONFIG_WIN32=yes" >> $config_mak - echo "#define CONFIG_WIN32 1" >> $config_h -elif test -f "/usr/include/byteswap.h" ; then - echo "#define HAVE_BYTESWAP_H 1" >> $config_h + echo "CONFIG_WIN32=y" >> $config_host_mak +else + echo "CONFIG_POSIX=y" >> $config_host_mak fi -if test "$darwin" = "yes" ; then - echo "CONFIG_DARWIN=yes" >> $config_mak - echo "#define CONFIG_DARWIN 1" >> $config_h + +if test "$linux" = "yes" ; then + echo "CONFIG_LINUX=y" >> $config_host_mak fi -if test "$solaris" = "yes" ; then - echo "CONFIG_SOLARIS=yes" >> $config_mak - echo "#define HOST_SOLARIS $solarisrev" >> $config_h + +if test "$darwin" = "yes" ; then + echo "CONFIG_DARWIN=y" >> $config_host_mak fi -if test "$gdbstub" = "yes" ; then - echo "CONFIG_GDBSTUB=yes" >> $config_mak - echo "#define CONFIG_GDBSTUB 1" >> $config_h + +if test "$aix" = "yes" ; then + echo "CONFIG_AIX=y" >> $config_host_mak fi -if test "$gprof" = "yes" ; then - echo "TARGET_GPROF=yes" >> $config_mak - echo "#define HAVE_GPROF 1" >> $config_h + +if test "$solaris" = "yes" ; then + echo "CONFIG_SOLARIS=y" >> $config_host_mak + echo "CONFIG_SOLARIS_VERSION=$solarisrev" >> $config_host_mak + if test "$needs_libsunmath" = "yes" ; then + echo "CONFIG_NEEDS_LIBSUNMATH=y" >> $config_host_mak + fi fi if test "$static" = "yes" ; then - echo "CONFIG_STATIC=yes" >> $config_mak - echo "#define CONFIG_STATIC 1" >> $config_h + echo "CONFIG_STATIC=y" >> $config_host_mak + LDFLAGS="-static $LDFLAGS" fi if test $profiler = "yes" ; then - echo "#define CONFIG_PROFILER 1" >> $config_h + echo "CONFIG_PROFILER=y" >> $config_host_mak fi if test "$slirp" = "yes" ; then - echo "CONFIG_SLIRP=yes" >> $config_mak - echo "#define CONFIG_SLIRP 1" >> $config_h + echo "CONFIG_SLIRP=y" >> $config_host_mak + QEMU_CFLAGS="-I\$(SRC_PATH)/slirp $QEMU_CFLAGS" fi -if test "$adlib" = "yes" ; then - echo "CONFIG_ADLIB=yes" >> $config_mak - echo "#define CONFIG_ADLIB 1" >> $config_h -fi -if test "$oss" = "yes" ; then - echo "CONFIG_OSS=yes" >> $config_mak - echo "#define CONFIG_OSS 1" >> $config_h -fi -if test "$coreaudio" = "yes" ; then - echo "CONFIG_COREAUDIO=yes" >> $config_mak - echo "#define CONFIG_COREAUDIO 1" >> $config_h -fi -if test "$alsa" = "yes" ; then - echo "CONFIG_ALSA=yes" >> $config_mak - echo "#define CONFIG_ALSA 1" >> $config_h -fi -if test "$dsound" = "yes" ; then - echo "CONFIG_DSOUND=yes" >> $config_mak - echo "#define CONFIG_DSOUND 1" >> $config_h -fi -if test "$fmod" = "yes" ; then - echo "CONFIG_FMOD=yes" >> $config_mak - echo "CONFIG_FMOD_LIB=$fmod_lib" >> $config_mak - echo "CONFIG_FMOD_INC=$fmod_inc" >> $config_mak - echo "#define CONFIG_FMOD 1" >> $config_h +if test "$vde" = "yes" ; then + echo "CONFIG_VDE=y" >> $config_host_mak +fi +for card in $audio_card_list; do + def=CONFIG_`echo $card | tr '[:lower:]' '[:upper:]'` + echo "$def=y" >> $config_host_mak +done +echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak +for drv in $audio_drv_list; do + def=CONFIG_`echo $drv | tr '[:lower:]' '[:upper:]'` + echo "$def=y" >> $config_host_mak + if test "$drv" = "fmod"; then + echo "FMOD_CFLAGS=-I$fmod_inc" >> $config_host_mak + fi +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 +if test "$vnc_tls" = "yes" ; then + echo "CONFIG_VNC_TLS=y" >> $config_host_mak + echo "VNC_TLS_CFLAGS=$vnc_tls_cflags" >> $config_host_mak +fi +if test "$vnc_sasl" = "yes" ; then + echo "CONFIG_VNC_SASL=y" >> $config_host_mak + echo "VNC_SASL_CFLAGS=$vnc_sasl_cflags" >> $config_host_mak +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_mak -echo "#define QEMU_VERSION \"$qemu_version\"" >> $config_h - -echo "SRC_PATH=$source_path" >> $config_mak +echo "VERSION=$qemu_version" >>$config_host_mak +echo "PKGVERSION=$pkgversion" >>$config_host_mak +echo "SRC_PATH=$source_path" >> $config_host_mak if [ "$source_path_used" = "yes" ]; then - echo "VPATH=$source_path" >> $config_mak + echo "VPATH=$source_path" >> $config_host_mak +fi +echo "TARGET_DIRS=$target_list" >> $config_host_mak +if [ "$docs" = "yes" ] ; then + echo "BUILD_DOCS=yes" >> $config_host_mak +fi +if test "$sdl" = "yes" ; then + echo "CONFIG_SDL=y" >> $config_host_mak + echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak +fi +if test "$cocoa" = "yes" ; then + echo "CONFIG_COCOA=y" >> $config_host_mak +fi +if test "$curses" = "yes" ; then + echo "CONFIG_CURSES=y" >> $config_host_mak +fi +if test "$atfile" = "yes" ; then + echo "CONFIG_ATFILE=y" >> $config_host_mak +fi +if test "$utimens" = "yes" ; then + echo "CONFIG_UTIMENSAT=y" >> $config_host_mak +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 +if test "$byteswap_h" = "yes" ; then + echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak fi -echo "TARGET_DIRS=$target_list" >> $config_mak -if [ "$build_docs" = "yes" ] ; then - echo "BUILD_DOCS=yes" >> $config_mak +if test "$bswap_h" = "yes" ; then + echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak fi -if [ "$build_acpi_tables" = "yes" ] ; then - echo "BUILD_ACPI_TABLES=yes" >> $config_mak +if test "$curl" = "yes" ; then + echo "CONFIG_CURL=y" >> $config_host_mak + echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak +fi +if test "$brlapi" = "yes" ; then + echo "CONFIG_BRLAPI=y" >> $config_host_mak +fi +if test "$bluez" = "yes" ; then + echo "CONFIG_BLUEZ=y" >> $config_host_mak + echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak +fi +if test "$xen" = "yes" ; then + echo "CONFIG_XEN=y" >> $config_host_mak +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 +if test "$iovec" = "yes" ; then + echo "CONFIG_IOVEC=y" >> $config_host_mak +fi +if test "$preadv" = "yes" ; then + echo "CONFIG_PREADV=y" >> $config_host_mak +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 - echo "#define O_LARGEFILE 0" >> $config_h - echo "#define MAP_ANONYMOUS MAP_ANON" >> $config_h - echo "#define _BSD 1" >> $config_h + echo "CONFIG_BSD=y" >> $config_host_mak fi -echo "#define CONFIG_UNAME_RELEASE \"$uname_release\"" >> $config_h +echo "CONFIG_UNAME_RELEASE=\"$uname_release\"" >> $config_host_mak -for target in $target_list; do -target_dir="$target" -config_mak=$target_dir/config.mak -config_h=$target_dir/config.h -target_cpu=`echo $target | cut -d '-' -f 1` -target_bigendian="no" -[ "$target_cpu" = "armeb" ] && target_bigendian=yes -[ "$target_cpu" = "sparc" ] && target_bigendian=yes -[ "$target_cpu" = "sparc64" ] && target_bigendian=yes -[ "$target_cpu" = "ppc" ] && target_bigendian=yes -[ "$target_cpu" = "ppc64" ] && target_bigendian=yes -[ "$target_cpu" = "mips" ] && target_bigendian=yes -[ "$target_cpu" = "sh4eb" ] && target_bigendian=yes -target_softmmu="no" -if expr $target : '.*-softmmu' > /dev/null ; then - target_softmmu="yes" +if test "$zero_malloc" = "yes" ; then + echo "CONFIG_ZERO_MALLOC=y" >> $config_host_mak fi -target_user_only="no" -if expr $target : '.*-user' > /dev/null ; then - target_user_only="yes" + +# USB host support +case "$usb" in +linux) + echo "HOST_USB=linux" >> $config_host_mak +;; +bsd) + echo "HOST_USB=bsd" >> $config_host_mak +;; +*) + echo "HOST_USB=stub" >> $config_host_mak +;; +esac + +tools= +if test `expr "$target_list" : ".*softmmu.*"` != 0 ; then + tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools" + if [ "$linux" = "yes" ] ; then + 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 -if test "$target_user_only" = "no" -a "$check_gfx" = "yes" \ - -a "$sdl" = "no" -a "$cocoa" = "no" ; then - echo "ERROR: QEMU requires SDL or Cocoa for graphical output" - echo "To build QEMU without graphical output configure with --disable-gfx-check" - echo "Note that this will disable all output from the virtual graphics card." - exit 1; +# Mac OS X ships with a broken assembler +roms= +if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \ + "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \ + `expr "$target_list" : ".*softmmu.*"` != 0 ; then + roms="optionrom" +fi +echo "ROMS=$roms" >> $config_host_mak + +echo "prefix=$prefix" >> $config_host_mak +echo "bindir=\${prefix}$binsuffix" >> $config_host_mak +echo "mandir=\${prefix}$mansuffix" >> $config_host_mak +echo "datadir=\${prefix}$datasuffix" >> $config_host_mak +echo "docdir=\${prefix}$docsuffix" >> $config_host_mak +echo "MAKE=$make" >> $config_host_mak +echo "INSTALL=$install" >> $config_host_mak +echo "INSTALL_DIR=$install -d -m0755 -p" >> $config_host_mak +echo "INSTALL_DATA=$install -m0644 -p" >> $config_host_mak +echo "INSTALL_PROG=$install -m0755 -p" >> $config_host_mak +echo "CC=$cc" >> $config_host_mak +echo "HOST_CC=$host_cc" >> $config_host_mak +if test "$sparse" = "yes" ; then + echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak + echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak + echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak +fi +echo "AR=$ar" >> $config_host_mak +echo "OBJCOPY=$objcopy" >> $config_host_mak +echo "LD=$ld" >> $config_host_mak +echo "CFLAGS=$CFLAGS" >> $config_host_mak +echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak +echo "HELPER_CFLAGS=$helper_cflags" >> $config_host_mak +echo "LDFLAGS=$LDFLAGS" >> $config_host_mak +echo "ARLIBS_BEGIN=$arlibs_begin" >> $config_host_mak +echo "ARLIBS_END=$arlibs_end" >> $config_host_mak +echo "LIBS+=$LIBS" >> $config_host_mak +echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak +echo "EXESUF=$EXESUF" >> $config_host_mak + +# generate list of library paths for linker script + +$ld --verbose -v 2> /dev/null | grep SEARCH_DIR > ${config_host_ld} + +if test -f ${config_host_ld}~ ; then + if cmp -s $config_host_ld ${config_host_ld}~ ; then + mv ${config_host_ld}~ $config_host_ld + else + rm ${config_host_ld}~ + fi fi -#echo "Creating $config_mak, $config_h and $target_dir/Makefile" +for target in $target_list; do +target_dir="$target" +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|s390x|sh4eb|sparc|sparc64|sparc32plus) + target_bigendian=yes + ;; +esac +target_softmmu="no" +target_user_only="no" +target_linux_user="no" +target_darwin_user="no" +target_bsd_user="no" +case "$target" in + ${target_arch2}-softmmu) + 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" + ;; + *) + echo "ERROR: Target '$target' not recognised" + exit 1 + ;; +esac mkdir -p $target_dir mkdir -p $target_dir/fpu -if test "$target" = "arm-user" -o "$target" = "armeb-user" ; then +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 -if test "$target_user_only" = "no" ; then - mkdir -p $target_dir/slirp -fi # # don't use ln -sf as not all "ln -sf" over write the file/link @@ -773,126 +2267,354 @@ 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 "/* Automatically generated by configure - do not modify */" > $config_h - - -echo "include ../config-host.mak" >> $config_mak -echo "#include \"../config-host.h\"" >> $config_h +echo "# Automatically generated by configure - do not modify" > $config_target_mak bflt="no" -interp_prefix1=`echo "$interp_prefix" | sed "s/%M/$target_cpu/g"` -echo "#define CONFIG_QEMU_PREFIX \"$interp_prefix1\"" >> $config_h - -if test "$target_cpu" = "i386" ; then - echo "TARGET_ARCH=i386" >> $config_mak - echo "#define TARGET_ARCH \"i386\"" >> $config_h - echo "#define TARGET_I386 1" >> $config_h - if test $kqemu = "yes" -a "$target_softmmu" = "yes" -a $cpu = "i386" ; then - echo "#define USE_KQEMU 1" >> $config_h - fi -elif test "$target_cpu" = "arm" -o "$target_cpu" = "armeb" ; then - echo "TARGET_ARCH=arm" >> $config_mak - echo "#define TARGET_ARCH \"arm\"" >> $config_h - echo "#define TARGET_ARM 1" >> $config_h - bflt="yes" -elif test "$target_cpu" = "sparc" ; then - echo "TARGET_ARCH=sparc" >> $config_mak - echo "#define TARGET_ARCH \"sparc\"" >> $config_h - echo "#define TARGET_SPARC 1" >> $config_h -elif test "$target_cpu" = "sparc64" ; then - echo "TARGET_ARCH=sparc64" >> $config_mak - echo "#define TARGET_ARCH \"sparc64\"" >> $config_h - echo "#define TARGET_SPARC 1" >> $config_h - echo "#define TARGET_SPARC64 1" >> $config_h -elif test "$target_cpu" = "ppc" ; then - echo "TARGET_ARCH=ppc" >> $config_mak - echo "#define TARGET_ARCH \"ppc\"" >> $config_h - echo "#define TARGET_PPC 1" >> $config_h -elif test "$target_cpu" = "ppc64" ; then - echo "TARGET_ARCH=ppc64" >> $config_mak - echo "#define TARGET_ARCH \"ppc64\"" >> $config_h - echo "#define TARGET_PPC 1" >> $config_h - echo "#define TARGET_PPC64 1" >> $config_h -elif test "$target_cpu" = "x86_64" ; then - echo "TARGET_ARCH=x86_64" >> $config_mak - echo "#define TARGET_ARCH \"x86_64\"" >> $config_h - echo "#define TARGET_I386 1" >> $config_h - echo "#define TARGET_X86_64 1" >> $config_h - if test $kqemu = "yes" -a "$target_softmmu" = "yes" -a $cpu = "x86_64" ; then - echo "#define USE_KQEMU 1" >> $config_h - fi -elif test "$target_cpu" = "mips" -o "$target_cpu" = "mipsel" ; then - echo "TARGET_ARCH=mips" >> $config_mak - echo "#define TARGET_ARCH \"mips\"" >> $config_h - echo "#define TARGET_MIPS 1" >> $config_h - echo "CONFIG_SOFTFLOAT=yes" >> $config_mak - echo "#define CONFIG_SOFTFLOAT 1" >> $config_h -elif test "$target_cpu" = "sh4" -o "$target_cpu" = "sh4eb" ; then - echo "TARGET_ARCH=sh4" >> $config_mak - echo "#define TARGET_ARCH \"sh4\"" >> $config_h - echo "#define TARGET_SH4 1" >> $config_h - bflt="yes" -else - echo "Unsupported target CPU" - exit 1 -fi +elfload32="no" +target_nptl="no" +interp_prefix1=`echo "$interp_prefix" | sed "s/%M/$target_arch2/g"` +echo "CONFIG_QEMU_PREFIX=\"$interp_prefix1\"" >> $config_target_mak +gdb_xml_files="" + +TARGET_ARCH="$target_arch2" +TARGET_BASE_ARCH="" +TARGET_ABI_DIR="" + +case "$target_arch2" in + i386) + target_phys_bits=32 + ;; + x86_64) + TARGET_BASE_ARCH=i386 + target_phys_bits=64 + ;; + alpha) + target_phys_bits=64 + ;; + arm|armeb) + TARGET_ARCH=arm + bflt="yes" + target_nptl="yes" + gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml" + target_phys_bits=32 + ;; + cris) + target_nptl="yes" + target_phys_bits=32 + ;; + m68k) + bflt="yes" + gdb_xml_files="cf-core.xml cf-fp.xml" + target_phys_bits=32 + ;; + microblaze) + bflt="yes" + target_nptl="yes" + target_phys_bits=32 + ;; + mips|mipsel) + TARGET_ARCH=mips + 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_target_mak + target_phys_bits=64 + ;; + mips64|mips64el) + TARGET_ARCH=mips64 + TARGET_BASE_ARCH=mips + echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak + target_phys_bits=64 + ;; + ppc) + gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml" + target_phys_bits=32 + target_nptl="yes" + ;; + ppcemb) + TARGET_BASE_ARCH=ppc + TARGET_ABI_DIR=ppc + gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml" + target_phys_bits=64 + target_nptl="yes" + ;; + ppc64) + TARGET_BASE_ARCH=ppc + TARGET_ABI_DIR=ppc + gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml" + target_phys_bits=64 + ;; + ppc64abi32) + TARGET_ARCH=ppc64 + TARGET_BASE_ARCH=ppc + TARGET_ABI_DIR=ppc + 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 + ;; + sh4|sh4eb) + TARGET_ARCH=sh4 + bflt="yes" + target_nptl="yes" + target_phys_bits=32 + ;; + sparc) + target_phys_bits=64 + ;; + sparc64) + TARGET_BASE_ARCH=sparc + elfload32="yes" + target_phys_bits=64 + ;; + sparc32plus) + TARGET_ARCH=sparc64 + TARGET_BASE_ARCH=sparc + TARGET_ABI_DIR=sparc + echo "TARGET_ABI32=y" >> $config_target_mak + target_phys_bits=64 + ;; + s390x) + target_phys_bits=64 + ;; + *) + echo "Unsupported target CPU" + exit 1 + ;; +esac +echo "TARGET_ARCH=$TARGET_ARCH" >> $config_target_mak +target_arch_name="`echo $TARGET_ARCH | tr '[:lower:]' '[:upper:]'`" +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_target_mak +if [ "$TARGET_ABI_DIR" = "" ]; then + TARGET_ABI_DIR=$TARGET_ARCH +fi +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_target_mak + fi +esac +case "$target_arch2" in + 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 \ + \( "$target_arch2" = "ppcemb" -a "$cpu" = "ppc" \) -o \ + \( "$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_target_mak + echo "KVM_CFLAGS=$kvm_cflags" >> $config_target_mak + fi +esac +echo "TARGET_PHYS_ADDR_BITS=$target_phys_bits" >> $config_target_mak if test "$target_bigendian" = "yes" ; then - echo "TARGET_WORDS_BIGENDIAN=yes" >> $config_mak - echo "#define TARGET_WORDS_BIGENDIAN 1" >> $config_h + echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak fi if test "$target_softmmu" = "yes" ; then - echo "CONFIG_SOFTMMU=yes" >> $config_mak - echo "#define CONFIG_SOFTMMU 1" >> $config_h + 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=yes" >> $config_mak - echo "#define CONFIG_USER_ONLY 1" >> $config_h + echo "CONFIG_USER_ONLY=y" >> $config_target_mak fi - -if test "$target_cpu" = "arm" -o "$target_cpu" = "armeb" -o "$target_cpu" = "sparc" -o "$target_cpu" = "sparc64"; then - echo "CONFIG_SOFTFLOAT=yes" >> $config_mak - echo "#define CONFIG_SOFTFLOAT 1" >> $config_h +if test "$target_linux_user" = "yes" ; then + echo "CONFIG_LINUX_USER=y" >> $config_target_mak fi +if test "$target_darwin_user" = "yes" ; then + 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 + +case "$target_arch2" in + 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_target_mak + ;; +esac + if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then - echo "TARGET_HAS_BFLT=yes" >> $config_mak - echo "#define TARGET_HAS_BFLT 1" >> $config_h + 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_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_target_mak +fi +if test "$target_user_only" = "yes" -a "$guest_base" = "yes"; then + echo "CONFIG_USE_GUEST_BASE=y" >> $config_target_mak +fi +if test "$target_bsd_user" = "yes" ; then + echo "CONFIG_BSD_USER=y" >> $config_target_mak fi -# sdl defines -if test "$target_user_only" = "no"; then - if test "$target_softmmu" = "no" -o "$static" = "yes"; then - sdl1=$sdl_static - else - sdl1=$sdl - fi - if test "$sdl1" = "yes" ; then - echo "#define CONFIG_SDL 1" >> $config_h - echo "CONFIG_SDL=yes" >> $config_mak - if test "$target_softmmu" = "no" -o "$static" = "yes"; then - echo "SDL_LIBS=$sdl_static_libs" >> $config_mak - else - echo "SDL_LIBS=`$sdl_config --libs`" >> $config_mak - fi - if [ "${aa}" = "yes" ] ; then - echo "SDL_CFLAGS=`$sdl_config --cflags` `aalib-config --cflags`" >> $config_mak - else - echo "SDL_CFLAGS=`$sdl_config --cflags`" >> $config_mak - fi - fi +# generate QEMU_CFLAGS/LDFLAGS for targets + +cflags="" +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 +cflags="-I\$(SRC_PATH)/tcg $cflags" +cflags="-I\$(SRC_PATH)/fpu $cflags" -if test "$cocoa" = "yes" ; then - echo "#define CONFIG_COCOA 1" >> $config_h - echo "CONFIG_COCOA=yes" >> $config_mak +for i in $ARCH $TARGET_BASE_ARCH ; do + case "$i" in + alpha) + echo "CONFIG_ALPHA_DIS=y" >> $config_target_mak + ;; + arm) + echo "CONFIG_ARM_DIS=y" >> $config_target_mak + ;; + cris) + echo "CONFIG_CRIS_DIS=y" >> $config_target_mak + ;; + hppa) + echo "CONFIG_HPPA_DIS=y" >> $config_target_mak + ;; + i386|x86_64) + echo "CONFIG_I386_DIS=y" >> $config_target_mak + ;; + m68k) + echo "CONFIG_M68K_DIS=y" >> $config_target_mak + ;; + microblaze) + echo "CONFIG_MICROBLAZE_DIS=y" >> $config_target_mak + ;; + mips*) + echo "CONFIG_MIPS_DIS=y" >> $config_target_mak + ;; + ppc*) + echo "CONFIG_PPC_DIS=y" >> $config_target_mak + ;; + s390*) + echo "CONFIG_S390_DIS=y" >> $config_target_mak + ;; + sh4) + echo "CONFIG_SH4_DIS=y" >> $config_target_mak + ;; + sparc*) + echo "CONFIG_SPARC_DIS=y" >> $config_target_mak + ;; + esac +done + +case "$ARCH" in +alpha) + # Ensure there's only a single GP + cflags="-msmall-data $cflags" +;; +ia64) + cflags="-mno-sdata $cflags" +;; +esac + +if test "$target_softmmu" = "yes" ; then + case "$TARGET_BASE_ARCH" in + arm) + cflags="-DHAS_AUDIO $cflags" + ;; + i386|mips|ppc) + cflags="-DHAS_AUDIO -DHAS_AUDIO_CHOICE $cflags" + ;; + 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_target_mak fi +if test "$gprof" = "yes" ; then + 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_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 + sparc) + # -static is used to avoid g1/g3 usage by the dynamic linker + ldflags="$linker_script -static $ldflags" + ;; + ia64) + ldflags="-Wl,-G0 $linker_script -static $ldflags" + ;; + i386|x86_64|ppc|ppc64|s390|sparc64|alpha|arm|m68k|mips|mips64) + ldflags="$linker_script $ldflags" + ;; + esac +fi +if test "$target_softmmu" = "yes" ; then + case "$ARCH" in + ia64) + ldflags="-Wl,-G0 $linker_script -static $ldflags" + ;; + esac +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" + 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 for dir in $DIRS ; do mkdir -p $dir done @@ -903,4 +2625,30 @@ if test "$source_path_used" = "yes" ; th done fi -rm -f $TMPO $TMPC $TMPE $TMPS +# 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 + rm -f $d/Makefile + ln -s $source_path/Makefile.hw $d/Makefile + 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