These are my notes for compiling a GCC toolchain using MinGW. Binaries created with this toolchain were tested using the Windows XP SP3 and Windows 7.
These instructions for building a toolchain were tested in the following environments:
Updated: Syzdek 15:07, 11 February 2011 (AKST)
Contents |
mkdir -p /usr/local/src/MinGW mkdir -p /usr/local/i386-mingw32
cd /usr/local/src/MinGW wget http://ftp.gnu.org/gnu/binutils/binutils-2.21.tar.bz2 tar -xjvf binutils-2.21.tar.bz2 mkdir -p binutils-2.21_build cd binutils-2.21_build ../binutils-2.21/configure --target=i386-mingw32 --prefix=/usr/local \ --with-build-time-tools=/usr/local/bin make -j 4 make install rm -f /usr/local/bin/windres ln -s /usr/local/bin/i386-mingw32-windres /usr/local/bin/windres
cd /usr/local/src/MinGW wget http://sourceforge.net/projects/mingw/files/MinGW/BaseSystem/RuntimeLibrary/MinGW-RT/mingwrt-3.18/mingwrt-3.18-mingw32-dll.tar.gz/download wget http://sourceforge.net/projects/mingw/files/MinGW/BaseSystem/RuntimeLibrary/MinGW-RT/mingwrt-3.18/mingwrt-3.18-mingw32-dev.tar.gz/download mkdir -p mingw-runtime cd mingw-runtime tar -xzvf ../mingwrt-3.18-mingw32-dll.tar.gz tar -xzvf ../mingwrt-3.18-mingw32-dev.tar.gz mkdir -p /usr/local/i386-mingw32 rsync -vrac /usr/local/src/MinGW/mingw-runtime/ /usr/local/i386-mingw32
cd /usr/local/src/MinGW/ wget http://sourceforge.net/projects/mingw/files/MinGW/BaseSystem/RuntimeLibrary/Win32-API/w32api-3.15/w32api-3.15-1-mingw32-dev.tar.lzma/download mkdir -p w32api cd w32api lzma -cd ../w32api-3.15-1-mingw32-dev.tar.lzma |tar -xvf - mkdir -p /usr/local/i386-mingw32 rsync -vrac /usr/local/src/MinGW/w32api/ /usr/local/i386-mingw32
cd /usr/local/src/MinGW wget http://mirrors-us.seosue.com/gcc/releases/gcc-4.5.2/gcc-4.5.2.tar.bz2 tar -xjvf gcc-4.5.2.tar.bz2 mkdir -p gcc-4.5.2_build cd gcc-4.5.2_build/ ../gcc-4.5.2/configure --target=i386-mingw32 --prefix=/usr/local \ --without-newlib --disable-nls \ --with-gnu-as --with-gnu-ld --disable-multilib \ --with-build-time-tools=/usr/local/bin \ --enable-languages="c,c++,objc" make -j 4 make install
cd /usr/local/src/MinGW/ wget http://ftp.gnu.org/gnu/libtool/libtool-2.2.6b.tar.lzma lzma -cd libtool-2.2.6b.tar.lzma |tar -xvf - mkdir -p libtool-2.2.6b_build cd libtool-2.2.6b_build ../libtool-2.2.6b/configure --host=i386-mingw32 \ --prefix=/usr/local/i386-mingw32 --enable-ltdl-install \ --disable-shared --enable-static make -j 4 make install
Depends upon GCC MinGW Toolchain.
cd /usr/local/src/MinGW/ wget http://zlib.net/zlib-1.2.5.tar.bz2 tar -xjvf zlib-1.2.5.tar.bz2 cd zlib-1.2.5 ./configure --prefix=/usr/local/i386-mingw32 \ --static --libdir=/usr/local/i386-mingw32/lib \ --includedir=/usr/local/i386-mingw32/include make CC=i386-mingw32-gcc LDSHARED=i386-mingw32-gcc \ CPP="i386-mingw32-cpp -E" AR="i386-mingw32-ar rc" \ RANLIB=i386-mingw32-ranlib cp libz.a /usr/local/i386-mingw32/lib/ cp zlib.h zconf.h /usr/local/i386-mingw32/include/ chmod 644 /usr/local/i386-mingw32/include/zlib.h \ /usr/local/i386-mingw32/include/zconf.h
Depends upon GCC MinGW Toolchain.
cd /usr/local/src/MinGW/ wget http://bzip.org/1.0.6/bzip2-1.0.6.tar.gz tar -xzvf bzip2-1.0.6.tar.gz cd bzip2-1.0.6 make PREFIX=/usr/local/i386-mingw32 CC=i386-mingw32-gcc \ AR=i386-mingw32-ar RANLIB=i386-mingw32-ranlib make PREFIX=/usr/local/i386-mingw32 install
Depends upon GCC MinGW Toolchain.
cd /usr/local/src/MinGW/ wget http://tukaani.org/xz/xz-5.0.1.tar.bz2 tar -xjvf xz-5.0.1.tar.bz2 mkdir -p xz-5.0.1_build cd xz-5.0.1_build ../xz-5.0.1/configure --prefix=/usr/local/i386-mingw32 \ --host=i386-mingw32 --disable-shared \ --disable-xz --disable-xzdec --disable-lzmadec \ --disable-assembler make make install
Depends upon GCC MinGW Toolchain and zlib.
cd /usr/local/src/MinGW/ wget http://prdownloads.sourceforge.net/libpng/libpng-1.5.1.tar.gz?download tar -xzvf libpng-1.5.1.tar.gz mkdir -p libpng-1.5.1_build cd libpng-1.5.1_build ../libpng-1.5.1/configure --prefix=/usr/local/i386-mingw32 \ --host=i386-mingw32 --disable-shared make make install
Depends upon GCC MinGW Toolchain.
cd /usr/local/src/MinGW/ wget http://www.ijg.org/files/jpegsrc.v8c.tar.gz tar -xzvf jpegsrc.v8c.tar.gz mkdir -p jpeg-8c_build cd jpeg-8c_build ../jpeg-8c/configure --prefix=/usr/local/i386-mingw32 \ --host=i386-mingw32 --disable-shared make make install
Depends upon GCC MinGW Toolchain and zlib.
cd /usr/local/src/MinGW/ wget ftp://ftp.remotesensing.org/pub/libtiff/tiff-3.9.4.tar.gz tar -xzvf tiff-3.9.4.tar.gz mkdir -p tiff-3.9.4_build cd tiff-3.9.4_build ../tiff-3.9.4/configure --prefix=/usr/local/i386-mingw32 \ --host=i386-mingw32 --disable-shared make make install
Depends upon GCC MinGW Toolchain, zlib, and bzip2.
cd /usr/local/src/MinGW/ wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.12.tar.bz2 tar -xjvf pcre-8.12.tar.bz2 mkdir -p pcre-8.12_build cd pcre-8.12_build ../pcre-8.12/configure --host=i386-mingw32 --prefix=/usr/local/i386-mingw32 \ --disable-shared --enable-unicode-properties --enable-pcregrep-libz \ --enable-pcregrep-libbz2 make -j 4 make install
Depends upon GCC MinGW Toolchain.
cd /usr/local/src/MinGW/ wget http://ftp.gnu.org/old-gnu/regex/regex-0.12.tar.gz tar -xzvf regex-0.12.tar.gz cd regex-0.12 CC=i386-mingw32-gcc ./configure --prefix=/usr/local/i386-mingw32 make /usr/local/bin/i386-mingw32-ar ru libregex.a regex.o cp regex.h /usr/local/i386-mingw32/include cp libregex.a /usr/local/i386-mingw32/lib
Depends upon GCC MinGW Toolchain, and zlib.
cd /usr/local/src/MinGW/ wget http://www.openssl.org/source/openssl-1.0.0d.tar.gz tar -xzvf openssl-1.0.0d.tar.gz cd openssl-1.0.0d ./Configure --prefix=/usr/local/i386-mingw32 no-shared \ no-threads no-dso no-krb5 no-asm enable-static-engine \ --cross-compile-prefix=i386-mingw32- \ -L/usr/local/i386-mingw32/lib \ -I/usr/local/i386-mingw32/include mingw make make install
Depends upon GCC MinGW Toolchain, zlib, and OpenSSL Libraries.
cd /usr/local/src/MinGW/ wget ftp://ftp.OpenLDAP.org/pub/OpenLDAP/openldap-release/openldap-2.4.23.tgz tar -xzvf openldap-2.4.23.tgz cd openldap-2.4.23 ./configure --prefix=/usr/local/i386-mingw32 \ --host=i386-mingw32 --disable-slapd --disable-slurpd \ --disable-shared --disable-threads \ CC=i386-mingw32-gcc LD=i386-mingw32-ld \ LIBS="-lws2_32 -lgdi32 -lcrypt32 -lz -lbz2" echo '#undef NEED_MEMCMP_REPLACEMENT' >> include/portable.h make depend make make install
Depends upon GCC MinGW Toolchain, and zlib.
cd /usr/local/src/MinGW/ wget http://prdownloads.sourceforge.net/wxwindows/wxWidgets-2.9.1.tar.bz2 tar -xjvf wxWidgets-2.9.1.tar.bz2 mkdir wxWidgets-2.9.1_build cd wxWidgets-2.9.1_build/ ../wxWidgets-2.9.1/configure --prefix=/usr/local/i386-mingw32 \ --host=i386-mingw32 --disable-shared make make install
Compile with wxWidgets:
i386-mingw32-g++ wxHello.cpp -o wxHello.exe \
`/usr/local/i386-mingw32/bin/wx-config --cflags` \
`/usr/local/i386-mingw32/bin/wx-config --libs`
i386-mingw32-strip wxHello.exe
cp /usr/local/bin/libgcc_s_sjlj-1.dll .
cp /usr/local/bin/libstdc++-6.dll .
CC=i386-mingw32-gcc
CFLAGS=-I/usr/local/i386-mingw32/include
LDFLAGS=-L/usr/local/i386-mingw32/lib
export CC CFLAGS LDFLAGS
${CC} -W -Wall -Werror ${CFLAGS} -c hello.c
${CC} -W -Wall -Werror ${CFLAGS} -c hola.c
${CC} -W -Wall -Werror ${LDFLAGS} -o greetings.exe hello.o hola.o
CC=i386-mingw32-gcc
CFLAGS="-W -Wall -Werror -I/usr/local/i386-mingw32/include"
LDFLAGS="-W -Wall -Werror -L/usr/local/i386-mingw32/lib"
export CC CFLAGS LDFLAGS
libtool --mode=compile --tag=CC ${CC} ${CFLAGS} -c hello.c
libtool --mode=compile --tag=CC ${CC} ${CFLAGS} -c hola.c
libtool --mode=link --tag=CC ${CC} ${LDFLAGS} -o greetings.exe hello.o hola.o
./configure --host=i386-mingw32 \
CC=i386-mingw32-gcc \
CFLAGS=-I/usr/local/i386-mingw32/include \
LDFLAGS=-L/usr/local/i386-mingw32/lib
make