Contents
How to guide for cross-compiling GTK+ for Win32
This is intended to be a quick-start guide for building GTK+ binaries for Win32, but from the comfort of Linux.
Bootstrap
To begin, you'll need to install mingw, the Linux/UNIX Win32 cross compiler. It allows you to build binaries for the Windows platform using a Linux box. Note you should also uninstall the Wine headers, because they cause nasty conficts with mingw's ones while compiling.
MinGW Installation instructions
Debian/Ubuntu |
Fedora/OpenSUSE |
Gentoo |
apt-get install mingw32 mingw32-binutils mingw32-runtime |
Follow the instructions on this page. |
emerge xmingw xmingw |
Wine headers Uninstallation
Debian/Ubuntu |
Fedora/OpenSUSE |
Gentoo |
apt-get remove wine-dev |
|
|
Building the sources using Jhbuild
First, follow the instructions to install Jhbuild. Then download the archive jhbuild.mingw.gtk-2.16.tgz and extract it to a directory of your choice.
tar xzf jhbuild.mingw.gtk-2.16.tgz
You will get a new subdirectory jhbuild.mingw.gtk-2.16. Make this directory your working directory
cd jhbuild.mingw.gtk-2.16
and call
./cross-build-gtk-dbg
to build a debug version or
./cross-build-gtk-rls
to build a release version of GTK+. These are simple shell scripts which call jhbuild with a suitable jhbuildrc file. Any arguments will be passed to jhbuild.
The dowloads and builds will be done in the subdirectory checkout.dbg or checkout.rls depending on the shell script called. The resulting files for installation will be placed in target.dbg or target.rls, respectively.
After successfull completion of the build process you can copy the target directory to your windows system. Before you can use the cross compiled GTK+ you have to do one additional step on the target platform. So boot your windows box, change to the target directory and type
bin\gdk-pixbuf-query-loaders.exe > etc\gtk-2.0\gdk-pixbuf.loaders
Optionally, if you prefer a more Windows-like look & feel, copy the gtkrc-file of the MS-Windows-theme to your home directory:
copy share\themes\MS-Windows\gtk-2.0\gtkrc %HOME%\.gtkrc-2.0
Now you're ready for take off! Type:
bin\gtk-demo.exe
For any comments on the jhbuild script and the moduleset please contact me.
Building the sources from scratch
The easiest thing to do after this is to install the basic dependencies. I've made a tarball of these that you can grab from gtk-deps.tar.gz. You should extract them in /opt (they will extract into ./gtk so your build target is /opt/gtk).
mingw-configure
You'll need a mingw-configure script for building each package. Grab it here: mingw-configure
A note about optimizations: the mingw-configure attached does not include any -O optimization flags, so if you want to enable those you should edit the script. However, nasty bugs have been observed in very particular circumstances in gtk# applications when using these optimizations.
Next grab the latest glib, atk, cairo, pango, and gtk+ (either as tarballs or from svn). For each package, you'll need to copy the mingw-configure script into the root directory. Also, if you're pulling the sources out of Subversion instead of using tarballs, you will need to run ./autogen.sh before running ./mingw-configure for each package, because mingw-configure requires there to be a configure script.
Each time you call mingw-configure, you need to pass it a prefix where you would like to install the Win32 GTK. This should be somewhere that does not conflict with your system files (e.g., do NOT install it to /usr), and it probably should not be where your mingw runtime and compiler are installed. I use /opt/gtk but you can choose anywhere you want. The examples below say --prefix=$YOUR_PREFIX. You may either set an environment variable called YOUR_PREFIX=/opt/gtk or you may specify --prefix=/opt/gtk on each line.
Compiling GLib
When building GLib, you'll need to create a file called win32.cache that looks like this:
glib_cv_long_long_format=I64 glib_cv_stack_grows=no
- Copy win32.cache (shown above) into the base directory
- ./mingw-configure --enable-explicit-deps=no --cache-file=win32.cache --prefix=$YOUR_PREFIX
- make install
Compiling atk
- ./mingw-configure --enable-explicit-deps=no --prefix=$YOUR_PREFIX
- make install
Compiling cairo
- ./mingw-configure --enable-explicit-deps=no --with-x=no --enable-xlibs=no --enable-xlibs-xrender=no --prefix=$YOUR_PREFIX
- make install
Compiling pango
- ./mingw-configure --enable-explicit-deps=no --with-x=no --prefix=$YOUR_PREFIX
- make install
Compiling GTK+
- ./mingw-configure --enable-explicit-deps=no --disable-cups --prefix=$YOUR_PREFIX
- make install
Contact
If you have any problems or questions regarding this build process feel free to email me: bratsche at gnome dot org.