5.2 KiB
Cross-compilation for Win9x
Creating a toolchain targetting i386-mingw32
is not usually possible
with the distribution-provided packages. This documentation describes
which versions are known to work so far, as well as detailed
configuration scripts.
The following documentation assumes the installation prefix
$HOME/i386-mingw32
for the GNU toolchain. However, feel free to
change this value, if required.
Some specific library versions might be hard to find, so download links are provided.
Environment variables
Since it is desirable to avoid messing with system-level libraries,
when building for Win9x, rts
will look for dependencies by inspecting
the following environment variables:
SDL_PATH
SDL_TTF_PATH
FREETYPE_PATH
SDL_MIXER_PATH
Also, the directory containing the GNU toolchain binaries (which
should be located at $HOME/i386-mingw32/bin
by default) must be added
to the PATH
variable.
gcc
From own experience, modern versions of gcc
cannot be used to compile
a cross-compiler for Win9x. Instead, a much older version is required.
So far, gcc-3.4.5
is the latest known version to work.
Known issues
- Take into account only C99 is supported by
gcc-3.4.5
. gcc-3.4.5
complains about the use of-ffunction-sections
and-fdata-sections
.
../gcc-3.4.5-20060117-2/configure --disable-nls --disable-rpath \
--disable-win32-registry --enable-languages=c --enable-sjlj-exceptions \
--enable-threads=win32 --prefix=$HOME/i386-mingw32 \
--program-prefix=i386-mingw32- --target=i386 -mingw32 --with-gnu-as \
--with-gnu-ld
gcc-core-3.4.5-20060117-2-src.tar.gz
binutils
GNU binutils is usually not so problematic, so any version should do.
Only binutils-2.35
has been tested.
../binutils-2.35/configure --prefix=$HOME/i386-mingw32 --target=i386-mingw32
mingwrt and w32api
So far, only versions mingwrt-3.15.2-mingw32
and w32api-3.13-mingw32
have been tested.
Known issues
- Some hacks have to be done in order to compile these libraries. These are described on the script below.
../w32api-3.13-mingw32/configure --prefix=$HOME/i386-mingw32 --host=i386-mingw32
# Hack at line below
cd mingwrt-3.15.2-mingw32/ && cp -r include/* ~/i386-mingw32/include/
../mingwrt-3.15.2-mingw32/configure --prefix=$HOME/i386-mingw32 --target=i386-mingw32
../sdl-1.2.15-src/configure --host=i386-mingw32 --prefix=/home/xavier/sdl-1.2.15 \
--enable-shared=no CC=i386-mingw32-gcc
freetype (not required)
Only freetype-2.4.8
is known to work so far.
Known issues
- Apparently, out of source builds are not possible.
cd freetype-2.4.8-src/ && ./configure --prefix=$HOME/freetype-2.4.8 \
--host=i386-mingw32 --enable-shared=no CC=i386-mingw32-gcc
SDL
sdl-1.2.15
is the latest version supported version for the Win9x family
of operating systems. In order to keep things easy, the script below
configures SDL as a static library.
../sdl-1.2.15-src/configure --host=i386-mingw32 --prefix=$HOME/sdl-1.2.15 \
--enable-shared=no CC=i386-mingw32-gcc \
CFLAGS='-ffunction-sections -fdata-sections'
DirectX headers and static libraries
DirectX can help with hardware acceleration on older hardware. Fortunately,
the SDL team distribute both source and binaries that can be included when
building sdl-1.2.15
. While two tarballs are distributed, only
directx-devel.tar.gz
has been tested so far.
directx-devel.tar.gz directx-source.tar.z
../sdl-1.2.15-src/configure --host=i386-mingw32 --prefix=$HOME/sdl-1.2.15 \
--enable-shared=no CC=i386-mingw32-gcc \
CFLAGS="-ffunction-sections -fdata-sections \
-I$HOME/directx-devel/include -L$HOME/directx-devel/lib"
In order to take advantage of DirectX, remember to assign the environment
variable SDL_VIDEODRIVER
to directx
before running rts
.
SDL_mixer
Only SDL_mixer-1.2.12
is known to work so far. Since rts
only uses
WAVE files, support for other audio formats is not required.
../SDL_mixer-1.2.12-src/configure --host=i386-mingw32 --enable-shared=no \
--prefix=$HOME/SDL_mixer-1.2.12 --disable-music-cmd --disable-music-mod \
--disable-music-ogg --disable-music-mp3 --disable-music-midi \
--disable-music-flac CC=i386-mingw32-gcc --with-sdl-prefix=$HOME/sdl-1.2.15 \
CFLAGS='-ffunction-sections -fdata-sections'
../SDL_gfx-2.0.26-src/configure --host=i386-mingw32 --enable-shared=no \
--prefix=$HOME/SDL_gfx-2.0.26 --with-sdl-prefix=$HOME/sdl-1.2.15 \
CFLAGS='-ffunction-sections -fdata-sections' \
CC=i386-mingw32-gcc
ENET
../enet-1.3.17/configure --prefix=$HOME/enet-1.3.17-win32 \
--host=i386-mingw32 CFLAGS='-ffunction-sections -fdata-sections' \
CC=i386-mingw32-gcc