Introduction ------------ MinGW is short for the Minimalist GNU Windows. It's package which allows you to use GCC and other GNU tools to compile native windows programs. In this case "native" means programs which don't require extra DLLs like cygwin DLL. Mingw32 programs use DLLs supplied with all current Win32 platforms. Thus the programs are light weight and easy to distribute. This document describes by shell commands how to compile and install MinGW cross development tools on Unix host and how to use it for building windows version of xine. Download -------- MinGW packages: http://mingw.org/download.shtml 1) binutils (sources), binutils-build.sh 2) gcc-core, gcc-c++ (sources), gcc-build.sh 3) w32api, mingw-runtime (binaries and sources) DirectX headers (tested with version 7): http://www.google.com/search?hl=cs&q=win32-dx7headers.tgz http://www.google.com/search?q=dx7adxf.exe Pthread Win32: ftp://sources.redhat.com/pub/pthreads-win32/ zlib: http://www.zlib.net Build ----- In the following text are used symbols $PREFIX and $USER with this meaning: $PREFIX .... directory of the mingw cross environtment $USER ...... current user 1. compile binutils tar xzf binutils-2.13.90-20030111-1-src.tar.gz mkdir bin cd bin ../binutils-2.13.90-20030111-1-src/configure \ --target=i386-mingw32 \ --prefix=$PREFIX make su make install exit 2. add $PREFIX/bin into PATH ... 3. compile compiler (gcc-core, gcc-c++) # # prepare runtime environment from binaries # mkdir runtime cd runtime tar xzf ../w32api-2.5.tar.gz tar xzf ../mingw-runtime-3.3.tar.gz cd .. # # compile and install the compiler # # if you'll want rerun this step, I recommend delete # $PREFIX/i386-mingw32/sys-include # tar xzf gcc-core-3.3.1-20030804-1-src.tar.gz tar xzf gcc-g++-3.3.1-20030804-1-src.tar.gz mkdir gcc-bin cd gcc-bin # needed for the copying header files su # more option may be needed for successfull compilation, # see gcc-3.3.1-1-build.sh ../gcc-3.3.1-20030804-1/configure \ --disable-shared \ --target=i386-mingw32 \ --with-headers=../runtime/include \ --with-libs=../runtime/lib \ --prefix=$PREFIX exit make #or recommended: make CFLAGS=-O2 LDFLAGS=-s su make install exit 4. recompile w32api and mingw-runtime from sources (optional) # # installing must be into $PREFIX/i386-mingw32 # tar xzf w32api-2.5-src.tar.gz cd w32api-2.5 ./configure --prefix=$PREFIX/i386-mingw32 --host=i386-mingw32 make su make install exit # # installing must be into $PREFIX/i386-mingw32 # tar xzf mingw-runtime-3.3-src.tar.gz cd mingw-runtime-3.3 # copying w32api headers into ./include (because of a bug in runtime # package) ... # compiling CC=i386-mingw32-gcc \ DLLTOOL=i386-mingw32-dlltool \ AR=i386-mingw32-ar \ AS=i386-mingw32-as \ RANLIB=i386-mingw32-ranlib \ ./configure --prefix=$PREFIX/i386-mingw32 --target=i386-mingw32 make su make install exit 5. install DirectX headers and other libraries su cd $PREFIX/include # untar dx7headers.tar.gz (maybe to a subdirectory) ... exit 6. compile and install pthreads-win32 tar xzf pthreads-w32-2-7-0-release.tar.gz cd pthreads-w32-2-7-0-release/ make CROSS=i386-mingw32- PTHREAD_DEF=pthreadGC2.def clean GC # # possibility to use pthread library in M$ Visual C (optional) # mv pthread.def pthreadGC2.def wine LIB.EXE /machine:i386 /def:pthreadGC2.def # # installing # su mkdir -p $PREFIX/pthreads-win32/bin mkdir -p $PREFIX/pthreads-win32/include mkdir -p $PREFIX/pthreads-win32/lib cp pthreadGC2.dll $PREFIX/pthreads-win32/bin/ cp libpthreadGC2.a pthreadGC2.lib $PREFIX/pthreads-win32/lib/ ln -s libpthreadGC2.a $PREFIX/pthreads-win32/lib/libpthread.a ln -s pthreadGC2.lib $PREFIX/pthreads-win32/lib/pthread.lib cp pthread.h semaphore.h sched.h $PREFIX/pthreads-win32/include/ exit 7. compile and install zlib tar xjf zlib-1.2.3.tar.bz2 cd zlib-1.2.3 # # small workaround in Makefile: # sed -e 's/dllwrap /i386-mingw32-dllwrap /g' win32/Makefile.gcc > Makefile # # compiling # make CC=i386-mingw32-gcc AR=i386-mingw32-ar RC=i386-mingw32-windres STATICLIB=libz-static.a IMPLIB=libz.a # # possibility to use zlib library in M$ Visual C (optional) # cp win32/zlib.def zlib1.def wine LIB.EXE /machine:i386 /def:zlib1.def # # installing # su mkdir -p $PREFIX/zlib/{include,lib,bin} cp zconf.h zlib.h $PREFIX/zlib/include/ cp libz.a libz-static.a zlib1.lib $PREFIX/zlib/lib/ cp zlib1.dll $PREFIX/zlib/bin/ exit Using MinGW cross development tools ----------------------------------- Now we can build xine library for Windows by this way: # # configure for mingw cross compiling # (the build option is needed only for forcing cross compilation mode) # ./configure \ --host=i386-mingw32 \ --build=i686-debian-linux \ --disable-freetype \ --disable-vcd \ --with-dxheaders=$PREFIX/include/dx7headers \ --with-zlib-prefix=$PREFIX/zlib \ --with-pthread-prefix=$PREFIX/pthreads-win32 # # compile # make # # install # make install DESTDIR=/tmp/xine-lib-mingwcross rm /tmp/xine-lib-mingwcross/lib/xine/plugins/1.1.0{/,/post}/*.a # # create libxine-1.lib file (optional, when we want to use xine library in # M$ compilers) # # we will need wine and some tools from M$ Visual C: LIB.EXE, LINK.EXE, # MSPDB60.DLL # cd /lib cp ../bin/libxine-1.dll . wine LIB.EXE /machine:i386 /def:libxine-1.def rm libxine-1.dll