提交 cd01b4a3 编写于 作者: A aliguori

Fix windows build

Right now, the Windows build is broken because of NBD.  Using a mingw32 cross
compiler is also badly broken.

This patch fixes the Windows build by stubbing out NBD support until someone
fixes it for Windows.  It also santizing the mingw32 cross compiler support
by replacing the --enable-mingw32 option with a compiler check to determine
if we're on windows or not.

Also remove the weird SDL pseudo-detection for mingw32 using a cross compiler.
The hardcoded sdl-config name is seemly arbitrary.  If you cross compiler SDL
correctly and modify your PATH variable appropriately, it will Just Work when
cross compiling.

The audio driver detection is also broken for cross compiling so you have to
specify the audio drivers explicitly for now.
Signed-off-by: NAnthony Liguori <aliguori@us.ibm.com>




git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5046 c046a42c-6fe2-441c-8c8c-71466251a162
上级 2f6a1ab0
...@@ -46,7 +46,10 @@ recurse-all: $(SUBDIR_RULES) ...@@ -46,7 +46,10 @@ recurse-all: $(SUBDIR_RULES)
BLOCK_OBJS=cutils.o qemu-malloc.o BLOCK_OBJS=cutils.o qemu-malloc.o
BLOCK_OBJS+=block-cow.o block-qcow.o aes.o block-vmdk.o block-cloop.o BLOCK_OBJS+=block-cow.o block-qcow.o aes.o block-vmdk.o block-cloop.o
BLOCK_OBJS+=block-dmg.o block-bochs.o block-vpc.o block-vvfat.o BLOCK_OBJS+=block-dmg.o block-bochs.o block-vpc.o block-vvfat.o
BLOCK_OBJS+=block-qcow2.o block-parallels.o block-nbd.o BLOCK_OBJS+=block-qcow2.o block-parallels.o
ifndef CONFIG_WIN32
BLOCK_OBJS+=block-nbd.o
endif
###################################################################### ######################################################################
# libqemu_common.a: Target independent part of system emulation. The # libqemu_common.a: Target independent part of system emulation. The
...@@ -54,10 +57,14 @@ BLOCK_OBJS+=block-qcow2.o block-parallels.o block-nbd.o ...@@ -54,10 +57,14 @@ BLOCK_OBJS+=block-qcow2.o block-parallels.o block-nbd.o
# system emulation, i.e. a single QEMU executable should support all # system emulation, i.e. a single QEMU executable should support all
# CPUs and machines. # CPUs and machines.
OBJS=nbd.o $(BLOCK_OBJS) OBJS=$(BLOCK_OBJS)
OBJS+=readline.o console.o OBJS+=readline.o console.o
OBJS+=block.o OBJS+=block.o
ifndef CONFIG_WIN32
OBJS+=nbd.o
endif
OBJS+=irq.o OBJS+=irq.o
OBJS+=i2c.o smbus.o smbus_eeprom.o max7310.o max111x.o wm8750.o OBJS+=i2c.o smbus.o smbus_eeprom.o max7310.o max111x.o wm8750.o
OBJS+=ssd0303.o ssd0323.o ads7846.o stellaris_input.o twl92230.o OBJS+=ssd0303.o ssd0323.o ads7846.o stellaris_input.o twl92230.o
...@@ -166,11 +173,11 @@ libqemu_user.a: $(USER_OBJS) ...@@ -166,11 +173,11 @@ libqemu_user.a: $(USER_OBJS)
rm -f $@ rm -f $@
$(AR) rcs $@ $(USER_OBJS) $(AR) rcs $@ $(USER_OBJS)
QEMU_IMG_BLOCK_OBJS = nbd.o $(BLOCK_OBJS) QEMU_IMG_BLOCK_OBJS = $(BLOCK_OBJS)
ifdef CONFIG_WIN32 ifdef CONFIG_WIN32
QEMU_IMG_BLOCK_OBJS += qemu-img-block-raw-win32.o QEMU_IMG_BLOCK_OBJS += qemu-img-block-raw-win32.o
else else
QEMU_IMG_BLOCK_OBJS += qemu-img-block-raw-posix.o QEMU_IMG_BLOCK_OBJS += nbd.o qemu-img-block-raw-posix.o
endif endif
###################################################################### ######################################################################
......
...@@ -1332,7 +1332,9 @@ void bdrv_init(void) ...@@ -1332,7 +1332,9 @@ void bdrv_init(void)
bdrv_register(&bdrv_vvfat); bdrv_register(&bdrv_vvfat);
bdrv_register(&bdrv_qcow2); bdrv_register(&bdrv_qcow2);
bdrv_register(&bdrv_parallels); bdrv_register(&bdrv_parallels);
#ifndef _WIN32
bdrv_register(&bdrv_nbd); bdrv_register(&bdrv_nbd);
#endif
} }
void *qemu_aio_get(BlockDriverState *bs, BlockDriverCompletionFunc *cb, void *qemu_aio_get(BlockDriverState *bs, BlockDriverCompletionFunc *cb,
......
...@@ -283,8 +283,6 @@ for opt do ...@@ -283,8 +283,6 @@ for opt do
;; ;;
--disable-vnc-tls) vnc_tls="no" --disable-vnc-tls) vnc_tls="no"
;; ;;
--enable-mingw32) mingw32="yes" ; cross_prefix="i386-mingw32-" ; linux_user="no"
;;
--disable-slirp) slirp="no" --disable-slirp) slirp="no"
;; ;;
--disable-vde) vde="no" --disable-vde) vde="no"
...@@ -347,13 +345,6 @@ for opt do ...@@ -347,13 +345,6 @@ for opt do
esac esac
done done
if [ "$bsd" = "yes" -o "$darwin" = "yes" -o "$mingw32" = "yes" ] ; then
AIOLIBS=
else
# Some Linux architectures (e.g. s390) don't imply -lpthread automatically.
AIOLIBS="-lrt -lpthread"
fi
# default flags for all hosts # default flags for all hosts
CFLAGS="$CFLAGS -Wall -O2 -g -fno-strict-aliasing" CFLAGS="$CFLAGS -Wall -O2 -g -fno-strict-aliasing"
LDFLAGS="$LDFLAGS -g" LDFLAGS="$LDFLAGS -g"
...@@ -423,7 +414,6 @@ echo " --static enable static build [$static]" ...@@ -423,7 +414,6 @@ echo " --static enable static build [$static]"
echo " --disable-werror disable compilation abort on warning" echo " --disable-werror disable compilation abort on warning"
echo " --disable-sdl disable SDL" echo " --disable-sdl disable SDL"
echo " --enable-cocoa enable COCOA (Mac OS X only)" echo " --enable-cocoa enable COCOA (Mac OS X only)"
echo " --enable-mingw32 enable Win32 cross compilation with mingw32"
echo " --audio-drv-list=LIST set audio drivers list:" echo " --audio-drv-list=LIST set audio drivers list:"
echo " Available drivers: $audio_possible_drivers" echo " Available drivers: $audio_possible_drivers"
echo " --audio-card-list=LIST set list of additional emulated audio cards" echo " --audio-card-list=LIST set list of additional emulated audio cards"
...@@ -467,10 +457,31 @@ else ...@@ -467,10 +457,31 @@ else
exit 1 exit 1
fi fi
# check compiler to see if we're on mingw32
cat > $TMPC <<EOF
#include <windows.h>
#ifndef _WIN32
#error not windows
#endif
int main(void) {}
EOF
if $cc $ARCH_CFLAGS -c -o $TMPO $TMPC 2> /dev/null ; then
mingw32="yes"
fi
if test "$mingw32" = "yes" ; then if test "$mingw32" = "yes" ; then
linux="no" linux="no"
EXESUF=".exe" EXESUF=".exe"
oss="no" oss="no"
linux_user="no"
fi
if [ "$bsd" = "yes" -o "$darwin" = "yes" -o "$mingw32" = "yes" ] ; then
AIOLIBS=
else
# Some Linux architectures (e.g. s390) don't imply -lpthread automatically.
AIOLIBS="-lrt -lpthread"
fi fi
# Check for gcc4, error if pre-gcc4 # Check for gcc4, error if pre-gcc4
...@@ -700,42 +711,35 @@ if test -z "$sdl" ; then ...@@ -700,42 +711,35 @@ if test -z "$sdl" ; then
sdl=no sdl=no
sdl_static=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 cat > $TMPC << EOF
#include <SDL.h> #include <SDL.h>
#undef main /* We don't want SDL to override our main() */ #undef main /* We don't want SDL to override our main() */
int main( void ) { return SDL_Init (SDL_INIT_VIDEO); } int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
EOF EOF
if $cc $ARCH_CFLAGS -o $TMPE ${OS_CFLAGS} `$sdl_config --cflags 2> /dev/null` $TMPC `$sdl_config --libs 2> /dev/null` 2> /tmp/qemu-$$-sdl-config.log ; then if $cc $ARCH_CFLAGS -o $TMPE ${OS_CFLAGS} `$sdl_config --cflags 2> /dev/null` $TMPC `$sdl_config --libs 2> /dev/null` 2> /tmp/qemu-$$-sdl-config.log ; then
_sdlversion=`$sdl_config --version | sed 's/[^0-9]//g'` _sdlversion=`$sdl_config --version | sed 's/[^0-9]//g'`
if test "$_sdlversion" -lt 121 ; then if test "$_sdlversion" -lt 121 ; then
sdl_too_old=yes sdl_too_old=yes
else else
if test "$cocoa" = "no" ; then if test "$cocoa" = "no" ; then
sdl=yes sdl=yes
fi
fi fi
fi
# static link with sdl ? # static link with sdl ?
if test "$sdl" = "yes" ; then if test "$sdl" = "yes" ; then
aa="no" aa="no"
`$sdl_config --static-libs 2>/dev/null | grep \\\-laa > /dev/null` && aa="yes" `$sdl_config --static-libs 2>/dev/null | grep \\\-laa > /dev/null` && aa="yes"
sdl_static_libs=`$sdl_config --static-libs 2>/dev/null` sdl_static_libs=`$sdl_config --static-libs 2>/dev/null`
if [ "$aa" = "yes" ] ; then if [ "$aa" = "yes" ] ; then
sdl_static_libs="$sdl_static_libs `aalib-config --static-libs`" sdl_static_libs="$sdl_static_libs `aalib-config --static-libs`"
fi fi
if $cc -o $TMPE ${OS_CFLAGS} `$sdl_config --cflags 2> /dev/null` $TMPC $sdl_static_libs 2> /dev/null; then if $cc -o $TMPE ${OS_CFLAGS} `$sdl_config --cflags 2> /dev/null` $TMPC $sdl_static_libs 2> /dev/null; then
sdl_static=yes sdl_static=yes
fi fi
fi # static link fi # static link
fi # sdl compile test fi # sdl compile test
fi # cross compilation
else else
# Make sure to disable cocoa if sdl was set # Make sure to disable cocoa if sdl was set
if test "$sdl" = "yes" ; then if test "$sdl" = "yes" ; then
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册