Cross Compiler

From BindleBinariesWiki
Jump to: navigation, search

This document is a compulation of the notes I took while building my MinGW cross-compile tool chain. The first four packages are the base of the tool chain, the remaining packages allow me to distribute binaries without needing to include DLL's. This tool chain was compiled on OS X 10.5 and resulting binaries were tested on Windows 2000.

These are my notes from compiling a MinGW GCC cross compiler on 2007/11/14. This was tested on OS X 10.5.0 aka Leopard. The binaries produced by this tool chain were tested on Windows 2000. -- David Syzdek Wed Nov 14 07:52:16 AKST 2007

Contents

Creating MinGW Tool Chain

Base Tool Chain

GNU Binutils

tar -xjvf binutils-2.17.tar.bz2
mkdir binutils-2.17_build
cd binutils-2.17_build
../binutils-2.17/configure --target=i386-mingw32  --prefix=/usr/local
make -j 4
make install
ln -s /usr/local/bin/i386-mingw32-windres /usr/local/bin/windres

MinGW Runtime

mkdir mingw-runtime
cd mingw-runtime
tar -xjvf ../mingw-runtime-3.13.tar.bz2 
mkdir -p /usr/local/i386-mingw32/bin
mkdir -p /usr/local/i386-mingw32/lib
mkdir -p /usr/local/i386-mingw32/include
mkdir -p /usr/local/i386-mingw32/doc 
for DIR in bin doc include lib;do 
  cp  -pvR ${DIR} /usr/local/i386-mingw32
done


MinGW Win32 API

mkdir -p /usr/local/i386-mingw32
mkdir w32api
cd w32api
tar -xjvf ../w32api-3.10.tar.bz2 
for DIR in include lib;do
   cp  -pvR ${DIR} /usr/local/i386-mingw32
done

GCC

tar -xjvf gcc-4.2.2.tar.bz2
mkdir gcc-4.2.2_build
cd gcc-4.2.2_build/
../gcc-4.2.2/configure --target=i386-mingw32 --without-newlib --disable-nls \
	--with-gnu-as --with-gnu-ld --disable-multilib --enable-libgcj \
	--with-gxx-include-dir=/usr/local/i386-mingw32/include/c++/4.2.2
make -j 4
make install


GNU Libtool

tar -xjvf libtool-1.5.24.tar.bz2
mkdir libtool-1.5.24_build
cd libtool-1.5.24_build/
../libtool-1.5.24/configure --host=i386-mingw32 --prefix=/usr/local/i386-mingw32
make -j 4
make install

Additional Libraries for Toolchain

GNU regex

ftp://ftp.gnu.org/old-gnu/regex/

tar -xjvf regex-0.12.tar.bz2
cd regex-0.12
env 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


OpenLDAP Libraries

tar -xjvf openldap-2.3.38.tar.bz2
mkdir openldap-2.3.38_build
cd openldap-2.3.38_build
env CC=i386-mingw32-gcc CPPFLAGS=-I/usr/local/i386-mingw32/include \
	LDFLAGS=-L/usr/local/i386-mingw32/lib \
	../openldap-2.3.38/configure --prefix=/usr/local/i386-mingw32 \
	--host=i386-mingw32 --disable-slapd --disable-slurpd --disable-shared \
	--disable-threads
make depend LIBTOOL=/usr/local/i386-mingw32/bin/libtool
make -j 4 LIBTOOL=/usr/local/i386-mingw32/bin/libtool
make install

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