Patchwork [01/11] Add hard build dependency on glib

login
register
mail settings
Submitter Anthony Liguori
Date March 23, 2011, 12:16 a.m.
Message ID <1300839376-22520-2-git-send-email-aliguori@us.ibm.com>
Download mbox | patch
Permalink /patch/87977/
State New
Headers show

Comments

Anthony Liguori - March 23, 2011, 12:16 a.m.
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>
---
 Makefile        |    2 ++
 Makefile.objs   |    2 ++
 Makefile.target |    1 +
 configure       |   13 +++++++++++++
 4 files changed, 18 insertions(+), 0 deletions(-)
Stefan Hajnoczi - March 23, 2011, 8:13 a.m.
On Wed, Mar 23, 2011 at 12:16 AM, Anthony Liguori <aliguori@us.ibm.com> wrote:
> 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>
> ---
>  Makefile        |    2 ++
>  Makefile.objs   |    2 ++
>  Makefile.target |    1 +
>  configure       |   13 +++++++++++++
>  4 files changed, 18 insertions(+), 0 deletions(-)

Yes, please.  I'd like to use glib to make simpletrace portable.

To paraphrase the saying about non-trivial C programs and LISP interpreters:

"In every cross-platform C program there is a glib."

Stefan
Roy Tam - March 23, 2011, 8:19 a.m.
2011/3/23 Stefan Hajnoczi <stefanha@gmail.com>:
> On Wed, Mar 23, 2011 at 12:16 AM, Anthony Liguori <aliguori@us.ibm.com> wrote:
>> 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>
>> ---
>>  Makefile        |    2 ++
>>  Makefile.objs   |    2 ++
>>  Makefile.target |    1 +
>>  configure       |   13 +++++++++++++
>>  4 files changed, 18 insertions(+), 0 deletions(-)
>
> Yes, please.  I'd like to use glib to make simpletrace portable.
>
> To paraphrase the saying about non-trivial C programs and LISP interpreters:
>
> "In every cross-platform C program there is a glib."
>
> Stefan
>
>

So, breaking win32 support again?

Roy
Stefan Hajnoczi - March 23, 2011, 8:41 a.m.
On Wed, Mar 23, 2011 at 8:19 AM, Roy Tam <roytam@gmail.com> wrote:
> 2011/3/23 Stefan Hajnoczi <stefanha@gmail.com>:
>> On Wed, Mar 23, 2011 at 12:16 AM, Anthony Liguori <aliguori@us.ibm.com> wrote:
>>> 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>
>>> ---
>>>  Makefile        |    2 ++
>>>  Makefile.objs   |    2 ++
>>>  Makefile.target |    1 +
>>>  configure       |   13 +++++++++++++
>>>  4 files changed, 18 insertions(+), 0 deletions(-)
>>
>> Yes, please.  I'd like to use glib to make simpletrace portable.
>>
>> To paraphrase the saying about non-trivial C programs and LISP interpreters:
>>
>> "In every cross-platform C program there is a glib."
>>
>> Stefan
>>
>>
>
> So, breaking win32 support again?

Can you please explain the win32 issue with glib?

Stefan
Roy Tam - March 23, 2011, 8:58 a.m.
2011/3/23 Stefan Hajnoczi <stefanha@gmail.com>:
> On Wed, Mar 23, 2011 at 8:19 AM, Roy Tam <roytam@gmail.com> wrote:
>> 2011/3/23 Stefan Hajnoczi <stefanha@gmail.com>:
>>> On Wed, Mar 23, 2011 at 12:16 AM, Anthony Liguori <aliguori@us.ibm.com> wrote:
>>>> 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>
>>>> ---
>>>>  Makefile        |    2 ++
>>>>  Makefile.objs   |    2 ++
>>>>  Makefile.target |    1 +
>>>>  configure       |   13 +++++++++++++
>>>>  4 files changed, 18 insertions(+), 0 deletions(-)
>>>
>>> Yes, please.  I'd like to use glib to make simpletrace portable.
>>>
>>> To paraphrase the saying about non-trivial C programs and LISP interpreters:
>>>
>>> "In every cross-platform C program there is a glib."
>>>
>>> Stefan
>>>
>>>
>>
>> So, breaking win32 support again?
>
> Can you please explain the win32 issue with glib?
>
> Stefan
>

I think I have to change my words. Glib works in win32, but adding
Glib to QEMU will bloat the binary size. It adds more dependency on
building and the result binary. I wonder if it is a must to add it.

Roy
Paolo Bonzini - March 23, 2011, 9:19 a.m.
On 03/23/2011 09:58 AM, Roy Tam wrote:
> I think I have to change my words. Glib works in win32, but adding
> Glib to QEMU will bloat the binary size. It adds more dependency on
> building and the result binary. I wonder if it is a must to add it.

That's very far from my definition of "breaking".

Paolo
Stefan Hajnoczi - March 23, 2011, 9:22 a.m.
On Wed, Mar 23, 2011 at 8:58 AM, Roy Tam <roytam@gmail.com> wrote:
> I think I have to change my words. Glib works in win32, but adding
> Glib to QEMU will bloat the binary size. It adds more dependency on
> building and the result binary. I wonder if it is a must to add it.

If we stick to re-implementing cross-platform wrappers then Windows
support will always lag behind POSIX and developers will spend effort
working around platform quirks rather than improving QEMU.  Very few
QEMU developers build on Windows, for example Paolo's latest Windows
iothread support patches were tested under Wine.

Will introducing glib add a dependency and at worst some temporary
breakage?  Yes, there's a risk.  But longer term this is great news
for Windows because it gives it a chance of actually working on a
level close to *nix.

Stefan

Patch

diff --git a/Makefile b/Makefile
index 89e88b4..5f9b120 100644
--- a/Makefile
+++ b/Makefile
@@ -104,6 +104,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 f8cf199..b5e1c35 100644
--- a/Makefile.objs
+++ b/Makefile.objs
@@ -323,3 +323,5 @@  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 62b102a..4897e0f 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 backend driver support
 obj-$(CONFIG_XEN) += xen_machine_pv.o xen_domainbuild.o
diff --git a/configure b/configure
index 5a5827f..0302405 100755
--- a/configure
+++ b/configure
@@ -1670,6 +1670,18 @@  EOF
 fi
 
 ##########################################
+# glib support probe
+if $pkg_config --modversion gthread-2.0 > /dev/null 2>&1 ; then
+    glib_cflags=`$pkg_config --cflags gthread-2.0 2>/dev/null`
+    glib_libs=`$pkg_config --libs gthread-2.0 2>/dev/null`
+    libs_softmmu="$glib_libs $libs_softmmu"
+    libs_tools="$glib_libs $libs_softmmu"
+else
+    echo "glib-2.0 required to compile QEMU"
+    exit 1
+fi
+
+##########################################
 # kvm probe
 if test "$kvm" != "no" ; then
     cat > $TMPC <<EOF
@@ -2770,6 +2782,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=y" >> $config_host_mak
 fi