Free and Open Source real time strategy game with a new take on micro-management

Difference between revisions of "Mingw cross compilation"

From Globulation2

Jump to: navigation, search
(documenting my effort to cross-compile :()
Line 25: Line 25:
#:<pre>tar jxf glob2_required_libs_mingw.tar.bz2 -C ./libs</pre>
#:<pre>tar jxf glob2_required_libs_mingw.tar.bz2 -C ./libs</pre>
#download boost c++ precompiled libraries :
#download boost c++ precompiled libraries :
#:<pre>wget http://viral.media.mit.edu/releases/boost-1.33.1-mingw-bin.tar.gz</pre>
#:broken link ... <pre>wget http://viral.media.mit.edu/releases/boost-1.33.1-mingw-bin.tar.gz</pre></s>
#manually install boost c++ with the following commands :
#manually install boost c++ with the following commands :
#:<pre>tar zxf boost-1.33.1-mingw-bin.tar.gz</pre>
#:<pre>tar zxf boost-1.33.1-mingw-bin.tar.gz</pre>
#:<pre>mv boost/include/boost-1_33_1/boost ./libs/include</pre>
#:<pre>mv boost/include/boost-1_33_1/boost ./libs/include</pre>
#:<pre>mv boost/lib/* ./libs/lib</pre>
#:<pre>mv boost/lib/* ./libs/lib</pre>
#Download a mingw compiler that works :
#Install a mingw compiler
#:<pre>sudo aptitude install mingw32-binutils mingw32 mingw32-runtime</pre>
#:<pre>wget http://mirrors.ircam.fr/pub/videolan/testing/win32/mingw-gcc3.3.1-linux-crosscompiler.tar.bz2</pre>
#As root, unpack the compiler (it will create a mingw directory in /usr/local) :
#:<pre>tar jxf mingw-gcc3.3.1-linux-crosscompiler.tar.bz2 -C /</pre>
#From the directory containing the libs directory, type the following :
#From the directory containing the libs directory, type the following :
#:<pre>export CC="i586-mingw32msvc-gcc"</pre>
#:<pre>export CC="i586-mingw32msvc-gcc"</pre>
Line 45: Line 43:
#:perl -e '$pwd=%ENV->{PWD};$tmp="";while(<>){chomp;if(s/prefix=\/usr/prefix=/g){$_="prefix=".$pwd."/libs"}$tmp.= $_."\n"}open(FI,"+< ./libs/bin/sdl-config");print FI $tmp;' ./libs/bin/sdl-config
#:perl -e '$pwd=%ENV->{PWD};$tmp="";while(<>){chomp;if(s/prefix=\/usr/prefix=/g){$_="prefix=".$pwd."/libs"}$tmp.= $_."\n"}open(FI,"+< ./libs/bin/sdl-config");print FI $tmp;' ./libs/bin/sdl-config
#download glob2 mercurial:
#download glob2 mercurial:
#:<pre>hg clone http://hg.globulation2.org/glob2/</pre>
#:<pre>hg clone http://hg.globulation2.org/glob2-new/</pre>
#:<pre>cd glob2</pre>
#:<pre>cd glob2</pre>
#:<pre>cp ../libs/bin/SDL.dll ../libs/bin/libvorbis-0.dll ../libs/bin/libogg-0.dll ../libs/bin/libvorbisenc-2.dll ../libs/bin/libfreetype-6.dll .</pre>
#:<pre>cp ../libs/bin/SDL.dll ../libs/bin/libvorbis-0.dll ../libs/bin/libogg-0.dll ../libs/bin/libvorbisenc-2.dll ../libs/bin/libfreetype-6.dll .</pre>

Revision as of 00:08, 7 January 2010

This guide is no longer valid: Globulation now uses scons to compile the source. If you do a cross compile please update this page accordingly. Thanx.


This page explains how to build and test globulation2 for windows on a Debian GNU/Linux operating system. To see how to compile it natively on Windows, please see Mingw compilation.

For any problems or suggestions, don't hesitate to contact me.

Remark: if you use another mingw compiler than the one requested to download in this page, compilation might fail.

Cross compiled wine test.png

Compile globulation2 for windows on Debian using mingw

  1. install mingw :
    apt-get install mingw32 mingw32-binutils mingw32-runtime
  2. install wine from the wine repository :
    Change the file /etc/apt/sources.list and add
    deb http://wine.sourceforge.net/apt/ binary/
    apt-get update && apt-get install wine && ln -s /usr/bin/wine /usr/bin/wine-auto
  3. create the following directory :
    mkdir libs
  4. download glob2_required_libs_mingw.tar.bz2 :
    wget http://globulation2.org/dev/glob2_required_libs_mingw.tar.bz2
  5. untar the libraries like this :
    tar jxf glob2_required_libs_mingw.tar.bz2 -C ./libs
  6. download boost c++ precompiled libraries :
    broken link ...
    wget http://viral.media.mit.edu/releases/boost-1.33.1-mingw-bin.tar.gz
  7. manually install boost c++ with the following commands :
    tar zxf boost-1.33.1-mingw-bin.tar.gz
    mv boost/include/boost-1_33_1/boost ./libs/include
    mv boost/lib/* ./libs/lib
  8. Install a mingw compiler
    sudo aptitude install mingw32-binutils mingw32 mingw32-runtime
  9. From the directory containing the libs directory, type the following :
    export CC="i586-mingw32msvc-gcc"
    export CXX="i586-mingw32msvc-g++"
    export CFLAGS="-I$PWD/libs/include $CFLAGS"
    export CXXFLAGS="-I$PWD/libs/include -I$PWD/libs/include/freetype2 $CXXFLAGS"
    export LDFLAGS="-L$PWD/libs/lib $LDFLAGS"
    export PATH=/usr/local/mingw/bin:/usr/i586-mingw32msvc/bin:$PWD/libs/bin:$PATH
    rm ./libs/bin/auto*
    change the third line of ./libs/bin/sdl-config from prefix=/usr to point to the libs directory (hard path) or from the directory containing the libs directory, type:
    perl -e '$pwd=%ENV->{PWD};$tmp="";while(<>){chomp;if(s/prefix=\/usr/prefix=/g){$_="prefix=".$pwd."/libs"}$tmp.= $_."\n"}open(FI,"+< ./libs/bin/sdl-config");print FI $tmp;' ./libs/bin/sdl-config
  10. download glob2 mercurial:
    hg clone http://hg.globulation2.org/glob2-new/
    cd glob2
    cp ../libs/bin/SDL.dll ../libs/bin/libvorbis-0.dll ../libs/bin/libogg-0.dll ../libs/bin/libvorbisenc-2.dll ../libs/bin/libfreetype-6.dll .
    cp ../libs/lib/libvorbisfile.a ../libs/lib/libvorbis.a ../libs/lib/libogg.a .
    Open the configure.in file, find:
    CPPFLAGS="$CPPFLAGS $SDL_CFLAGS"
    and replace with:
    CPPFLAGS="$CPPFLAGS $SDL_CFLAGS -I/usr/include/freetype2"
    LDFLAGS="$LDFLAGS `sdl-config --libs` -lSDL_ttf"
    In the same file, find:
    LIBS="$LIBS -logg -lwsock32"
    and replace with:
    LIBS="$LIBS -lwsock32 ../libvorbisfile.a ../libvorbis.a ../libogg.a"
  11. compiling glob2 :
    ./bootstrap
    ./configure --host=i586-mingw32msvc
    make
  12. To make the executable smaller :
    strip ./src/glob2.exe

Test globulation2 for windows on Debian

  1. download glob2_windows_runtime.tar.bz2
    wget http://globulation2.org/dev/glob2_windows_runtime.tar.bz2
  2. extract it with :
    tar jxf glob2_windows_runtime.tar.bz2
  3. go in the glob2 directory where you have compiled glob2 and type
    ./syncdata
    ./syncmaps
  4. copy the content of glob2/data/ to glob2_runtime/data/
  5. copy the content of glob2/maps/ to glob2_runtime/maps/
  6. copy glob2.exe which is in the src directory (glob2/src/) to glob2_runtime/
  7. run wine glob2.exe from the glob2_runtime directory and play :)
Misc