[libvirt] MinGW Windows cross-compiler in Fedora, compiling libvirt

Richard W.M. Jones rjones at redhat.com
Tue Jul 8 09:51:03 UTC 2008


We've set up a SIG (Special Interest Group) for people interested in
adding a Windows cross-compiler to Fedora:

  https://fedoraproject.org/wiki/SIGs/MinGW

The primary target at the moment is to allow libvirt to be cross-
compiled on a Fedora machine, targetting Windows.  This will allow us
to do more regular testing on the Windows build and ensure it doesn't
break so often.

At the moment you can already build all dependencies of libvirt, and
libvirt itself, but only statically (see detailed reasons below).  I
also got virsh.exe working, and there seems to be no reason why other
C programs linked to libvirt wouldn't work too.

For the dependencies, start with the README file here:

  http://hg.et.redhat.com/misc/fedora-mingw--devel

Building libvirt
----------------

After building and installing the dependencies, you will be able to
build libvirt from CVS (*not* libvirt 0.4.4 since that had a MinGW bug
which was subsequently patched):

  CC="i686-pc-mingw32-gcc -I/usr/i686-pc-mingw32/sys-root/mingw/include/libxml2" \
  ./configure \
    --host=i686-pc-mingw32 \
    --prefix=/usr/i686-pc-mingw32/sys-root/mingw \
    --without-xen \
    --without-qemu \
    --without-libvirtd \
    --without-sasl \
    --disable-shared

  make

Running programs under Wine
---------------------------

If Wine is installed, you can just run programs like virsh.exe
directly.  Make sure any required DLLs are on your path.

It's possible we could get the test suite running using Wine, but I
haven't tried this.

Current problems for libvirt on Windows/MinGW
---------------------------------------------

No python.  Either it was my imagination, or we've lost the
'--disable-python' configure option.  In any case we should be able to
detect that Python isn't going to work or disable it completely, so
the build doesn't fail at this point.

Libxml2 detection is broken (again?).  The configure script insists on
finding the system library, not the MinGW sys-root library.  Hence the
strange $CC variable above.

Static linking only: The problem here is that PortableXDR uses a
Windows library called Winsock (ws2_32.dll).  MinGW doesn't provide a
dynamic version of this library, only a static version -- I'm not sure
why this is, obviously though if you were running on Windows then
you'd have the MSFT binary DLL.  Hence PortableXDR can only be linked
statically.  This implies that libvirt can also only be linked
statically.  I think this is easy to solve: PortableXDR only uses a
handful of simple functions from Winsock, which we can just get from
Gnulib or some other source instead.

-----------

Rich.

-- 
Richard Jones, Emerging Technologies, Red Hat  http://et.redhat.com/~rjones
virt-top is 'top' for virtual machines.  Tiny program with many
powerful monitoring features, net stats, disk stats, logging, etc.
http://et.redhat.com/~rjones/virt-top




More information about the libvir-list mailing list