/mingwlibs

Spring RTS MinGW Libraries

Primary LanguageC++

MinGW libraries for the Spring RTS game engine

README

The files in this package are needed to compile spring with MinGW.

Notes for users

There are two ways of using/setting-up mingwlibs.

  1. The simple one (recommended for new users)

Have them in a folder named mingwlibs where you have extracted the spring source tarball or git repository. This way, SCons or CMake will automatically find the libs. Your directory structure should look like this:

AI/                 Spring AI source code
game/               Output binaries go here
installer/          Scripts to build installer
rts/                Spring source code
mingwlibs/          This package!
mingwlibs/bin/      Executables
mingwlibs/dll/      Dynamic link libraries
mingwlibs/include/  Header files
mingwlibs/jlib/     Java libraries
mingwlibs/lib/      Native import libraries
  1. For multiple spring repositories

This is useful if you have multiple spring repositories, and you do not want to maintain mingwlibs separately for each of them, or if you simple want to keep it away from the spring sources.

Just extract the archive anywhere you want it, eg like this:

C:\mingwlibs\bin
C:\mingwlibs\dll
C:\mingwlibs\include
C:\mingwlibs\jlib
C:\mingwlibs\lib

For the spring build-system to find the libs, you have to specify them in the configure step like this:

SCons

scons configure mingwlibsdir=C:\mingwlibs [other-options...]

CMake

cmake -DMINGWLIBS=C:\mingwlibs [other-options...]

Notes for maintainers

Creating MinGW32 import libraries

Also included is reimp_new.zip, this contains reimp.exe which has been used to create MinGW32 import libraries for DevIL.dll, ILU.dll and ILUT.dll:

reimp DevIL.dll
reimp ILU.dll
reimp ILUT.dll

This creates libdevil.a, libilu.a, libilut.a and a number of .def files. You can throw away the .def files and move the lib*.a files to lib/.

il.h and ilu.h contain constructs which do not compile on certain GCC configurations so they have been fixed using the following command:

sed -i 's/(ILvoid)/()/g' mingwlibs/include/IL/{il.h,ilu.h}

Additionally il.h specifies __declspec(dllimport) __attribute__(__stdcall__) for its (and ILUs) functions, which causes (at least) GCC 4.3 to look for undecorated functions in the import library, which it will not find.

This is solved by the following modification:

--- il.h.orig   2007-04-17 23:00:59.000000000 +0200
+++ il.h        2007-04-18 13:02:55.000000000 +0200
@@ -386,7 +386,7 @@
 // This is from Win32s <wingdi.h> and <winnt.h>
 #if defined(__LCC__)
        #define ILAPI __stdcall
-#elif defined(_WIN32) //changed 20031221 to fix bug 840421
+#elif defined(_MSC_VER) //changed 20031221 to fix bug 840421
        #ifdef IL_STATIC_LIB
                #define ILAPI
        #else

The original il.h and ilu.h are included too as il.h.orig and ilu.h.orig.

imagehlp.h had an identical problem so it is included in this package. It should be picked up automatically because of the order of the include paths, ie. mingwlibs/include takes precedence over %MINGDIR%/include. It can be found in from w32api-3.9 on http://www.mingw.org.

Cross-Compiling Boost

Download the latest boost sources archive.

The following instructions outline the basic procedure, and they worked for boost 1.42.0. Due to the nature of boost, it is very likely these steps will have to be adapted in-between versions.

Adjust and run <boost_crosscompile.sh>.

You should now have both the static libs and the headers of the new boost version in your mingwlibs dir, and are only left to do the git magic to commit, and optionally mention the new version in the list below.

Current versions of included libraries and binaries