diff mbox

[04/25] Add hard build dependency on glib

Message ID 1311278474-24336-5-git-send-email-lcapitulino@redhat.com
State New
Headers show

Commit Message

Luiz Capitulino July 21, 2011, 8 p.m. UTC
From: Anthony Liguori <aliguori@us.ibm.com>

GLib is an extremely common library that has a portable thread implementation
along with tons of other goodies.

GLib and GObject have a fantastic amount of infrastructure we can leverage in
QEMU including an object oriented programming infrastructure.

Short term, it has a very nice thread pool implementation that we could leverage
in something like virtio-9p.  It also has a test harness implementation that
this series will use.

Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
Signed-off-by: Luiz Capitulino <lcapitulino@gmail.com>
---
 Makefile        |    2 ++
 Makefile.objs   |    1 +
 Makefile.target |    1 +
 configure       |   13 +++++++++++++
 4 files changed, 17 insertions(+), 0 deletions(-)

Comments

TeLeMan Aug. 2, 2011, 2:03 a.m. UTC | #1
This patch introduces "-mms-bitfields" cflag on MinGW but this cflag
breaks gcc packed structures("__attribute__((packed))"). For example,
slirp does not work on Win32.
Luiz Capitulino Aug. 2, 2011, 7:06 p.m. UTC | #2
On Tue, 2 Aug 2011 10:03:30 +0800
TeLeMan <geleman@gmail.com> wrote:

> This patch introduces "-mms-bitfields" cflag on MinGW but this cflag
> breaks gcc packed structures("__attribute__((packed))"). For example,
> slirp does not work on Win32.

I'm not familiar with MinGW (or why glib would require that flag).

Michael, Anthony, any idea?
Anthony Liguori Aug. 2, 2011, 7:18 p.m. UTC | #3
On 08/02/2011 02:06 PM, Luiz Capitulino wrote:
> On Tue, 2 Aug 2011 10:03:30 +0800
> TeLeMan<geleman@gmail.com>  wrote:
>
>> This patch introduces "-mms-bitfields" cflag on MinGW but this cflag
>> breaks gcc packed structures("__attribute__((packed))"). For example,
>> slirp does not work on Win32.
>
> I'm not familiar with MinGW (or why glib would require that flag).
>
> Michael, Anthony, any idea?

ms-bitfields does packing of bitfields in a way compatible with MSVC. 
In order to call Windows API functions that use structures that have 
bitfields, you need to use ms-bitfields.

Slirp will need to be fixed to not depend on GCC bitfield layout.  This 
is one of the reasons why portable code should never use bitfields.

Regards,

Anthony Liguori
diff mbox

Patch

diff --git a/Makefile b/Makefile
index b3ffbe2..42ae4e5 100644
--- a/Makefile
+++ b/Makefile
@@ -106,6 +106,8 @@  audio/audio.o audio/fmodaudio.o: QEMU_CFLAGS += $(FMOD_CFLAGS)
 
 QEMU_CFLAGS+=$(CURL_CFLAGS)
 
+QEMU_CFLAGS+=$(GLIB_CFLAGS)
+
 ui/cocoa.o: ui/cocoa.m
 
 ui/sdl.o audio/sdlaudio.o ui/sdl_zoom.o baum.o: QEMU_CFLAGS += $(SDL_CFLAGS)
diff --git a/Makefile.objs b/Makefile.objs
index c43ed05..55d18bb 100644
--- a/Makefile.objs
+++ b/Makefile.objs
@@ -376,3 +376,4 @@  vl.o: QEMU_CFLAGS+=$(GPROF_CFLAGS)
 
 vl.o: QEMU_CFLAGS+=$(SDL_CFLAGS)
 
+vl.o: QEMU_CFLAGS+=$(GLIB_CFLAGS)
diff --git a/Makefile.target b/Makefile.target
index e20a313..cde509b 100644
--- a/Makefile.target
+++ b/Makefile.target
@@ -204,6 +204,7 @@  QEMU_CFLAGS += $(VNC_TLS_CFLAGS)
 QEMU_CFLAGS += $(VNC_SASL_CFLAGS)
 QEMU_CFLAGS += $(VNC_JPEG_CFLAGS)
 QEMU_CFLAGS += $(VNC_PNG_CFLAGS)
+QEMU_CFLAGS += $(GLIB_CFLAGS)
 
 # xen support
 obj-$(CONFIG_XEN) += xen-all.o xen_machine_pv.o xen_domainbuild.o xen-mapcache.o
diff --git a/configure b/configure
index e57efb1..c0c8fdf 100755
--- a/configure
+++ b/configure
@@ -1803,6 +1803,18 @@  EOF
 fi
 
 ##########################################
+# glib support probe
+if $pkg_config --modversion gthread-2.0 gio-2.0 > /dev/null 2>&1 ; then
+    glib_cflags=`$pkg_config --cflags gthread-2.0 gio-2.0 2>/dev/null`
+    glib_libs=`$pkg_config --libs gthread-2.0 gio-2.0 2>/dev/null`
+    libs_softmmu="$glib_libs $libs_softmmu"
+    libs_tools="$glib_libs $libs_tools"
+else
+    echo "glib-2.0 required to compile QEMU"
+    exit 1
+fi
+
+##########################################
 # pthread probe
 PTHREADLIBS_LIST="-lpthread -lpthreadGC2"
 
@@ -2849,6 +2861,7 @@  if test "$bluez" = "yes" ; then
   echo "CONFIG_BLUEZ=y" >> $config_host_mak
   echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
 fi
+echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
 if test "$xen" = "yes" ; then
   echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
   echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak