MinGW Toolchain

From BindleBinariesWiki
(Redirected from Cross Compiler)
Jump to: navigation, search

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:

  • OS X 10.6.6
  • Slackware 13.1

Updated: Syzdek 15:07, 11 February 2011 (AKST)

Contents

Creating MinGW Tool Chain

GCC MinGW Toolchain

Directories and Variables

mkdir -p /usr/local/src/MinGW
mkdir -p /usr/local/i386-mingw32

GNU Binutils

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

MinGW Runtime

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

MinGW Win32 API

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

GCC

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

GNU Libtool

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

Additional Libraries for Toolchain

zlib

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

bzip2

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

xz (liblzma.a)

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

libpng

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

libjpeg

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

libtiff

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

PCRE

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

GNU regex

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

OpenSSL Libraries

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

OpenLDAP Libraries

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

wxWidgets

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 .

Compiling With MinGW Tool Chain

Simple Build

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

GNU Libtool Build

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

Build using configure from GNU Autoconf

./configure --host=i386-mingw32 \
    CC=i386-mingw32-gcc \
    CFLAGS=-I/usr/local/i386-mingw32/include \
    LDFLAGS=-L/usr/local/i386-mingw32/lib
make

External links

Personal tools